整合思路
准备环境:导入jar包(spring mybatis dbcp连接池 mysql驱动包 log4j)
工程结构:
---------------------------
1. 整合dao
mybatis和spring进行整合
applicationContext-dao.xml
配置:
1.数据源
2.SqlSessionFactory
3.mapper扫描器
创建po以及mapper(通过逆向工程,这里不再演示)
针对综合查询mapper,一般情况会有关联查询,建议自定义mapper
ItemsMapperCustom.xml
ItemsMapperCustom.java
---------------------------
整合service
让spring管理service接口
在spring容器配置service(applicationContext-service.xml)
创建applicationContext-service.xml,文件中配置service
事务控制(applicationContext-transaction.xml)
在applicationContext-transaction.xml中使用spring声明式事务控制方法。
------------------------------------------------------
整合springmvc
创建springmvc.xml文件,配置处理器映射器、适配器、视图解析器。
web.xml中配置前端控制器
编写Controller(就是Handler)
加载spring容器
将mapper、service、controller加载到spring容器中
部署项目,启动服务器:访问:
·········································································
其他特性:
-----------------------------
controller方法的返回值
返回ModelAndView
需要方法结束时,定义ModelAndView,将model和view分别进行设置。
返回string
如果controller方法返回string,
1、返回逻辑视图名。
真正视图(jsp路径)=前缀+逻辑视图名+后缀
2、redirect重定向
商品修改提交后,重定向到商品查询列表。
redirect重定向特点:浏览器地址栏中的url会变化。修改提交的request数据无法传到重定向的地址。因为重定向后重新进行request(request无法共享)
3、forward页面转发
通过forward进行页面转发,浏览器地址栏url不变,request可以共享。
返回void
在controller方法形参上可以定义request和response,使用request或response指定响应结果:
1、使用request转向页面,如下:
request.getRequestDispatcher("页面路径").forward(request, response);
2、也可以通过response页面重定向:
response.sendRedirect("url")
3、也可以通过response指定响应结果,例如响应json数据如下:
response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
response.getWriter().write("json串");
------------------------------
spring参数绑定过程
从客户端请求key/value数据,经过参数绑定,将key/value数据绑定到controller方法的形参上。
springmvc中,接收页面提交的数据是通过方法形参来接收。而不是在controller类定义成员变更接收!!!!
默认支持的类型
直接在controller方法形参上定义下边类型的对象,就可以使用这些对象。在参数绑定过程中,如果遇到下边类型直接进行绑定。
---------------------------------------------------------
自定义日期类型绑定类:
需要向处理器适配器中注入自定义的参数绑定组件。
----------------------------------------------------------
springmvc和struts2的区别
1、springmvc基于方法开发的,struts2基于类开发的。
springmvc将url和controller方法映射。映射成功后springmvc生成一个Handler对象,对象中只包括了一个method。
方法执行结束,形参数据销毁。
2、springmvc可以进行单例开发,并且建议使用单例开发,struts2通过类的成员变量接收参数(存在数据域属性 非线程安全),无法使用单例,只能使用多例。
3、经过实际测试,struts2速度慢,在于使用struts标签,如果使用struts建议使用jstl。