




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、手把手使用springmvc本文主要通过实例介绍怎么从新建工程通过配置,一步一步实现使用spirngmvc建立工程,实现基本的增删查改数据库等功能。一、新建工程1.打开myeclipse新建Web Project点击next输入工程名TestWeb这里自己命名点击finish完成。新建工程出现在右侧工程区域,这里jre最好是5.0以上,本例中使用的是6.0二、工程配置1.相关jar包下载相关spring的包以及其他依赖jar包,拷贝到web-inf/lib下Spring相关的jar包,本例使用3.0.6版本,数据库使用mysql其他工具和依赖包2.配置applicationContext.xm
2、l文件文件内容如下:数据库使用mysql,如果使用其他数据库可更换驱动driverClassName以及url的值,本例连接的地址为本机,端口为3306,库名为reports。其中DbExecuter使用jdbcTemplate操作数据库,DbExecuter可改为自己的数据库处理类,本例未使用Mybatis。切面示例使用aopLog,为com.zkxx.reportforms.demo.action包下的所有类方法,若有不同可更换切入点表达式pointcut="execution,切入方式为环绕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"><!- 数据源配置 -><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> <!- 声明使用注解式事务 -> <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文件,文件内容如下:其中springmvc拦截.do的请求,这里可以根据自己的需求修改。<?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防止内存泄露 -><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文件内容如下:利用拦截器处理用户管理session是否存在,其中list的值不在拦截的范围。文件上传的大小可以调节。<?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异常时,自动跳转到/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.拦截器实现代码如下:对应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如果为空,跳转到相关处理页面。 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日志的实现代码如下:对应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();/获取目标方法体参数 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("结束 around日志"); return object; 3.数据库操作的实现代码如下:对应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.一个简单的保存查询在上面的基本准备工作完成后,我们来写一个简单的保存查询功能目录结构如下(1)Src类页面(2)页面元素说明,两张表,一张主表,一张明细表对应的bo分别为NsrxxBo和MxBo页面端组织数据成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进行解析填充对应的bo类,返回也为相应的json格式数据。保存: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)对应的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)对应的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)对应ajax的请求通过RequestBody NsrxxBo将提交的json转成对应的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;)/对应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接口实现主要对数据库的操作不再累述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)/事务回滚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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农业生产技术指导合作协议
- 汽车零部件出口合同风险分析与防范
- 房屋租赁期限续约协议
- 合同管理风险评估与审批流程表
- 工程技术负责人聘用合同
- 农业生态园开发与经营合作协议
- 信息技术在农业合作社管理中的应用协议
- 人力资源管理基础模板员工培训计划及考核表
- 六年级叙事作文过年包饺子500字12篇范文
- 出口贸易跨境电商平台合作协议
- 2025苏教版三年级上册数学教学计划 (三篇)
- 2025-2026学年苏教版(2024)小学数学一年级上册教学计划及进度表
- 员工培训课件心脑血管
- 胚胎发育不良性神经上皮肿瘤
- 《焊接结构生产》课件-第二单元 焊接应力与变形
- 智能行政管理课件
- 大学生心理健康十六讲(第3版) 课件全套 第1讲 心理健康知多少-大学生心理健康导论-第16讲 珍爱生命-危机干预与幸福人生
- 学生电动车管理暂行办法
- DB62∕T 4727-2023 建筑消防设施维护保养技术规程
- 2025年高考政治(安徽卷)真题评析
- 学校二次供水培训
评论
0/150
提交评论