详解Spring mvc的web.xml配置说明

在说明web.xml配置之前我们先来了解一下需要配置的配置项的作用。

1、监听器(listener)

事件监听,js里应用广泛,各种事件函数的实现,Android和java se也是广泛的应用,各种点击事件的监听。当触发某个事件时,会触发监听在该事件上的所有监听器。spring 的 org.springframework.web.context.ContextLoaderListener 就是实现了 ServletContextListener 接口的监听器,该监听器会在容器(tomcat,jetty)启动的时候触发,然后就可以启动 spring 相应的配置信息。

2、过滤器(filter)

一个HTTP请求就是一次浏览器客户端与服务器的交互,在这次交互中有浏览器向服务器发送数据的过程,还有服务器接收到请求数据后处理完将处理结果返回的过程,当返回结果成功就完成了一次HTTP请求(其中的握手,路由等就不细说了)。在浏览器与服务器一来一回的过程中我们可以做一些事情,例如将请求数据编码方式统一,添加IP校验,session校验等相关servlet处理前的工作,在servlet处理后响应给浏览器客户端的过程中我们也可以进行过滤工作。spring 的org.springframework.web.filter.CharacterEncodingFilter就是一个过滤器,它在请求未到达servlet之前将请求编码转换为我们在 <param-value>UTF-8</param-value>中配置的编码方式,过滤的路径是 filter-mapping 的 url-pattern 配置的路径。

3、处理请求(servlet )

一个HTTP请求路径根据web.xml配置的拦截路径匹配后会被相应的servlet处理(在处理之前会被配置的过滤器处理),在这个servlet中能够拿到请求的数据信息,然后进行相应的处理,处理完成后再响应给浏览器。 spring 的org.springframework.web.servlet.DispatcherServlet就是一个 servlet,不过这个 servlet 是 spring 自己实现的,它处理的请求路径在 servlet-mapping 下的 url-pattern 中进行配置,配置完成后会将所有该配置拦截到的请求交给 spring 的 DispatcherServlet 进行处理,这个 spring 核心的 servlet 我将它理解为一个路由的作用,它会将拦截到的请求根据请求路径和请求方式进一步的分发下去,分发到 spring 的 @Controller 下的@RequestMapping(value={"/xxx"}, method=RequestMethod.xox )下的方法下进行处理。

详细配置如下

4、spring容器的初始化

<!-- 上下文配置文件位置 -->
<context-param>
   <param-name>contextConfigLocation</param-name>
   <!-- spring 配置文件所在位置,启动 spring 时会去该路径下查找该配置文件 -->
    <param-value>classpath*:spring/spring-config.xml</param-value>
</context-param>
<!-- spring 上下文监听器,初始化启动容器时启动 spring -->
<listener>
   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-   class>
</listener>

spring的上下文监听器配置,ContextLoaderListener实现了ServletContextListener接口,当容器加载时启动spring容器。ServletContextListenercontextInitialized方法中初始化spring容器。有几种办法可以加载spring容器,通过在web.xml的<context-param>标签中配置spring的applicationContext.xml路径,文件名可以任意取,如果没有配置,将在/WEB-INF/路径下查找默认的applicationContext.xml文件。

5、spring容器的核心servlet,拦截的请求路径

<!-- spring 核心转发器,拦截指定目录下的请求,分配到配置的拦截路径下处理 -->
<servlet>
   <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
     <param-name>contextConfigLocation</param-name>
       <param-value>/META-INF/spring-servlet.xml</param-value>
   </init-param>
   <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
   <servlet-name>dispatcher</servlet-name>
   <!-- -->
   <url-pattern>/</url-pattern>
</servlet-mapping>

spring的核心servlet配置,该servlet会将在这里配置拦截的路径转发到spring的controller拦截的路径进行处理,这个servlet相当于一个spring的路由中心,将spring拦截的请求对应的转发下去进行处理。

6、spring的编码过滤器

<!-- spring 编码过滤器 -->
<filter>
   <filter-name>characterEncodingFilter</filter-name>
   <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
   <init-param>
     <param-name>encoding</param-name>
     <param-value>UTF-8</param-value>
   </init-param>
   <init-param>
     <param-name>forceEncoding</param-name>
     <param-value>true</param-value>
   </init-param>
</filter>
<!-- 编码过滤器过滤的路径 -->
<filter-mapping>
   <filter-name>characterEncodingFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

spring的编码过滤器,将该过滤器配置的路径的数据格式统一编码

7、url-pattern配置讲解

在 servlet 和 filter 中我们都需要配置 url-pattern,但这个配置的解析规则有哪几种我们接下来就详细的说一下。

1、精确匹配:如 /xxx.html 就只会匹配 xxx.html。

2、路径匹配:如 /xxx/ 会匹配以 xxx 为前缀的 url。

3、后缀匹配:如 .html 会匹配所有以 html 为后缀的 url。

但是对于 url-pattern 的匹配来说可能会存在冲突的情况,这种情况下就需要排个优先级了,以上三者的优先级为 精确匹配 > 路径匹配 > 后缀匹配 。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Spring MVC的web.xml配置详解

    spring是目前最流行的框架.创建java web项目时,我们首先会遇到的配置文件就是web.xml,这是javaweb为我们封装的逻辑,不在今天的研究中.下面我们将简单讲讲web.xml中的配置. 一.一个空的web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns:xsi="http://www.w3.org/2001/

  • 详解Spring mvc的web.xml配置说明

    在说明web.xml配置之前我们先来了解一下需要配置的配置项的作用. 1.监听器(listener) 事件监听,js里应用广泛,各种事件函数的实现,Android和java se也是广泛的应用,各种点击事件的监听.当触发某个事件时,会触发监听在该事件上的所有监听器.spring 的 org.springframework.web.context.ContextLoaderListener 就是实现了 ServletContextListener 接口的监听器,该监听器会在容器(tomcat,je

  • 详解Spring mvc ant path的使用方法

    详解Spring mvc ant path的使用方法 概要: 任何一个WEB都需要解决URL与请求处理器之间的映射,spring MVC也是一样,但Spring MVC就像Spring所作的一切一样(灵活,可以配置各种东西,但是也造成了很多复杂性),肯定不会只有一种方法来映射URL和 Controller之间的关系,并且在实际上,允许你自己创建映射规则和实现,而不仅仅依赖URL映射. 1.Spring path match Spring MVC中的路径匹配要比标准的web.xml要灵活的多.默认

  • 详解Spring MVC如何测试Controller(使用springmvc mock测试)

    在springmvc中一般的测试用例都是测试service层,今天我来演示下如何使用springmvc mock直接测试controller层代码. 1.什么是mock测试? mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法. 2.为什么要使用mock测试? 使用Mock O bject进行测试,主要是用来模拟那些在应用中不容易构造(如HttpServletRequest必须在Servlet容器中才能构造出来)或者比较复杂的对象(如J

  • 详解spring mvc对异步请求的处理

    在spring mvc3.2及以上版本增加了对请求的异步处理,是在servlet3的基础上进行封装的. 1.修改web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001

  • 详解Spring MVC事务配置

    要了解事务配置的所有方法,请看一下<Spring事务配置的5种方法> 本文介绍两种配置方法: 一.XML,使用tx标签配置拦截器实现事务 二.Annotation方式 以下所使用环境为Spring4.0.3.Hibernate4.3.5  一. XML,使用tx标签配置拦截器实现事务 Entity类User.java,持久化类,对应数据库表user package com.lei.demo.entity; import javax.persistence.*; @Entity(name=&qu

  • 详解spring mvc(注解)上传文件的简单例子

    spring mvc(注解)上传文件的简单例子. 这有几个需要注意的地方 1.form的enctype="multipart/form-data" 这个是上传文件必须的 2.applicationContext.xml中 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/> 关于

  • 详解spring mvc中url-pattern的写法

    1.设置url-pattern为*.do(最为常见的方式) 只要你的请求url中包含配置的url-pattern,该url就可以到达DispatcherServlet.当然这里业内通常都将url-pattern配置为*.do的方式,所以你最好也这么去做. 2.设置url-pattern为/*(这种方式是很不好) 如果将url-pattern设置为/*之后,web项目中的jsp都不能访问了会报出404的错误,这是因为DispatcherServlet会将向JSP页面的跳转请求也当作是一个普通的 C

  • 详解Spring mvc DispatchServlet 实现机制

    在Spring中, ContextLoaderListener只是辅助类,在web 容器启动的时候查找并创建WebApplicationContext对象,通过该对象进行加载spring的配置文件.而真正的逻辑实现其实是在DispatcherServlet中进行的,DispatcherServlet是实现servlet接口的实现类. DispatcherServlet 在 web.xml 中的配置如下: <servlet> <servlet-name>spring</serv

  • 详解Spring MVC的异步模式(高性能的关键)

    什么是异步模式 要知道什么是异步模式,就先要知道什么是同步模式,先看最典型的同步模式: 浏览器发起请求,Web服务器开一个线程处理,处理完把处理结果返回浏览器.好像没什么好说的了,绝大多数Web服务器都如此般处理.现在想想如果处理的过程中需要调用后端的一个业务逻辑服务器,会是怎样呢? 调就调吧,上图所示,请求处理线程会在Call了之后等待Return,自身处于阻塞状态.这也是绝大多数Web服务器的做法,一般来说这样做也够了,为啥?一来"长时间处理服务"调用通常不多,二来请求数其实也不多

随机推荐