1 springmvc的框架原理
1.1 b/s系统mvc原理
mvc是什么?mvc是设计模式。
1.2 springmvc是什么?
Mvc的框架,是spring框架的一个模块。
1.3 springmvc框架原理
1、 用户发起请求,请求到DispatcherServlet前端控制器
DispatcherServlet(中央调度),负责request和response,负责调用处理器映射器查找Handler,负责调用处理器适配器执行Handler,有了前端控制器降低了各各组件之间的耦合性,系统扩展性提高。
2、 DispatcherServlet前端控制器请求处理器映射器HandlerMapping查找Handler
根据用户请求的url,根据一定的规则去查找(比如:xml配置,注解)
3、 HandlerMapping处理器映射器将Handler返回给前端控制器
4、 DispatcherServlet前端控制器调用HandlerAdapter处理器适配器执行Handler
程序员编写的Handler是按照适配器要求的规则去执行Handler
5、 HandlerAdapter处理器适配器执行Handler
适配器按照一定规则去执行Handler
6、 Handler执行完成,返回ModelAndView
ModelAndView是springmvc的封装对象,将model和view封装在一起。
7、 HandlerAdapter处理器适配器将ModelAndView返回给前端 控制器
8、 前端控制器调用视图解析器,进行视图解析,解析完成给前端控制器返回View
View是springmvc的封装对象,是一个接口,实现类包括jspview,pdfview。。。。
9、 前端控制器调用view进行视图渲染
将模型数据填充到view(将model数据填充到request)响应给用户
10、前端控制器响应给用户。
小结:
一个中心:(不需要开发)
DispatcherServlet前端控制器
三个组件:(不需要开发)
处理器映射器
处理器适配器
视图解析器
Handler:(需要开发)
处理器,理解成action
View:
需要开发页面:jsp
2 Springmvc第一个程序
2.1 统一开发环境
使用eclipse-3.7-indigo 32位
Jdk:1.7.72版本(32位)
Tomcat:apache-tomcat-7.0.53
参考 :Eclipse开发环境配置-indigo.docx
2.2 第一程序开发
2.2.1 创建一个web 工程
2.2.2 加入 springmvc的jar包
Spring的版本:3.1.4
2.2.3 配置前端控制器
在web.xml中配置servlet。
指定 contextConfigLocation让前端控制器找到springmvc的全局配置文件。
2.2.4 配置三大组件
在springmvc.xml中配置:
处理器映射器:
BeanNameUrlHandlerMapping
处理器适配器:
视图解析器:
2.2.5 编写Handler
由于使用SimpleControllerHandlerAdapter适配器,要求编写的Handler实现Controller接口。
需求:向页面显示一行信息“helloworld”
2.2.6 编写jsp
2.2.7 配置Handler
由于使用处理器映射器BeanNameUrlHandlerMapping,要求在spring的容器配置Handler,Handler的name就是url。
在springmvc.xml中配置:
2.2.8 部署tomcat,启动
以debug方式运行。
访问路径:http://localhost:8080/springmvc1215_1/helloworld.action
2.3 逻辑视图名
调用:modelAndView.setViewName指定逻辑视图名,如果这里指定jsp的完整路径也支持。
在springmvc.xml中修改视图解析器:
修改action:
3 强化三大组件学习
3.1 处理器映射器
作用:根据url找到Handler.
BeanNameUrlHandlerMapping:根据url匹配bean的name 处理器映射器实现了HandlerMapping接口
SimpleUrlHandlerMapping:将url进行集中配置。
<!-- 简单url映射 -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/hello1.action">hello_controller</prop>
<prop key="/hello2.action">hello_controller</prop>
</props>
</property>
</bean>
hello_controller是action这个bean的id。
总结:
多个处理器映射器可以共存
3.2 处理器适配器
作用:按照一定规则去执行Handler
SimpleControllerHandlerAdapter:规则是Handler要实现Controller接口
HttpRequestHandlerAdapter:规则是Handler要实现HttpRequestHandler接口。
总结:
多个适配器可以共存!
4 命令表单控制器
编写action,继承AbstractCommandController。
运行方式类似struts的modelDriven。
将页面提交的参数封装在一个pojo对象(命令对象)中。
4.1 需求
学生信息修改、提交功能。
进入学生信息修改页面,输入信息,提交,将学生的信息提交到action中。
将页面的参数封装到一个pojo对象(命令对象)中。
4.2 开发
编写两个action类:
修改学生信息页面
修改学生信息提交
注意:
//设置命令对象
this.setCommandClass(Student.class);
4.3 问题处理
4.3.1 Post乱码
在web.xml中加入:
<filter>
<filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
对get乱码处理:
对于get请求中文参数出现乱码解决方法有两个:
修改tomcat配置文件添加编码与工程编码一致,如下:
<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
另外一种方法对参数进行重新编码:
String userName new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")
ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码
4.3.2 日期型转换
//注册一个属性编辑器
@Override
protected void initBinder(HttpServletRequest request,
ServletRequestDataBinder binder) throws Exception {
//将student类中的birthday属性进行日期转换,类型和birthday一致
binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));
}
4.3.3 小结
使用命令表单控制器也可以开发增、删、改、查。
使用命令表单控制器一定要指定命令对象,但是只能指定一个命令对象。
5 上午课程小结
开发springmvc程序:
第一步:配置前端控制器
在web.xml配置DispathcherServlet前端控制器
第二步:配置springmvc的全局配置文件
配置三大组件:
处理器映射器:
根据url查找 Handler
处理器适配器:
执行Handler
视图解析器:
解析出视图View,根据逻辑视图名解析出真正的视图。
第三步:按照处理器适配器规则开发Handler(action)
第四步:将Handler配置在spring容器中。
第五步:编写视图(jsp+jstl)