SSM框架01--springmvc
springmvc的原理
springmvc的结构组成
一个中心
前端控制器 DispatcherServlet 负责请求的转发和响应的提交
三大组件
处理器映射器 HandlerMapping 负责根据url查找Handler
处理器适配器 HandlerAdapter 负责执行Handler
视图解析器 View resolver 负责解析view
经典MVC结构原理
以SSH框架为例
springmvc框架原理
springmvc的执行流程
1. 用户发起请求,请求到DispatcherServlet前端控制器
DispatcherServlet(中央调度),负责request和response,调用处理器映射器查找Handler,调用处理器适配器执行Handler,有了前端控制器降低了各各组件之间的耦合性,系统扩展性提高。
2. DispatcherServlet前端控制器请求处理器映射器HandlerMapping查找Handler
根据用户请求的url,根据一定的规则去查找(比如:xml配置,注解)
3. HandlerMapping处理器映射器将Handler返回给前端控制器
4. DispatcherServlet前端控制器调用HandlerAdapter处理器适配器
5. HandlerAdapter处理器适配器执行Handler
6. Handler执行完成,返回ModelAndView
ModelAndView是springmvc的封装对象,将model和view封装在一起。
7. HandlerAdapter处理器适配器将ModelAndView返回给前端控制器
8. 前端控制器调用视图解析器,进行视图解析,解析完成给前端控制器返回View
View是springmvc的封装对象,是一个接口,实现类包括jspview,pdfview……
9. 前端控制器调用view进行视图渲染,将模型数据填充到view(将model数据填充到request)响应给用户
10、前端控制器响应给用户
springmvc开发应用
配置式的springmvc开发
1. 在web.xml文件中配置springmvc前端控制器
contextConfigLocation指定 springmvc的全局配置文件 如果 contextConfigLocation不指定,默认找配置文件名称:servlet的name+"-servlet.xml"
1. 在springmvc.xml文件中配置三大组件
配置处理器映射器
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
配置处理器适配器
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
配置视图解析器
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
2. 编写Handler
由于使用SimpleControllerHandlerAdapter适配器,要求编写的Handler实现Controller接口。
3. 编写jsp页面
4. 配置Handler
由于使用处理器映射器BeanNameUrlHandlerMapping,要求在spring的容器配置Handler,Handler的name就是url。
<bean id="hello_controller"name="/helloworld.action" class="cn.itcast.springmvc.Hello"/>
配置式开发的注意事项
1. Handler的编写和配置要和映射器,适配器对应
处理器映射器和处理器适配器有多个,Handler的配置和编写根据处理器映射器和处理器适配器进行
2. 逻辑视图名
调用:modelAndView.setViewName指定逻辑视图名,如果这里指定jsp的完整路径也支持
在springmvc.xml中修改视图解析器
修改action
注解式的spingmvc开发
1. 在web.xml文件中配置springmvc前端控制器
2. 配置注解式springmvc三大组件
<!--注解映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<!--注解适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
3. 编写Handler
// 修改学生信息页面
// @RequestMapping指定url
@RequestMapping("/editstudent")
public String editstudent(Model model) throws Exception {
// 将学生信息的显示在页面
// 使用静态数据
Student student = new Student();
student.setName("张三");
student.setAge(32);
student.setBirthday(new Date());
// 需要将学生信息传到页面
model.addAttribute("student", student);
// 返回逻辑视图名
return "student/editstudent";
}
// 学生信息修改提交
@RequestMapping("/editstudentsubmit")
public String editstudentsubmit(Student student)throws Exception{
System.out.println(student);
return "success";
}
一个url对应action的一个方法
4. 使用注解方式将action类配置到spring容器中
1. 在spring文件中配置
2. 给acton类添加注解
Struts2与springmvc的不同
1. springmvc的入口是servlet,struts是filter
2. springmvc是基于方法开发,struts是基于类开发
action类中,一个url对应一个方法,对Handler对象,springmvc框架将一个方法封装到Handler中(只有一个method)。
Struts对action类进行实例化。
Springmvc中的action可以使用单例也可以使用多例,建议使用单例(对相同的方法只new一个)。
Struts不能用单例,因为struts传递参数是通过成员变量。
Springmvc通过形参接收参数好处:更符合软件开发的思想,和service接口类似。
3. Struts采用值栈存储请求和响应的数据,通过OGNL存取数据, springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。
Springmvc的参数解析过程
1. 页面请求数据:key/value
2. 参数解析器:
Spring提供了很多参数解析器,将key/value的数据解析成形参,通过反射解析method中的参数(类型、名称),按照类型和名称规则解析形参
3. 属性编辑器:
将key/value转换成pojo中的属性
4. Action方法的形参
Springmvc开发常用注解
1. @controller
标识该类为控制器类,@controller、@service、@repository分别对应了web应用三层架构的组件即控制器、服务接口、数据访问接口
2. @RequestMapping
进行url映射,一个方法对应一个url,定义方法:在action方法上定义requestMapping
开发中经常使用根路径+子路径的方法管理url
例:
定义根路径:
在类名上边定义requestMapping
@RequestMapping("/stu")
定义子路径:
在方法上边定义requestMapping
@RequestMapping("/querystudent")
最终访问路径:根路径+子路径:/stu/ querystudent.action