




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、手把手使用springmvc本文主要通過實例介紹怎么從新建工程通過配置,一步一步實現(xiàn)使用spirngmvc建立工程,實現(xiàn)基本的增刪查改數(shù)據(jù)庫等功能。一、新建工程1.打開myeclipse新建Web Project點擊next輸入工程名TestWeb這里自己命名點擊finish完成。新建工程出現(xiàn)在右側(cè)工程區(qū)域,這里jre最好是5.0以上,本例中使用的是6.0二、工程配置1.相關(guān)jar包下載相關(guān)spring的包以及其他依賴jar包,拷貝到web-inf/lib下Spring相關(guān)的jar包,本例使用3.0.6版本,數(shù)據(jù)庫使用mysql其他工具和依賴包2.配置applicationContext.xm
2、l文件文件內(nèi)容如下:數(shù)據(jù)庫使用mysql,如果使用其他數(shù)據(jù)庫可更換驅(qū)動driverClassName以及url的值,本例連接的地址為本機,端口為3306,庫名為reports。其中DbExecuter使用jdbcTemplate操作數(shù)據(jù)庫,DbExecuter可改為自己的數(shù)據(jù)庫處理類,本例未使用Mybatis。切面示例使用aopLog,為com.zkxx.reportforms.demo.action包下的所有類方法,若有不同可更換切入點表達式pointcut="execution,切入方式為環(huán)繞around,也可以更改為after,before。<?xml
3、version="1.0" encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:p="/schema/p"xmlns:context="/schema
4、/context"xmlns:aop="/schema/aop"xmlns:tx="/schema/tx"/schema/context/spring-context-3.0.xsd"><!- 數(shù)據(jù)源配置 -><bean id="dataSource" class="mons.dbcp.BasicDataSou
5、rce" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql:/:3306/reports?useUnicode=true&characterEncoding=utf8"/> <property name=&quo
6、t;username" value="root" /> <property name="password" value="" /> <property name="initialSize" value="1" /> <property name="maxActive" value="50" /> <property name="maxIdle" value="2&quo
7、t; /> <property name="minIdle" value="1" /> </bean><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"> </property> </bean> <bean
8、 id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!- 聲明使用注解式事務(wù) -> <tx:annotation-driven transaction-manager="t
9、ransactionManager"/> <bean id="DbExecuter" class="com.zkxx.db.DbExecuter" factory-method="getInstance"> <property name="springjdbc" ref="jdbcTemplate"> </property> </bean> <!-日志切面-> <bean id="aopLog"
10、 class="com.zkxx.ann.AopLog"></bean> <aop:config> <aop:aspect ref="aopLog"> <aop:around method="runOnAround" pointcut="execution (* com.zkxx.reportforms.demo.action.*.*(.)"/> </aop:aspect> </aop:config> <context:compon
11、ent-scan base-package="com.zkxx" /></beans>3.配置web.xml文件配置web-inf下的web.xml文件,文件內(nèi)容如下:其中springmvc攔截.do的請求,這里可以根據(jù)自己的需求修改。<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns=" xmlns:xsi="/2001/XMLSchema-in
12、stance" <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value> </context-param> <liste
13、ner><listener-class></listener-class></listener><!- Spring 刷新Introspector防止內(nèi)存泄露 -><listener><listener-class></listener-class></listener><!- Spring MVC 3 -><servlet> <servlet-name>springmvc</servlet-name> <servlet-class>
14、org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping></web-app>4.配
15、置springmvc-servlet.xml文件內(nèi)容如下:利用攔截器處理用戶管理session是否存在,其中l(wèi)ist的值不在攔截的范圍。文件上傳的大小可以調(diào)節(jié)。<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:p="http:/www
16、./schema/p"xmlns:aop="/schema/aop"xmlns:context="/schema/context"xmlns:mvc="/schema/mvc"xsi:schemaLocation=" /schema/context/
17、spring-context-3.0.xsd"> <context:annotation-config/><aop:aspectj-autoproxy proxy-target-class="true"/><context:component-scan base-package="com.zkxx" /><mvc:annotation-driven/><bean class="org.springframework.web.servlet.mvc.annotation.Ann
18、otationMethodHandlerAdapter"></bean><!- 攔截器 處理登錄session管理等-> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/*" /> <bean class="com.zkxx.ann.SecurityInterceptor"> <property name="excludedUrls"> <list> <
19、value>/manager/session</value> <value>/manager/login</value> </list> </property> </bean> </mvc:interceptor></mvc:interceptors><!- 支持上傳文件 -> <bean id="multipartResolver" class="mons.CommonsMultipartResolver"> <prope
20、rty name="defaultEncoding" value="UTF-8"/><!- 指定所上傳文件的總大小不能超過2000KB。注意maxUploadSize屬性的限制不是針對單個文件,而是所有文件的容量之和 -><property name="maxUploadSize" value="2000000"/></bean><bean id="exceptionResolver" class="org.springframework
21、.web.servlet.handler.SimpleMappingExceptionResolver"><property name="exceptionMappings"><props><!- 遇到MaxUploadSizeExceededException異常時,自動跳轉(zhuǎn)到/pages/error.jsp頁面 -><prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">/error<
22、/prop></props></property></bean><bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix"><value>/pages/</value></property> <property name="suffix
23、"><value>.jsp</value></property> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> </bean> </beans>三、工程實例開始1.攔截器實現(xiàn)代碼如下:對應(yīng)springmvc-servlet.xml里的 <mvc:interceptors>包名可自定義package com.zkxx.ann;import
24、 java.util.List;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;public class SecurityInterceptor implements H
25、andlerInterceptor private List<String> excludedUrls; public void setExcludedUrls(List<String> excludedUrls) this.excludedUrls = excludedUrls; Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception / 判斷是否是需要攔截的URI,如果是不需
26、要攔截的返回TRUE。 String requestUri = request.getRequestURI(); System.out.println("requestUri="+requestUri); for (String url : excludedUrls) if (requestUri.endsWith(url+".do") return true; / 獲取sessionHttpSession session = request.getSession();/ 獲取session如果為空,跳轉(zhuǎn)到相關(guān)處理頁面。 if (session.getA
27、ttribute("user") = null) request.getRequestDispatcher("/manager/session.do").forward(request, response); return false; / throw new Exception(); else return true; Overridepublic void afterCompletion(HttpServletRequest arg0,HttpServletResponse arg1, Object arg2, Exception arg3)thro
28、ws Exception / TODO Auto-generated method stub/可自行添加處理方法System.out.println("afterCompletion");Overridepublic void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,Object arg2, ModelAndView arg3) throws Exception / TODO Auto-generated method stub/可自行添加處理方法System.out.println(&quo
29、t;postHandle");2.Aop日志的實現(xiàn)代碼如下:對應(yīng)applicationContext.xml文件里的<bean id="aopLog" class="com.zkxx.ann.AopLog"></bean>package com.zkxx.ann;import org.aspectj.lang.ProceedingJoinPoint;public class AopLog public Object runOnAround(ProceedingJoinPoint point) throws Throwab
30、le System.out.println("開始 around日志"); Object parames = point.getArgs();/獲取目標(biāo)方法體參數(shù) System.out.println(point.getTarget().getClass().getName(); for(int i=0;parames!=null&&i<parames.length;i+) System.out.println("parames"+i+"="+paramesi); /可添加寫日志的方法 Object object
31、 = ceed(parames); /可添加寫日志的方法 System.out.println("結(jié)束 around日志"); return object; 3.數(shù)據(jù)庫操作的實現(xiàn)代碼如下:對應(yīng)applicationContext.xml文件里的<bean id="DbExecuter" class="com.zkxx.db.DbExecuter" factory-method="getInstance"><property name="springjdbc"
32、ref="jdbcTemplate"></property></bean>package com.zkxx.db;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;import java.util.List;import java.util.Map;import org.springframework.jdbc.core.BeanPropertyRowMapper;import org.springframework
33、.jdbc.core.JdbcTemplate;import org.springframework.jdbc.core.PreparedStatementCreator;public class DbExecuter private static DbExecuter instance=null; private JdbcTemplate springjdbc; private DbExecuter() public static DbExecuter getInstance() if(instance=null) instance=new DbExecuter(); return inst
34、ance; public void setSpringjdbc(JdbcTemplate springjdbc) this.springjdbc = springjdbc;System.out.println("springjdbc="+springjdbc); public JdbcTemplate getSpringjdbc() return springjdbc; public List query(String sql,Object arr) List<Map<String,Object>> list=springjdbc.query(sql
35、, arr, new ItemMapper(); return list; public List query(String sql,Class cls, Object arr) List<Object> list=springjdbc.query(sql,arr,BeanPropertyRowMapper.newInstance(cls);/queryForList(sql, cls, arr); return list; public int execute(String sql,Object arr) final String sqlstr=sql; final Object
36、 paras=arr; int jg=-1; jg=getSpringjdbc().update(new PreparedStatementCreator() public PreparedStatement createPreparedStatement(Connection con) throws SQLException PreparedStatement ps = con.prepareStatement(sqlstr); for(int j=0;j<paras.length;j+) Object str= parasj; ps.setObject(j+1, str); retu
37、rn ps; ); return jg; 4.一個簡單的保存查詢在上面的基本準(zhǔn)備工作完成后,我們來寫一個簡單的保存查詢功能目錄結(jié)構(gòu)如下(1)Src類頁面(2)頁面元素說明,兩張表,一張主表,一張明細(xì)表對應(yīng)的bo分別為NsrxxBo和MxBo頁面端組織數(shù)據(jù)成json格式var jsonstr="nsrsbh":"1122","nsrmc":"33","dz":"測試","dh":"111","je":"100
38、","se":"20","bz":"","mxlist":"xmje":"50","xmse":"10","xmje":"50","xmse":"10"其中注意contentType為application/json,這樣springmvc會自動對json進行解析填充對應(yīng)的bo類,返回也為相應(yīng)的json格式數(shù)據(jù)。保存:var s
39、bh=1122;$.ajax(url : '/TestWeb/djxx/nsrxx.do',dataType : 'json', contentType:"application/json",data : jsonstr,type : 'post',async : true,success : function(data) alert("succ="+JSON.stringify(data);if (data.fhjg = 0) $.messager.alert('消息', '成功!
40、', 'info', function() ); else $.messager.alert('消息', data.fhsm, 'error');,error : function() $.messager.alert('消息', data.fhsm, 'error'););查詢:$.ajax(url : '/TestWeb/djxx/cxxx.do?nsrsbh=+sbh,dataType : 'json', contentType:"application/json&q
41、uot;,type : 'post',async : true,success : function(data) alert("succ="+JSON.stringify(data);if (data.fhjg = 0) $.messager.alert('消息', '成功!', 'info', function() ); else $.messager.alert('消息', data.fhsm, 'error');,error : function() $.messager.
42、alert('消息', data.fhsm, 'error'););(3)對應(yīng)的NsrxxBo代碼package com.zkxx.reportforms.demo.bo;import java.io.Serializable;import java.util.List;public class NsrxxBo implements Serializablepublic String getNsrsbh() return nsrsbh;public void setNsrsbh(String nsrsbh) this.nsrsbh = nsrsbh.trim()
43、;public String getNsrmc() return nsrmc.trim();public void setNsrmc(String nsrmc) this.nsrmc = nsrmc;public String getDz() return dz;public void setDz(String dz) this.dz = dz;public String getDh() return dh;public void setDh(String dh) this.dh = dh;public String getBz() return bz;public void setBz(St
44、ring bz) this.bz = bz;public String getYwlxdm() return ywlxdm;public void setYwlxdm(String ywlxdm) this.ywlxdm = ywlxdm;public double getJe() return je;public void setJe(double je) this.je = je;public double getSe() return se;public void setSe(double se) this.se = se;String ywlxdm=""String
45、 nsrsbh=""String nsrmc=""String dz=""String dh=""String bz=""double je=0.0;double se=0.0;List<MxBo> mxlist;public List<MxBo> getMxlist() return mxlist;public void setMxlist(List<MxBo> mxlist) this.mxlist = mxlist; (4)對應(yīng)的MxBo代碼packag
46、e com.zkxx.reportforms.demo.bo;import java.io.Serializable;public class MxBo implements SerializableString nsrsbh=""String nsrmc=""double xmje=0.0;double xmse=0.0;double xmsl=0.0;public String getNsrsbh() return nsrsbh;public void setNsrsbh(String nsrsbh) this.nsrsbh = nsrsbh;pub
47、lic String getNsrmc() return nsrmc;public void setNsrmc(String nsrmc) this.nsrmc = nsrmc;public double getXmje() return xmje;public void setXmje(double xmje) this.xmje = xmje;public double getXmse() return xmse;public void setXmse(double xmse) this.xmse = xmse;public double getXmsl() return xmsl;pub
48、lic void setXmsl(double xmsl) this.xmsl = xmsl;(5)Control代碼以下代碼我們看到方法ResultMsg addNsrxx(RequestBody NsrxxBo nsrxxbo)對應(yīng)ajax的請求通過RequestBody NsrxxBo將提交的json轉(zhuǎn)成對應(yīng)的bo類,我們可以直接方便的使用bo進行操作package com.zkxx.reportforms.demo.action;import java.util.HashMap;import java.util.List;import java.util.Map;import org.
49、springframework.beans.factory.annotation.Autowired;import org.springframework.context.ApplicationContext;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframewor
50、k.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import com.zkxx.base.SpringContextUtil;import com.zkxx.base.ResultMsg;import com.zkxx.reportforms.demo.bo.MxBo;import com.zkxx.reportforms.demo.bo.NsrxxBo;import com.zkxx.reportforms.demo.service.DjnsrxxSe
51、rvice;Controllerpublic class DjNsrxxAction private DjnsrxxService djnsrxxService;public DjnsrxxService getDjnsrxxService() return this.djnsrxxService;Autowired/自動注入servicepublic void setDjnsrxxService(DjnsrxxService djnsrxxService)this.djnsrxxService=djnsrxxService;RequestMapping("djxx/nsrxx&qu
52、ot;)/對應(yīng)ajax請求的urlpublic ResponseBodyResultMsg addNsrxx(RequestBody NsrxxBo nsrxxbo) throws Exception ResultMsg ret;tryret=getDjnsrxxService().saveInfo(nsrxxbo);catch(Exception e)ret=new ResultMsg();ret.setFhjg("-1");ret.setFhsm("保存失敗");e.printStackTrace();return ret;RequestMappin
53、g("djxx/cxxx")public ResponseBodyResultMsg queryNsrxxByNsrsbh(RequestParam("nsrsbh") String nsrsbh) throws Exception System.out.println(nsrsbh);System.out.println("query");ResultMsg result=getDjnsrxxService().getInfoBysbh(nsrsbh);System.out.println(result.getRows().toSt
54、ring();return result;(6)Service接口package com.zkxx.reportforms.demo.service;import com.zkxx.base.ResultMsg;import com.zkxx.reportforms.demo.bo.NsrxxBo;public interface DjnsrxxService ResultMsg saveInfo(NsrxxBo bo) throws Exception;ResultMsg getInfoBysbh(String sbh);(7)Service接口實現(xiàn)主要對數(shù)據(jù)庫的操作不再累述package
55、com.zkxx.reportforms.demo.service.impl;import java.util.List;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;import com.zkxx.base.ResultMsg;import com.zkxx.db.DbExecuter;import com.zkxx.reportforms.demo.bo.MxBo;import com.zkxx.reportforms
56、.demo.bo.NsrxxBo;import com.zkxx.reportforms.demo.service.DjnsrxxService;ServiceTransactionalpublic class DjnsrxxServiceImpl implements DjnsrxxServicepublic ResultMsg getInfoBysbh(String sbh) / TODO Auto-generated method stubString sql="select * from dj_nsrxx where nsrsbh=?"Object arr=sbh;
57、List<NsrxxBo> list=DbExecuter.getInstance().query(sql, NsrxxBo.class, arr);for(NsrxxBo bo:list)String nsrsbh=bo.getNsrsbh();Object arrmx=nsrsbh;sql="select * from dj_nsrxx_mx where nsrsbh=?"List<MxBo> listmx=DbExecuter.getInstance().query(sql, MxBo.class, arr);bo.setMxlist(list
58、mx);ResultMsg result=new ResultMsg();result.setRows(list);return result;Transactional(rollbackFor = Exception.class)/事務(wù)回滾public ResultMsg saveInfo(NsrxxBo bo) throws Exception/ TODO Auto-generated method stubResultMsg result=new ResultMsg();int ret=DbExecuter.getInstance().addPojo2Db(bo,"dj_nsrxx"
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國功夫美術(shù)課件
- 腫瘤免疫治療藥物作用機理
- 大單元課堂活動設(shè)計
- 中國制度面對面課件
- 2025屆福建省漳州市龍文區(qū)龍文中學(xué)英語八下期中質(zhì)量檢測模擬試題含答案
- ICU患者的護理常規(guī)
- 莒縣招工作總結(jié)與計劃
- 公交機動車運行技術(shù)課件
- 義工服務(wù)技能培訓(xùn)
- 走好人生第一步廉政教育
- 供水公司合同協(xié)議樣本
- 商飛在線測評內(nèi)容題
- 2024年食品安全抽檢監(jiān)測技能大比武理論考試題庫(含答案)
- 069.糖尿病酮癥酸中毒診斷和處理
- 桿杠各類題型復(fù)習(xí)-2024-2025學(xué)年浙教版九年級上冊科學(xué)
- 四川省遂寧市(2024年-2025年小學(xué)四年級語文)人教版期末考試((上下)學(xué)期)試卷及答案
- 可持續(xù)棕櫚油圓桌倡議組織RSPO供應(yīng)鏈認(rèn)證管理手冊及程序文件
- 游戲行業(yè)的數(shù)據(jù)分析和決策支持
- DL∕T 516-2017 電力調(diào)度自動化運行管理規(guī)程
- 江蘇省鹽城市東臺市2023-2024學(xué)年八年級下學(xué)期期末英語試卷(含答案解析)
- 住院成人高血糖患者血糖監(jiān)測醫(yī)護協(xié)議處方共識
評論
0/150
提交評論