浅谈web.xml配置详解
写了一年多项目了,今天来整理一下web.xml中的一些配置
首先要了解wel.xml包含了哪里东西,简单的项目来说 就是spring的配置,springMvc(servlet)的一些配置,现在很多的项目都是ssm开发,所以servlet一般都是springMvc框架,然后就是一些listener监听器,拦截器filter,
还有一些其他的包括欢迎页面,session时间,error-page页面等
首先我们先要知道web.xml里面的一些加载顺序
1、启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点。
2、紧急着,容创建一个ServletContext(servlet上下文),这个web项目的所有部分都将共享这个上下文。
3、容器将<context-param>转换为键值对,并交给servletContext。
4、容器创建<listener>中的类实例,创建监听器。
加载顺序与它们在 web.xml 文件中的先后顺序无关。即不会因为 filter 写在 listener 的前面而会先加载 filter。最终得出的结论是:ServletContext -> listener -> filter -> servlet
首先要讲一下load-on-startup这个标签
Load-on-startup 元素在web应用启动的时候指定了servlet被加载的顺序,它的值必须是一个整数。如果它的值是一个负整数或是这个元素不存在,那么容器会在该servlet被调用的时候,加载这个servlet 。如果值是正整数或零,容器在配置的时候就加载并初始化这个servlet,容器必须保证值小的先被加载。如果值相等,容器可以自动选择先加载谁。
<listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <!-- 指定Spring Bean的配置文件所在目录。默认配置在WEB-INF目录下 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/applicationContext.xml</param-value> </context-param>
看上面代码就知道了跟标签的顺序是没有关联的
这里我们将sping放到listener标签中,让它更优先加载,因为spring其实是最后加载的是排在在servlet之后的,如果那样的话,有一些filter 是需要调用配置一些bean的,这样的话那些bean就会bean实体就变成null了
接下来就是日志
<listener> <listener-class> org.springframework.web.util.Log4jConfigListener </listener-class> </listener> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:log4j.properties</param-value> </context-param>
下面要的filter是一个重点
因为在平时的项目中乱码一直都是经常存在并且让很多人很头疼的一些问题
现在的这个编码filter就可以解决post提交的一些乱码
<filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>eccoding</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>
在springMvc请求的时候,有时候我们会用到ResquestMethod=PUT或者是DELETE等方法,但浏览器一些只识别get,post请求,所以我们配置一个filter就ok
<filter> <filter-name>HiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping> <filter-name>HiddenHttpMethodFilter</filter-name> <url-pattern>/</url-pattern> </filter-mapping>
接下俩是springMvc servlet的配置
<servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc/springmvc.xml</param-value> </init-param> <!-- 可以自定义servlet.xml配置文件的位置和名称,默认为WEB-INF目录下,名称为[<servlet-name>]-servlet.xml,如spring-servlet.xml <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-servlet.xml</param-value> 默认 </init-param> --> <load-on-startup>1</load-on-startup> </servlet>
<servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
最后加载servlet
最后就是一些Session 跟一些欢迎,或者跳转的页面
<welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <session-config> <session-timeout>30</session-timeout> </session-config>
错误页面
<error-page> 2 <error-code>404</error-code> 3 <location>/error404.jsp</location> 4 </error-page> 5 <error-page> 6 <exception-type>java.lang.Exception</exception-type> 7 <location>/exception.jsp</location> 8 </error-page>