后端:web.xml详解
WEB工程加载web.xml过程
![]()
加载过程顺序如下:
启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取和两个结点。 容创建一个ServletContext(servlet上下文),这个web项目的所有部分都将共享这个上下文。 容器将转换为键值对,并交给servletContext。 容器创建中的类实例,创建监听器。
web.xml文件元素详解
1、schema:模式文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
</web-app>
2、icon:web应用图标
<icon>
<small-icon>/images/app_small.gif
<large-icon>/images/app_large.gif
</icon>
3、display-name:提供GUI工具可能会用来标记这个特定的Web应用的一个名称
<display-name>webAppName</display-name>
4、disciption:Web应用描述
<disciption>This is a webApp</disciption>
5、context-param
<context-param>
<param-name>spring.profiles.default</para-name>
<param-value>production</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring-*.xml</param-value>
</context-param>
6、filter
<filter>
<filter-name>Encoding</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
7、listener
<listener>
<listener-class>
com.cloud.oss.infra.listener.CloudServletStartListener
</listener-class>
</listener>
8、servlet
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
9、session-config
<session-config>
<session-timeout>120</session-timeout>
</session-config>
10、welcome-file-list
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
</welcome-file-list>
11、error-page
<!-- 1、通过错误码来配置error-page。当系统发生×××错误时,跳转到错误处理页面。 -->
<error-page>
<error-code>404</error-code>
<location>/NotFound.jsp</location>
</error-page>
<!-- 2、通过异常的类型配置error-page。当系统发生java.lang.NullException(即空指针异常)时,跳转到错误处理页面。 -->
<error-page>
<exception-type>java.lang.NullException</exception-type>
<location>/error.jsp</location>
</error-page>
Java代码:Listener
<listener>为web应用程序定义监听器,监听器用来监听各种事件,比如:application和session事件,所有的监听器按照相同的方式定义,功能取决去它们各自实现的接口
1、ServletContextListener
<listener>
<listener-class>
com.cloud.oss.infra.listener.CloudServletStartListener
</listener-class>
</listener>
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* @author makex
* @note 用于监听Web应用的启动和关闭
* @create 2017-04-10
*/
public class CloudServletStartListener implements ServletContextListener {
/**
* 在Web应用启动时调用,然后容器再对filter初始化,并且对那些在Web 应用启动时就需要被初始化的Servlet 进行初始化
*
* @param sce
*/
public void contextInitialized(ServletContextEvent sce) {
System.out.println("start");
// 获取 ServletContext 对象
ServletContext ctx = sce.getServletContext();
//获取web.xml文件配置的params
System.out.println(ctx.getInitParameter("spring.profiles.default"));
//application范围内的attrbute变化
ctx.setAttribute("key", "value1");
ctx.setAttribute("key", "value2");
ctx.removeAttribute("key");
}
/**
* 在web应用关闭时调用,在调用该方法之前,容器会先销毁所有的Servlet 和Filter 过滤器
*
* @param sce
*/
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("stop");
}
}
2、ServletContextAttributeListener
<listener>
<listener-class>
com.cloud.oss.infra.listener.CloudServletAttributeListener
</listener-class>
</listener>
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
/**
* @author makex
* @note 用于监听ServletContext范围(application)内属性的改变
* @create 2017-04-10
*/
public class CloudServletAttributeListener implements ServletContextAttributeListener {
/**
* 监听添加attribute
* @param sce
*/
public void attributeAdded(ServletContextAttributeEvent sce) {
System.out.println("添加attribute");
}
/**
* 监听移除attribute
* @param sce
*/
public void attributeRemoved(ServletContextAttributeEvent sce) {
System.out.println("移除attribute");
}
/**
* 监听更新attribute
* @param sce
*/
public void attributeReplaced(ServletContextAttributeEvent sce) {
System.out.println("更新attribute");
}
}
3、ServletRequestListener
<listener>
<listener-class>
com.cloud.oss.infra.listener.CloudServletRequestListener
</listener-class>
</listener>
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
/**
* @author makex
* @note 用于监听用户的请求
* @create 2017-04-10
*/
public class CloudServletRequestListener implements ServletRequestListener {
/**
* 用户请求断开时调用
* @param sre
*/
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("用户请求断开");
}
/**
* 用户进行http请求时调用
* @param sre
*/
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("用户请求初始化");
}
}
4、ServletRequestAttributeListener
<listener>
<listener-class>
com.cloud.oss.infra.listener.CloudServletAttributeListener
</listener-class>
</listener>
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
/**
* @author makex
* @note 用于监听ServletContext范围(application)内属性的改变
* @create 2017-04-10
*/
public class CloudServletAttributeListener implements ServletContextAttributeListener {
/**
* 监听添加attribute
* @param sce
*/
public void attributeAdded(ServletContextAttributeEvent sce) {
System.out.println("添加attribute");
}
/**
* 监听移除attribute
* @param sce
*/
public void attributeRemoved(ServletContextAttributeEvent sce) {
System.out.println("移除attribute");
}
/**
* 监听更新attribute
* @param sce
*/
public void attributeReplaced(ServletContextAttributeEvent sce) {
System.out.println("更新attribute");
}
}
5、HttpSessionListener
<listener>
<listener-class>
com.cloud.oss.infra.listener.CloudServletAttributeListener
</listener-class>
</listener>
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
* @author makex
* @note 用于监听用户session的开始和结束,可用来统计用户在线时间
* @create 2017-04-10
*/
public class CloudHttpSessionListener implements HttpSessionListener {
/**
* 监听用户创建session
*
* @param hse
*/
public void sessionCreated(HttpSessionEvent hse) {
}
/**
* 监听用户移除session
*
* @param hse
*/
public void sessionDestroyed(HttpSessionEvent hse) {
}
}
6、HttpSessionAttributeListener
<listener>
<listener-class>
com.cloud.oss.infra.listener.CloudHttpSessionAttributeListener
</listener-class>
</listener>
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
/**
* @author makex
* @note 用于监听HttpSession范围(session)内属性的改变
* @create 2017-04-10
*/
public class CloudHttpSessionAttributeListener implements HttpSessionAttributeListener {
/**
*session中添加属性
* @param hse
*/
public void attributeAdded(HttpSessionBindingEvent hse) {
}
/**
*session中移除属性
* @param hse
*/
public void attributeRemoved(HttpSessionBindingEvent hse) {
}
/**
*session中改变属性
* @param hse
*/
public void attributeReplaced(HttpSessionBindingEvent hse) {
}
}
Java代码:Filter
Java代码:获取全局param参数
http://www.cnblogs.com/makexu/

浙公网安备 33010602011771号