05-配置web.xml

配置项目的部署描述符web.xml

Tomcat启动时,会扫描项目的web.xml文件

里面一般写有三大部件:

  • Listener
  • Filter
  • Servlet
  1. Listener一般为:ContextLoaderListener,这是Spring框架自带的监听器,作用是加载spring的配置文件

一般为:

<!-- 加载配置文件,是下面的ContextLoaderListener所必需的参数 -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring-persist-*.xml</param-value>
</context-param>
<!-- 配置spring核心监听器,默认会以 /WEB-INF/applicationContext.xml作为配置文件 -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
  1. Filter常用的为CharacterEncodingFilter,作用是字符集过滤,防止中文乱码

    <!-- 配置过滤器 -->
    <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>forceRequestEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
        <!-- 强制响应设置字符集 -->
        <init-param>
            <param-name>forceResponseEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    

    这里配置三个init-param,不是随便配置的。

    当我们点进CharacterEncodingFilter的源码中,可以看到以下内容:

    public class CharacterEncodingFilter extends OncePerRequestFilter {
        private String encoding;
        private boolean forceRequestEncoding;
        private boolean forceResponseEncoding;
        ......
        ......
    

    可以看到这个CharacterEncodingFilter有三个属性,所以我们需要设置init-param

  2. Servlet一般为DispatcherServlet,请求分发器,作用是拦截请求。

        <!-- 配置servlet -->
        <servlet>
            <servlet-name>dispatcherServlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!-- Servlet默认生命周期中,创建对象是在第一次接收到请求时 -->
            <!-- 而DispatcherServlet创建对象后有大量的初始化操作,不适合在第一次请求时来做 -->
            <!-- 设置load-on-startup是为了让DispatcherServlet在web应用启动时创建对象、初始化 -->
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>dispatcherServlet</servlet-name>
            <!-- DispatcherServlet 映射的 URL 地址 -->
            <!-- 大白话:什么样的访问地址会交给 SpringMVC 来处理 -->
            <!-- 配置方式一:符合 RESTFUL 风格使用“/” -->
            <!-- <url-pattern>/</url-pattern> -->
            <!-- 配置方式二:请求扩展名 -->
            <url-pattern>*.html</url-pattern>
            <url-pattern>*.json</url-pattern>
        </servlet-mapping>
    
金麟岂是池中物,一遇风云便化龙!
原文地址:https://www.cnblogs.com/ABKing/p/12493584.html