springmvc---web.xml的配置文件

来源:互联网 发布:app软件操作说明书 编辑:程序博客网 时间:2024/05/03 06:55
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">    <display-name>springmvc-projects</display-name>    <context-param>        <param-name>contextConfigLocation</param-name>        <param-value>            classpath*:applicationContext.xml        </param-value>    </context-param>        <!--Spring ApplicationContext 载入 -->    <listener>        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>    </listener>        <!-- Support for HiddentHttpMethod -->    <filter>        <filter-name>hiddenHttpMethodFilter</filter-name>        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>    </filter>    <filter-mapping>        <filter-name>hiddenHttpMethodFilter</filter-name>        <servlet-name>springServlet</servlet-name>    </filter-mapping> <!-- Spring MVC Servlet -->    <servlet>        <servlet-name>springServlet</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        <init-param>            <param-name>contextConfigLocation</param-name>            <param-value>                /WEB-INF/spring-mvc.xml            </param-value>        </init-param>        <load-on-startup>1</load-on-startup>    </servlet>    <servlet-mapping>        <servlet-name>springServlet</servlet-name>        <url-pattern>/</url-pattern>    </servlet-mapping></web-app>

web.xml加载的优先顺序为:listner----->filter----->servlet。

context-param,它用于向 ServletContext 提供键值对,即应用程序上下文信息。

所以真正的加载顺序应该是:context-param -> listener -> filter -> servlet

重点来看看springmvc相关的配置

  <servlet>        <servlet-name>springServlet</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        <init-param>            <param-name>contextConfigLocation</param-name>            <param-value>                /WEB-INF/spring-mvc.xml            </param-value>        </init-param>        <load-on-startup>1</load-on-startup>    </servlet>    <servlet-mapping>        <servlet-name>springServlet</servlet-name>        <url-pattern>/</url-pattern>    </servlet-mapping>
这里的servlet的这里没有init-param,那么加载的时候会默认去加载[servlet-name]-servlet.xml.就是说如果我这里没有init-param告诉你我的配置文件的地址,那么系统加载的时候会自动找到springServlet-servlet.xml的配置文件,当作springmvc容器初始化的配置文件。

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

这个参数实际含义是:

1)load-on-startup元素标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法)。

2)它的值必须是一个整数,表示servlet应该被载入的顺序

2)当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;

3)当值小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载。

4)正数的值越小,该servlet的优先级越高,应用启动时就越先加载。

5)当值相同时,容器就会自己选择顺序来加载。

所以,<load-on-startup>x</load-on-startup>,中x的取值1,2,3,4,5代表的是优先级,而非启动延迟时间。

再来看看关于路径映射的配置:

 <servlet-mapping>        <servlet-name>springServlet</servlet-name>        <url-pattern>/</url-pattern>    </servlet-mapping>
注意这里的url拦截是(/)而不是(/*),就是拦截所有的请求,包括静态文件(比如:js,css,jpg等)。其中(/*)配置是错误的,你的请求能够映射到对应的controller上,但是返回的如果是*.jsp的话,同样被拦截了,一直会访问不到资源的。

那么(/)会拦截静态文件请求,如何处理呢?

1)第一种方式就是nginx做跳转。

2)第二种就是激活Tomcat的defaultServlet来处理静态文件