SSM框架01--springmvc

来源:互联网 发布:python 幂律分布 编辑:程序博客网 时间:2024/06/05 05:40

springmvc的原理

springmvc的结构组成

一个中心

             前端控制器 DispatcherServlet 负责请求的转发和响应的提交

三大组件

             处理器映射器 HandlerMapping 负责根据url查找Handler

             处理器适配器 HandlerAdapter 负责执行Handler

             视图解析器   View resolver    负责解析view

经典MVC结构原理

SSH框架为例

springmvc框架原理

springmvc的执行流程

1.     用户发起请求,请求到DispatcherServlet前端控制器

DispatcherServlet(中央调度),负责requestresponse,调用处理器映射器查找Handler,调用处理器适配器执行Handler,有了前端控制器降低了各各组件之间的耦合性,系统扩展性提高。

2.     DispatcherServlet前端控制器请求处理器映射器HandlerMapping查找Handler

根据用户请求的url,根据一定的规则去查找(比如:xml配置,注解)

3.     HandlerMapping处理器映射器将Handler返回给前端控制器

4.     DispatcherServlet前端控制器调用HandlerAdapter处理器适配器

5.     HandlerAdapter处理器适配器执行Handler

6.     Handler执行完成,返回ModelAndView

ModelAndViewspringmvc的封装对象,将modelview封装在一起。

7.     HandlerAdapter处理器适配器将ModelAndView返回给前端控制器

8.     前端控制器调用视图解析器,进行视图解析,解析完成给前端控制器返回View

Viewspringmvc的封装对象,是一个接口,实现类包括jspviewpdfview……

9.     前端控制器调用view进行视图渲染,将模型数据填充到view(将model数据填充到request)响应给用户

10、前端控制器响应给用户

springmvc开发应用

配置式的springmvc开发

1.     web.xml文件中配置springmvc前端控制器

contextConfigLocation指定 springmvc的全局配置文件 如果 contextConfigLocation不指定,默认找配置文件名称:servletname+"-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的容器配置HandlerHandlername就是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类添加注解

Struts2springmvc的不同

1.       springmvc的入口是servletstrutsfilter

2.       springmvc是基于方法开发,struts是基于类开发

action类中,一个url对应一个方法,对Handler对象,springmvc框架将一个方法封装到Handler中(只有一个method)。

Strutsaction类进行实例化。

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