一、引言
springMVC是Spring中的一个子框架。
spring是轻量级的项目管理的框架,对开发中的组件(action/service/dao/事件)进行统一管理。
springMVC是典型的MVC框架,和struts2类型,提供了新的控制器Controller 对 替换原控制器。
功能、地位和struts2都等同。
springMVC控制器的主要功能:
1. 收参
2. 调用业务类的方法,实现“”功能
3. 跳转
好处:轻量级、和spring的整合方便。
二、环境搭建
三、第一个程序
四、@RequestMapping注解
有两种用法:
1. 修饰类
作用:相当于struts2的namespace.
语法:@RequestMapping("/first")
2. 修饰方法
作用:相当于struts2中的actionanme,代表该 方法的访问路径
语法:@RequestMapping("/bank")
定义在类和方法上以后,的访问路径:http://ip:port/web应用名/namespace/方法的访问路径
注意:该注解 至少 要在方法上使用。
五、使用ServletAPI收参
六、跳转方式
七、SpringMVC的收参
问题:还能象struts2中一样 使用成员变量收参? 不能。原因:springmvc的控制器是单例的!
解决方案:使用 Controller类 方法的参数列表 进行收参。原因:方法的参数 相当于局部变量。
具体的使用形式:1.零散形式 2.对象形式 3.数组形式 4.集合形式
-
零散形式
查1个,删除,修改-查
-
对象形式
添加,修改-存
-
数组形式
使用场景:常用于收集复选框的值。
-
集合形式
使用场景:常用于收集复选框的值。
八、中文乱码
struts2中 对于post方式请求中的UTF-8进行了自动乱码的解决。
springMVC对post方式的中文乱码,也提供了解决方案,使用CharacterEncodingFilter(在web.xml进行配置即可)。
<!--中文乱码问题-->
<filter>
<filter-name>ch</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>ch</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
九、日期格式
spring和springMVC中的日期默认格式 2011/1/2。
修改输入时的日期格式,在Controller收参时 需要在对应的参数前(实体的日期属性上) 增加注解@DateTimeFormat(pattern=“yyyy-MM-dd”)
在这里插入图片描述
十、传递数据
struts2的action使用成员变量(request作用域) 传递数据。
springMVC中传递数据,有3种方式(适用 请求转发 传递数据):
- ServletAPI request.setAttribute(“str”, obj);
- Model接口 model.addAttribute(“str”, obj); 往request作用域中存值
- ModelMap抽象类 modelMap.addAttribute(“str”, obj); 往request作用域中存值
重定向传递数递,使用HttpSession作用域。
十一、SSM整合
注意:spring springMVC,各自管理自己的组件,不要重复管理组件。
spring 管理service/dao/事务/… 注解包扫描 com.baizhi.service
springMVC 只管理Controller com.baizhi.controller
11.1 环境搭建
-
导jar
spring相关 9个, springMVC相关 1个, mybatis相关(core/驱动/log4j) 3个, 连接池 1个
mybatis_spring整合jar 1个 , javaEE相关 3个
-
配置文件 (3个)
web.xml (4项)
spring.xml位置
springMVC的post方式中文乱码
spring的web工厂
springMVC的前端控制器
springMVC.xml (4项)
注解包扫描 com.baizhi.controller
请求处理器
视图解析器
静态资源可访问
spring.xml (7项)
注解包扫描 com.baizhi.service
引小配置文件
数据源
SqlSessionFactory
DAO
事务管理器
事务注解生效
11.2 父子容器污染的解决
注意:spring springMVC,各自管理自己的组件,不要重复管理组件。否则会带来父子容器的污染。
解决方案:
十一、静态资源访问的解决
在springmvc.xml中,增加标签 mvc:default-servlet-handler