文档章节

SpringMVC配置XML

大秧歌说
 大秧歌说
发布于 2015/12/10 15:03
字数 2038
阅读 36
收藏 1

下载地址 核心架构的具体流程步骤如下:

1、 首先用户发送请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;

2、 DispatcherServlet——>HandlerMapping, HandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象,通过这种策略模式,很容易添加新的映射策略;

3、 DispatcherServlet——>HandlerAdapter,HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;

4、 HandlerAdapter——>处理器功能处理方法的调用,HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理;并返回一个ModelAndView对象(包含模型数据、逻辑视图名);

5、 ModelAndView的逻辑视图名——> ViewResolver, ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;

6、 View——>渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术;

7、返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。

 

 

1、 前端控制器DispatcherServlet;

2、 HandlerMapping

3、 HandlerAdapter

4、 ViewResolver

5、 处理器/页面控制器

6、 视图

 

 

配置DispatcherServlet

DispatcherServlet是SpringMVC的核心,将下面Servlet的注册信息登记在web.中。
初始化 DispatcherServlet 时,该框架在 web 应用程序WEB-INF 目录中寻找一个名为[-名称]-servlet.xml的文件,并在那里定义相关的Beans,重写在全局中定义的任何Beans,像上面的web.xml中的代码,对应的是dispatcher-servlet.;当然也可以使用<init-param>元素,手动指定配置文件的路径; :表示启动容器时初始化该Servlet; :表示哪些请求交给Spring Web MVC处理, “/” 是用来定义默认映射的。也可以如“*.html”表示拦截所有以html为扩展名的请求。

 

 

 

  1. <servlet>        

  2.     <servlet-name>Dispatcher</servlet-name>        

  3.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  

  4.     <init-param>  

  5.         <description>加载/WEB-INF/spring-mvc/目录下的所有XML作为Spring MVC的配置文件</description>  

  6.         <param-name>contextConfigLocation</param-name>  

  7.         <param-value>/WEB-INF/spring-mvc/*.xml</param-value>  

  8.     </init-param>        

  9.     <load-on-startup>1</load-on-startup>        

  10. </servlet>        

  11. <servlet-mapping>        

  12.     <servlet-name>Dispatcher</servlet-name>        

  13.     <url-pattern>"/"/"*.do"/"*.html"</url-pattern>        

  14. </servlet-mapping>   

 

[servlet-名称]-servlet.xml 配置:

 

<?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:mvc="http://www.springframework.org/schema/mvc"       xmlns:p="http://www.springframework.org/schema/p"       xmlns:context="http://www.springframework.org/schema/context"       xmlns:aop="http://www.springframework.org/schema/aop"       xmlns:tx="http://www.springframework.org/schema/tx"       xsi:schemaLocation="http://www.springframework.org/schema/beans            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd            http://www.springframework.org/schema/context            http://www.springframework.org/schema/context/spring-context-3.0.xsd            http://www.springframework.org/schema/aop            http://www.springframework.org/schema/aop/spring-aop-3.0.xsd            http://www.springframework.org/schema/tx            http://www.springframework.org/schema/tx/spring-tx-3.0.xsd            http://www.springframework.org/schema/mvc            http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd            http://www.springframework.org/schema/context            http://www.springframework.org/schema/context/spring-context-3.0.xsd">    <!--        使Spring支持自动检测组件,如注解的Controller        <context:component-scan base-package="com.minx.crm.web.controller"/> <context:annotation-config />     
       <!-- 把标记了@Controller注解的类转换为bean -->       
      <context:component-scan base-package="test.controller" />   
    <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->       
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />    

    -->    <bean  id="viewResolver"          class="org.springframework.web.servlet.view.InternalResourceViewResolver"          p:prefix="/WEB-INF/jsp/"          p:suffix=".jsp"/></beans>


InternalResourceViewResolver在ModelAndView返回的视图名前加上prefix属性配置的前缀,再在最后加上suffix属性配置的后缀。由于HelloController返回的ModelAndView中视图名为welcome,所以InternalResourceViewResolver将在/WEB-INF/jsp/welcome.jsp处查找视图。


 

1、BeanNameUrlHandlerMapping

这是Dispatcher Servlet的默认的HandlerMapping,所以在应用上下文配置文件中简单地用“Url样式”来定义一个控制器Bean的名字,就可以告诉Dispatcher Servlet什么样式的请求应该由哪个控制器去处理,而不用显式地定义一个HandlerMapping。(私下说一句,这样做虽然简单,但这样用URL样式定义出来的ControllerBean,其名字显得古怪,因为这个名字同时也是Controller Bean的实例名)

例:若控制器ListCoursesController的URL样式是“listCourses.go”,则

       <bean name="/listCourses.go"

class="com.w3cs.vlar.ListCoursesController">

        <property name="couseService">

             <ref bean="courceService"/>

        </property>

    </bean>

当然,也可以在定义这个控制器Bean之前,显式地声明你所用的HandlerMapping,显式定义如下:

<bean id="beanNameUrlMapping"

class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">

 

2、SimpleUrlHandlerMapping

这种方式不同于BeanNameUrlHandlerMapping,SimpleUrlHandlerMapping不需定义Controller Bean的名字,而是直接把URL映射到控制器。

由于SimpleUrlHandlerMapping不是Dispatcher Servlet默认的HandlerMapping,所以这个HandlerMapping必须得显式定义。

下面定义了一个ID为“SimpleUrl”的HandlerMapping Bean:

<bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

<property name="mappings">

<props>

    <prop key="/listCourses.go">listCoursesController</prop>

    <prop key="/login.go">loginController</prop>

</props>

</property>

</bean>

3.默认HandlerMapping 

默认执行Class名称  如:这里有一个CoursesController  那么/courses 就会调用这个Controller     多方法的为/courses/方法名 

 

配置一个视图解析器将控制器与JSP结合起来。

将解析器的配置片段加到上面的test-servlet.xml中。

<bean id="viewResolver"

    class="org.springframework.web.servlet.view.InternalResourceViewResolver">

       <property name="prefix" value="/WEB-INF/jsp/" />

       <property name="suffix" value=".jsp" />

</bean>

InternalResourceViewResolver在ModelAndView返回的视图名前加上prefix属性配置的前缀,再在最后加上suffix属性配置的后缀。由于HelloController返回的ModelAndView中视图名为welcome,所以InternalResourceViewResolver将在/WEB-INF/jsp/welcome.jsp处查找视图。



(1) url和动作(后端控制器)的映射。

springMVC里有个映射处理器(HandlerMapping)的概念。它实际上是一个处理器映射Bean,用来将一个控制器指定到一个URL上。Spring提供了三种有用的HandlerMapping的实现:

—— BeanNameUrlHandlerMapping

       根据控制器的名字将控制器映射到URL

—— SimpleUrlHandlerMapping

       用上下文配置文件中定义的属性集合将控制器映射到URL

—— CommonsPathMapHandlerMapping

       使用控制器代码中的元数据将控制器映射到URL  

(2) 逻辑视图名和视图对象的映射。

springMVC里还有个视图解析器(ViewResolver)的概念。它决定了ModelAndView对象的逻辑视图名如何解析成一个用于将结果渲染给用户的视图Bean..Spring有四种ViewResolver实现:

—— InternalResourceViewResolver

       将逻辑视图名解析成一个用模板文件(如JSP和Velocity模板)渲染的视图对象

—— BeanNameViewResolver

       将逻辑视图名解析成一个DispatcherServlet应用上下文中的视图Bean

—— ResourceBundleViewResolver

       将逻辑视图名解析成一个ResourceBundler中的视图对象

—— XmlViewResolver

       从一个XML文件中解析视图Bean,这个文件是从DispatcherServlet应用上下文中分离出来的。

 

 

Annotation注释

 

 

@Controller:用于标识是处理器类;

@RequestMapping:请求到处理器功能方法的映射规则;

@RequestParam:请求参数到处理器功能处理方法的方法参数上的绑定;

@ModelAttribute:请求参数到命令对象的绑定;

@SessionAttributes:用于声明session级别存储的属性,放置在处理器类上,通常列出模型属性(如@ModelAttribute)对应的名称,则这些属性会透明的保存到session中;

@InitBinder:自定义数据绑定注册支持,用于将请求参数转换到命令对象属性的对应类型;

 

RESTful架构风格支持(通过@PathVariable注解和一些其他特性支持),且又引入了更多的注解支持:

@CookieValue:cookie数据到处理器功能处理方法的方法参数上的绑定;

@RequestHeader:请求头(header)数据到处理器功能处理方法的方法参数上的绑定;

@RequestBody:请求的body体的绑定(通过HttpMessageConverter进行类型转换);

@ResponseBody:处理器功能处理方法的返回值作为响应体(通过HttpMessageConverter进行类型转换);

@ResponseStatus:定义处理器功能处理方法/异常处理器返回的状态码和原因;

@ExceptionHandler:注解式声明异常处理器;

@PathVariable:请求URI中的模板变量部分到处理器功能处理方法的方法参数上的绑定,从而支持RESTful架构风格的URI;

 

POST中文乱码解决方案

 

spring Web MVC框架提供了org.springframework.web.filter.CharacterEncodingFilter用于解决POST方式造成的中文乱码问题,具体配置如下:

  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>   

以后我们项目及所有页面的编码均为UTF-8。

© 著作权归作者所有

大秧歌说
粉丝 0
博文 3
码字总数 13166
作品 0
郑州
私信 提问
spring 4 升级踩雷指南

前言 最近,一直在为公司老项目做核心库升级工作。本来只是想升级一下 JDK8 ,却因为兼容性问题而不得不升级一些其他的库,而其他库本身依赖的一些库可能也要同步升级。这是一系列连锁问题,...

静默虚空
2017/12/15
0
0
web.xml中classpath:和classpath*:

web.xml中classpath:和classpath*: 有什么区别? classpath:只会到你的class路径中查找找文件; classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找. 存放位置: 1:src下面...

leesama
2014/02/11
66
0
spring boot框架学习4-spring boot核心(3)

本节主要: 1:spring boot 为我们提供的 starter pom 都有哪些 2:怎么添加xml配置文件 3:日志相关 本文是《凯哥陪你学系列-框架学习之spring boot框架学习》中第四篇 spring boot框架学习...

中凯_凯哥java
2017/10/31
243
0
《Spring Security3》第二章第二部分翻译

三步之内使我们的应用变得安全 尽管Spring Security的配置可能会很难,但是它的作者是相当为我们着想的,因为他们为我们提供了一种简单的机制来使用它很多的功能并可以此作为起点。以这个为起...

小样
2012/03/07
137
0
告诉你,Spring Boot 真是个牛逼货!

现在 Spring Boot 非常火,各种技术文章,各种付费教程,多如牛毛,可能还有些不知道 Spring Boot 的,那它到底是什么呢?有什么用?今天给大家详细介绍一下。 Spring Boot 的背景 了解 Spri...

技术小能手
2018/10/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Blockstack-2 :Blockstack ID注册

本篇文章主要记录Blockstack ID注册的流程; 在介绍注册流程之前,先简单的介绍一下Blockstack ID; 相对于传统互联网来说,Blockstack ID更像是统一的账号系统;即一个账号即可登录和授权所...

Riverzhou
33分钟前
7
0
面试官问:平时碰到系统CPU飙高和频繁GC,你会怎么排查?

处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及Full GC次数过多的问题。当然,这些问题的最终导致的直观现象就是系统运行缓慢,并且有大量的报警。本文主要针对系统运...

Java高级架构师n
58分钟前
21
0
面向对象编程

1、类和对象 类是对象的蓝图和模板,而对象是实例;即对象是具体的实例,类是一个抽象的模板 当我们把一大堆拥有共同特征的对象的静态特征(属性)和动态特征(行为)都抽取出来后,就可以定...

huijue
今天
21
0
redis异常解决 :idea启动本地redis出现 jedis.exceptions.JedisDataException: NOAUTH Authentication required

第一次安装在本地redis服务,试试跑项目,结果却出现nested exception is redis.clients.jedis.exceptions.JedisDataException: NOAUTH Authentication required错误,真是让人头疼 先检查一...

青慕
今天
35
0
Spring 之 IoC 源码分析 (基于注解方式)

一、 IoC 理论 IoC 全称为 Inversion of Control,翻译为 “控制反转”,它还有一个别名为 DI(Dependency Injection),即依赖注入。 二、IoC方式 Spring为IoC提供了2种方式,一种是基于xml...

星爵22
今天
34
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部