配置项目的部署描述符web.xml
Tomcat启动时,会扫描项目的web.xml文件
里面一般写有三大部件:
- Listener
- Filter
- Servlet
- 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>
-
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
-
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>