后端: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参数

posted @ 2017-04-10 20:08  桃源仙居  阅读(221)  评论(0)    收藏  举报