`

SpringMVC工作原理

    博客分类:
  • Java
阅读更多

SpringMVC框架介绍

 

  • Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。

 

spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还是 Struts 这样的 Web 框架。通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术、Velocity、Tiles、iText 和 POI。Spring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术。

        Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

 

  •  Spring的MVC框架主要由DispatcherServlet、处理器映射、处理器(控制器)、视图解析器、视图组成。

 

 

SpringMVC原理图

 

 

SpringMVC接口解释

 

  • DispatcherServlet接口:

 

Spring提供的前端控制器,所有的请求都有经过它来统一分发。在DispatcherServlet将请求分发给Spring Controller之前,需要借助于Spring提供的HandlerMapping定位到具体的Controller。

 

  • HandlerMapping接口:

 

能够完成客户请求到Controller映射。

 

  • Controller接口:

 

需要为并发用户处理上述请求,因此实现Controller接口时,必须保证线程安全并且可重用。

Controller将处理用户请求,这和Struts Action扮演的角色是一致的。一旦Controller处理完用户请求,则返回ModelAndView对象给DispatcherServlet前端控制器,ModelAndView中包含了模型(Model)和视图(View)。

从宏观角度考虑,DispatcherServlet是整个Web应用的控制器;从微观考虑,Controller是单个Http请求处理过程中的控制器,而ModelAndView是Http请求过程中返回的模型(Model)和视图(View)。

 

  • ViewResolver接口:

 

 

Spring提供的视图解析器(ViewResolver)在Web应用中查找View对象,从而将相应结果渲染给客户。

 

SpringMVC运行原理

 

  1. 客户端请求提交到DispatcherServlet
  2. 由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller
  3. DispatcherServlet将请求提交到Controller
  4. Controller调用业务逻辑处理后,返回ModelAndView
  5. DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图
  6. 视图负责将结果显示到客户端

 

 

  • DispatcherServlet是整个Spring MVC的核心。它负责接收HTTP请求组织协调Spring MVC的各个组成部分。其主要工作有以下三项:

 

 

    1. 截获符合特定格式的URL请求。
    2. 初始化DispatcherServlet上下文对应的WebApplicationContext,并将其与业务层、持久化层的WebApplicationContext建立关联。
    3. 初始化Spring MVC的各个组成组件,并装配到DispatcherServlet中。

 

2.如何解决POST请求中文乱码问题,GET的又如何处理呢?

web.xml中加入:

 

  1. <filter>
  2.     <filter-name>CharacterEncodingFilter</filter-name>
  3.     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  4.     <init-param>
  5.         <param-name>encoding</param-name>
  6.         <param-value>utf-8</param-value>
  7.     </init-param>
  8. </filter>
  9. <filter-mapping>
  10.     <filter-name>CharacterEncodingFilter</filter-name>
  11.     <url-pattern>/*</url-pattern>
  12. </filter-mapping>
以上可以解决post请求乱码问题。对于get请求中文参数出现乱码解决方法有两个:

修改tomcat配置文件添加编码与工程编码一致,如下:

 

  1. <ConnectorURIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

 

 另外一种方法对参数进行重新编码:

 

  1. String userName = new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")

 

ISO8859-1tomcat默认编码,需要将tomcat编码后的内容按utf-8编码

3.SpringMVC与Struts2的主要区别?

springmvc的入口是一个servlet即前端控制器,而struts2入口是一个filter过虑器。
springmvc基于方法开发,传递参数是通过方法形参,可以设计为单例或多例(建议单例)struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。 
Struts采用值栈存储请求和响应的数据,通过OGNL存取数据, springmvc通过参数解析器是将request对象内容进行解析成方法形参,将响应数据和页面封装成ModelAndView对象,最后又将模型数据通过request对象传输到页面。 Jsp视图解析器默认使用jstl
 

SpringMVC 和Struts2的区别 
1. 机制:

spring mvc的入口是servlet,而struts2是filter,这样就导致了二者的机制不同。   

2. 性能:

spring会稍微比struts快。spring mvc是基于方法的设计,而sturts是基于类,每次发一次请求都会实例一个action,每个action都会被注入属性,而spring基于方法,粒度更细,但要小心把握像在servlet控制数据一样。spring3 mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在spring3 mvc中,一个方法对应一个request上下文。而struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入;struts2实际上是通 setter getter方法与request打交道的;struts2中,一个Action对象对应一个request上下文。   

3. 参数传递:

struts是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的。   


4. 设计思想上:

struts更加符合oop(面向对象编程)的编程思想, spring就比较谨慎,在servlet上扩展。

   
5. intercepter的实现机制:

struts有自己的interceptor机制,spring mvc用的是独立的AOP方式。这样导致struts的配置文件量还是比spring mvc大,虽然struts的配置能继承,所以我觉得论使用上来讲,spring mvc使用更加简洁,开发效率Spring MVC确实比struts2高。spring mvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上spring3 mvc就容易实现restful url。struts2是类级别的拦截,一个类对应一个request上下文;实现restful url要费劲,因为struts2 action的一个方法可以对应一个url;而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。spring3 mvc的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架方法之间不共享变量,而struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码,读程序时带来麻烦。 

  
6. 另外,spring3 mvc的验证也是一个亮点,支持JSR303,处理ajax的请求更是方便,只需一个注解@ResponseBody ,然后直接返回响应文本即可。

 

 

 

 
 
分享到:
评论

相关推荐

    springmvc工作原理

    SpringMVC 工作原理 SpringMVC 是一种基于 Java 的 Web 应用程序框架,它提供了一种 Model-View-Controller(MVC)架构的实现方式。SpringMVC 的工作原理可以分为以下几个步骤: 1. 用户发送请求:用户通过浏览器...

    mybatis.hibernate,springmvc工作原理以及流程总结文档.pdf

    mybatis.hibernate,springmvc工作原理以及流程总结文档

    SpringMVC工作原理11

    SpringMVC的工作原理是基于一系列组件的协作,这些组件包括DispatcherServlet、HandlerMapping、Controller、ModelAndView和ViewResolver。 首先,客户端发起HTTP请求,这个请求会到达DispatcherServlet,这是...

    SpringMVC工作原理1

    在SpringMVC的工作流程中,各个组件协同工作,使得Web应用程序能够高效地处理用户请求并呈现响应结果。 1. 用户发送请求至前端控制器DispatcherServlet。这是SpringMVC流程的起点,用户发起HTTP请求到达服务器,...

    SpringMVC工作原理.docx

    其工作原理如下: 1. **用户请求**:当用户通过浏览器或其他HTTP客户端发送请求到服务器时,请求首先到达前端控制器`DispatcherServlet`。 2. **DispatcherServlet**:前端控制器是SpringMVC的核心组件,它接收...

    SpringMVC工作原理实例详解

    SpringMVC 工作原理实例详解 SpringMVC 是 Spring Framework 中的一部分,当我们需要使用 Spring 框架创建 web 应用程序时,就需要引入 SpringWebMVC。SpringMVC 工作原理实例详解中,通过示例代码介绍了非常详细,...

    SpringMVC工作原理及介绍

    SpringMVC是一个开源的Java框架,它是Spring项目的一部分,用于简化Web应用程序的开发。SpringMVC通过采用MVC(Model-View-Controller)设计模式,将Web层进行分层管理,以此来达到前后端代码分离的目的。在...

    手写简易版SpringMVC,探索SpringMVC原理

    这是一项很好的练习,能够加深对SpringMVC工作原理的认识,并提高我们的编程能力。 在实际开发中,SpringMVC提供了许多开箱即用的功能,如注解驱动的控制器、数据绑定、类型转换、本地化和主题支持等。这些功能极大...

    SpringMVC框架原理.mp4

    SpringMVC框架原理.mp4

    SpringMVC+MyBatis源码

    刚想搭建一个新的网站,然后就搭建了一个SpringMVC+MyBatis的框架 IDE:MyEclipse 2015 JDK:1.8 Jar包里面都有了,可以直接跑通,自己也做一个记录,下次就可以直接用了。

    springmvc学习第一天

    入门程序是理解SpringMVC工作原理的重要途径,主要目的是熟悉SpringMVC的基本流程及其各个组件的作用。 - **非注解的处理器映射器和处理器适配器**:这是SpringMVC早期版本中使用的方法,主要用于没有使用注解的...

    SpringMVC入门案例源码

    SpringMVC是Spring框架的一部分,专门用于处理Web应用程序的...同时,通过查看项目结构和配置文件,可以加深对SpringMVC工作原理的理解。对于Eclipse和MyEclipse的用户来说,导入源码后可以直接运行,方便调试和学习。

    SpringMVC框架原理、

    SpringMVC框架原理图

    springmvc完整案例

    总的来说,这个案例为初学者提供了一个了解SpringMVC工作原理的起点。通过这个案例,你可以学习到如何配置SpringMVC,编写控制器,以及如何将数据和视图结合在一起,从而创建一个基本的Web应用。进一步学习和实践,...

    Mybatis-SpringMVC在线考试系统源码

    SpringMVC工作原理** SpringMVC通过DispatcherServlet接收HTTP请求,然后根据请求信息(如URL、参数)找到对应的Handler(控制器)。控制器执行业务逻辑后,可能会返回一个ModelAndView对象,包含了视图名和模型...

    SpringMVC面试专题及答案.pdf

    SpringMVC 工作原理: 1. **接收请求**:客户端发送请求到 DispatcherServlet(前端控制器)。 2. **处理请求**:DispatcherServlet 查询 HandlerMapping(处理器映射器),找到处理请求的 Controller。 3. **执行...

    java springMvc经典面试题

    本资源总结了 Java SpringMvc 经典面试题,涵盖了 SpringMvc 的工作原理、为什么要用 Spring、SSH 整合、Spring 的事务管理等知识点。 一、SpringMvc 工作原理 SpringMvc 的工作原理可以分为六个步骤: 1. ...

    《基于注解的SpringMVC增删改DEMO源码》Maven版

    该项目提供了完整的源代码,使得学习者能够通过实际操作来加深对SpringMVC工作原理的理解。 在SpringMVC中,注解是实现控制器、请求映射、模型绑定、视图解析等关键功能的主要手段。例如,`@Controller`注解标记一...

Global site tag (gtag.js) - Google Analytics