spring框架(五)——springMVC模块(一)
来源:互联网 发布:匡恩网络 招聘 编辑:程序博客网 时间:2024/06/10 01:39
前面我们已经大概了解了spring的ioc和aop以及spring的事务。接下来我们应该了解spring的另一个子模块spring的springMVC模块。
springMVC是spring的web模块。那么我们就了解一下web模块。图在spring框架(一)中就有,自行查看
Web
Web上下文模块建立在应用程序上下文模块之上,为基于Web的应用程序提供了上下文,所以Spring框架支持与Jakarta Struts的集成。Web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。Web层包含了Web、Web-Servlet、Web-Struts和Web、Porlet模块
- Web模块:提供了基础的面向Web的集成特性,例如,多文件上传、使用Servlet listeners初始化IoC容器以及一个面向Web的应用上下文,它还包含了Spring远程支持中Web的相关部分
- Web-Servlet模块web.servlet.jar:该模块包含Spring的model-view-controller(MVC)实现,Spring的MVC框架使得模型范围内的代码和web forms之间能够清楚地分离开来,并与Spring框架的其他特性基础在一起
- Web-Struts模块:该模块提供了对Struts的支持,使得类在Spring应用中能够与一个典型的Struts Web层集成在一起
- Web-Porlet模块:提供了用于Portlet环境和Web-Servlet模块的MVC的实现
1 4Springmvc 架构(重点)
1.1 架构图
1.2组件分析
1、前端控制器(不需要开发,只需配置)
作用:接收前台页面的请求,并响应结果到前台页面。中间做请求转发,相当于中央处理器。
2、处理器映射器(不需要开发,只需配置)
作用:根据请求的URL查找处理器
3、处理器适配器(不需要开发,只需配置)
作用:执行符合特定规则(HandlerAdapter要求的规则)的处理器
4、处理器(后端控制器:程序员开发)
注意:编写Handler时要符合HandlerAdapter的规则,否则处理器适配器无法正确执行。
5、视图解析器(不需要开发,只需配置)
作用:进行视图解析,根据逻辑视图名解析成真正的视图。
6、视图(程序员开发)
View是一个接口,实现类支持不同的view类型(jsp、freemarker、pdf等)
1.3DispatcherServlet.properties
DispatcherServlet作为springmvc的中央调度器存在,DispatcherServlet创建时会默认从DispatcherServlet.properties中加载springmvc的各个组件,如果在springmvc.xml中配置了组件则以springmvc.xml文件中的为准,DispatcherServlet的存在降低了springmvc各个组件之间的耦合度。DispatcherServlet.properties文件所在位置(spring-webmvc jar包中):
里面内容如下图:
详细解释一下:
DispatcherServlet默认使用WebApplicationContext作为上下文,因此我们来看一下该上下文中有哪些特殊的Bean:
1、LocalResover:本地化解析,因为Spring支持国际化,因此LocalResover解析客户端的Locale信息从而方便进行国际化;
2、ThemeResovler:主题解析,通过它来实现一个页面多套风格,即常见的类似于软件皮肤效果;
3、HandlerMapping:请求到处理器的映射,如果映射成功返回一个HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象;如BeanNameUrlHandlerMapping将URL与Bean名字映射,映射成功的Bean就是此处的处理器;
4、HandlerAdapter:HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;如SimpleControllerHandlerAdapter将对实现了Controller接口的Bean进行适配,并且掉处理器的handleRequest方法进行功能处理;
5、HandlerExceptionResolver:处理器异常解析,可以将异常映射到相应的统一错误界面,从而显示用户友好的界面(而不是给用户看到具体的错误信息);
6、RequestToViewNameTranslator:当处理器没有返回逻辑视图名等相关信息时,自动将请求URL映射为逻辑视图名;
7、ViewResolver:ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;如InternalResourceViewResolver将逻辑视图名映射为jsp视图;
8、FlashMapManager:用于管理FlashMap的策略接口,FlashMap用于存储一个请求的输出,当进入另一个请求时作为该请求的输入,通常用于重定向场景,后边会细述。
上面的8个为默认配置文件的解释:
注意下面的两个spring配置的bean:
1、Controller:处理器/页面控制器,做的是MVC中的C的事情,但控制逻辑转移到前端控制器了,用于对请求进行处理;
所以:默认的配置文件中处理器映射器是3,处理器适配器是4,jsp视图解析器是7。
2 配置非注解的前端控制器、处理器映射器 、处理器适配器、视图解析器
1. 前段控制器
新建项目在web.xml中配置前段控制器
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5"><display-name>springmvc0713</display-name><!-- 配置springmvc的前端控制器 --><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- contextConfigLocation配置springmvc加载的配置文件(处理器、映射器等等) 如果不配置contextConfigLocation,默认加载的是/WEB-INF/servlet名称-servlet.xml(springmvc-servlet.xml) --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><!-- 表示servlet随服务启动,里面的值要大于等于0,越小级别越高,一般设置为1、2 --><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><!-- 此处可以多种配置方式: 第一种:*.action,以.action结尾的url进行访问时由DispatcherServlet解析 第二种:/,所有访问的URL都由DispatcherServlet解析,对于静态文件的解析需要配置不让DispatcherServlet进行解析 使用此种方式,可以实现RESTful风格的url 第三种:/*,经测试,这种配置有问题。 如果请求或者通过Controller转发jsp页面时,也会被拦截,此时找不到handler,会报错 --><url-pattern>*.do</url-pattern></servlet-mapping></web-app>contextConfigLocation配置springmvc加载配置文件(配置处理器映射器、适配器等)
注意:如果不在spring-servlet.xml中配置处理器映射器、处理器适配器默认加载org.springframework.web.servlet.DispatcherServlet.properties
如果不配置contextConfigLocation,默认加载的是/WEB-INF/servlet名称-servlet.xml(springmvc-servlet.xml)也就是名称必须叫springmvc-servlet.xml
2.非注解处理器映射器
其中处理器映射器包括默认的配置非注解形式包括下列俩种
org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping
org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
3、非注解处理器适配器
其中非注解处理器适配器包括
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter
org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter // //通过修改response 相应json格式数据
4.视图解析器
以上的配置均在springmvc的配置文件中:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <!-- 【配置映射处理器】 --> <!-- SpringMVC自带的映射处理器均实现了Spring的Ordered接口,这意味着我们可以在应用系统中声明多个处理器映射 --> <!-- 并且可以设置它们的优先级,这主要体现在order属性上,其值越小,则对应的该映射处理器的优先级越高 --> <!-- 本例中,SimpleUrlHandlerMapping的order值比BeanNameUrlHandlerMapping的小 --> <!-- 这意味着DispatcherServlet在映射URL的时候,首先会咨询SimpleUrlHandlerMapping --> <!-- 只有在SimpleUrlHandlerMapping无法返回结果时,才咨询BeanNameUrlHandlerMapping --> <bean id="beanNameUrlMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"> <property name="order" value="1"/> </bean> <bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="order" value="0"/> <property name="mappings"> <props> <prop key="/userlist22.htm">userController</prop> <prop key="/userlist33.htm">userController</prop> </props> </property> </bean> <!-- 这里的id="userController"对应的是<bean id="simpleUrlMapping">中的<prop>里面的value --> <bean id="userController" class="com.hyjc.controller.UserController"/> <!-- DispatcherServlet使用的默认处理器映射是BeanNameUrlHandlerMapping,它使用URL样式的名字 --> <bean name="/userlist11.htm" class="com.hyjc.controller.UserController"/> <!--【处理器适配器】--><bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" /> <!-- 【配置视图解析器】 --> <!-- InternalResourceViewResolver会在ModelAndView返回的视图名前加上prefix指定的前缀,再在最后加上suffix指定的后缀 --> <!-- 由于UserController返回的ModelAndView中的视图名是userlist,故该视图解析器将在/WEB-INF/jsp/userlist.jsp处查找视图 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean> </beans>
3.注解形式-处理器映射器和处理器适配器
因为前段控制器和视图解析器不分为注解和非注解:所以这里前段控制器和视图解析器还是同前面的非注解配置。注解映射器和适配器介绍
org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping 是在spring3.1之前使用的注解映射器。
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping是在spring3.1之后使用的注解映射器。
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter 是在spring3.1之前使用的注解适配器。
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter是在spring3.1之后使用的注解配置器。
注意:
1、注解方式的映射器和适配器在3.1版本前后是不一样的,主讲3.1之后。
2、注解方式的处理器映射器和处理器适配器必须配对使用,不能与非注解的处理器映射器和适配器混用。
注解方式处理器映射器,对标记为@controller类中标记@ResquestMapping的方法进行映射,根据ResquestMapping定义的url匹配ResquestMapping标记的方法,匹配成功返回HandlerMethod对象给前端控制器,HandlerMethod对象中封装url对应的方法Method。
3.1 在springmvc的文件中通过bean标签配置
<!-- 注解方式的处理器映射器和处理器适配器必须配对使用,不能与非注解的处理器映射器和适配器混用 --><!-- 配置注解方式的处理器映射器 --><bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" /><!-- 配置注解方式的处理器适配器 --><bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />
3.2 在springmvc中的文件通过<mvc:annotation-driven>配置
使用mvc:annotation-driven的话,上面的3.1方式注解方式的处理器映射器配置就可以不要了。<!-- 使用mvc:annotation-driven代替上面的注解方式的处理器适配器和映射器的配置 --><!-- 默认加载很多参数绑定组件,比如json转换组件 --><!-- 实际开发时使用mvc:annotation-driven --><mvc:annotation-driven />总结:sprigmvc的配置学习和总结就总结到这,这里还有自定义的处理器适配器和开发Handler(在springmvc中handler的开发方式有很多,主要讲解三种:实现HttpRequestHandler接口、实现Controller接口、使用注解方式)在后期使用的时候在做补充和详细介绍。
- spring框架(五)——springMVC模块(一)
- spring-mvc入门(一)——springmvc框架
- 搭建Spring SpringMVC Mybatis 框架(一)
- spring+springMVC框架搭建(一)
- 使用spring、springmvc和hibernate开发博客(一)——搭建框架
- SpringMVC框架(一)
- 深入浅出Spring(五) SpringMVC
- SSH(一)---Spring框架概述和SpringMVC原理
- Maven+Spring+SpringMVC+MyBatis框架的搭建(一)
- SSM(Spring+SpringMVC+MyBatis)框架学习心路历程【一】
- 利用Maven搭建Spring+SpringMVC+Mybatis框架项目(一)
- springmvc、jpa(hibernate)、mybatis组合框架搭建(一)——springmvc框架搭建
- springMVC框架整合--(Spring+SpringMVC+hibernate)
- SSM框架——整合(Spring、SpringMVC、MyBatis)
- SSM框架——(Spring+SpringMVC+MyBatis)
- SSM框架—详细整合教程(Spring+SpringMVC+MyBatis)
- SSM框架—详细整合教程(Spring+SpringMVC+MyBatis)
- SSM框架—详细整合教程(Spring+SpringMVC+MyBatis)
- c语言下的约瑟夫环
- android+项目中常见的错误1
- 【BZOJ5020】【THUWC2017】在美妙的数学王国中畅游 LCT 泰勒展开
- 【bzoj1217】[HNOI2003]消防局的设立 贪心
- 分布式锁的解决好办法,此文属转载,请支持作者。
- spring框架(五)——springMVC模块(一)
- 【实战】Docker Machine + Compose + Swarm
- MFC控件数据交换:DDX
- Java线程(八):锁对象Lock-同步问题更完美的处理方式
- JAVA基础知识点
- ACTIVEMQ介绍
- c#数据类型导图
- layer--在开发之中的简单应用
- mysql题目