zoukankan      html  css  js  c++  java
  • web.xml

    welcome-file-list

    这个标签是用来配置首页:

    <welcome-file-list>
        <welcome-file>index1.jsp</welcome-file>
        <welcome-file>index2.jsp</welcome-file>
        <welcome-file>index3.jsp</welcome-file>
        <welcome-file>index4.jsp</welcome-file>
        <welcome-file>/target/redirectAndFoward.jsp</welcome-file>
    </welcome-file-list>
    

    当用户访问http://ip:port/project的时候,会根据配置的页面列表,从项目的根目录开始找页面。按顺序查找jsp,如果都找不到那么就是404.

    error-page

    表示当http返回指定状态码时,容器把此次请求发送到配置的指定页面:

    <error-page>
        <error-code>400</error-code>
        <location>/filter/error.jsp</location>
    </error-page>
      
    <error-page>
        <error-code>404</error-code>
        <location>/filter/error.jsp</location>
    </error-page>
      
    <error-page>
        <error-code>500</error-code>
        <location>/filter/error.jsp</location>
    </error-page>
    

    servlet

     1 <servlet>
     2     <servlet-name>startUpServlet</servlet-name>
     3     <servlet-class>com.xrq.servlet.StartUpServlet</servlet-class>
     4     <init-param>
     5         <param-name>Name</param-name>
     6         <param-value>123</param-value>
     7     </init-param>
     8     <init-param>
     9         <param-name>Age</param-name>
    10         <param-value>456</param-value>
    11     </init-param>
    12     <load-on-startup>8</load-on-startup>
    13 </servlet>

    容器启动的时候,调用其init()方法

    1.load-on-startup元素标记容器是否在启动的时候加载这个servlet(实例化并调用其init方法)

    2.必须是一个整数,值大于等于0,表示在容器启动时就加载并初始化这个servlet,如果是小于0或者没有指定时,表示这个容器在该servlet被选择时才会去加载。

    3.正数值越小,优先级越高,启动时就越先加载。值相同时,容器自己选择。

    listener

    就是监听器,是servlet的监听器。监听用户数量一般都是以session创建和失效为依据的。

    比如自定义一个session监听器

    <listener>
        <listener-class>com.xrq.listener.UserCounterListener</listener-class>
    </listener>
     1 public class UserCounterListener implements HttpSessionListener
     2 {
     3     private AtomicInteger ai = new AtomicInteger(0);
     4     
     5     public void sessionCreated(HttpSessionEvent se)
     6     {
     7         ai.incrementAndGet();
     8     }
     9     
    10     public void sessionDestroyed(HttpSessionEvent se)
    11     {
    12         ai.decrementAndGet();
    13     }
    14     
    15     public int getUserCount()
    16     {
    17         return ai.get();
    18     }
    19 }

    别的监听接口:

    1.ServletContextListener

    用于监听WEB引用启动和销毁的事件,是ServletContext的监听者,如果servletcontext变化,比如服务器启动,服务器关闭,都会被监听到,监听事件为ServletContextEvent

    2.ServletContextAttributeListener

    用于监听web应用属性改变的事件,包括添加属性,删除属性,修改属性。监听时间为ServletContextAtrributeEvent

    3.HttpSessionBindingListener

    这是唯一一个不需要在web.xml中配置的listener,实现了该接口,只要对象加入session或者移除,容器会调用以下两个方法。

    (1)void valueBound(HttpSesssionBindEvent event)

    (2)void valueUnbound(HttpSessionBindingEvent event)

    这个监听器的触发是针对实现了该监听器的类的,只有把实现了该监听器的类set进session或者从session中remove才会触发。

    4.HttpSessionAttributeListener

    监听HttpSession中的属性操作,当session里面增加一个属性时,触发attributeAdded(HttpSessionBindEvent se)方法;当在session中删除一个属性时,触发attributeRemoved(HttpSessionBindEvent se)方法;当session属性被重新设置时,触发attributeReplaced(HttpSessionBindingEvent se)方法。

    5.HttpSessionActivationListener

    监听同一个session转移到不同jvm的情形。

    6.ServletRequestListener和ServletRequestAttribute

    前者监听request创建销毁,后者监听属性增删

    context-param

    给servletContext赋值,这里面配置的键值是全局共享的,整个web项目都能取到这个上下文,比如在web.xml配置一个HTTP端口和一个HTTPS端口:

    <context-param>
        <param-name>NotSSLPort</param-name>
        <param-value>8080</param-value>
    </context-param>
    <context-param>
        <param-name>SSLPort</param-name>
        <param-value>8443</param-value>
    </context-param>
    

    servlet中的取法

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
    {
        System.out.println("NotSSLPort:" + getServletContext().getInitParameter("NotSSLPort"));
        System.out.println("SSLPort:" + getServletContext().getInitParameter("SSLPort"));
    }
    

    filter中的取法

    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException
    {
        HttpServletRequest req = (HttpServletRequest)request;
        ServletContext sc = req.getSession().getServletContext();
        System.out.println("NotSSLPort:" + sc.getInitParameter("NotSSLPort"));
        System.out.println("SSLPort:" + sc.getInitParameter("SSLPort"));
        chain.doFilter(request, response);
    }
    

     listener取法  以ServletContextListener为例子

    public void contextInitialized(ServletContextEvent sce)
    {
        System.out.println("Enter SCListener.contextInitialized");
        System.out.println("NotSSLPort:" + sce.getServletContext().getInitParameter("NotSSLPort"));
        System.out.println("SSLPort:" + sce.getServletContext().getInitParameter("SSLPort"));
    }
    

    最终的目的就是拿到servletContext,jsp里面内置对象中servletContext就是Application。

    session-config

    这个是用来配置session失效时间的,因为只有一个子标签

    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
    

     这个是以分钟为单位。在代码中也可以设置,request.getSession.setMaxInactiveInterval(30*60)这个单位是秒。

    元素加载顺序

    加载顺序和它们在web.xml中的先后顺序无关加载顺序是 context-param->listener->filter->servlet。

    web.xml加载过程

    1.启动web项目时,tomcat容器会去读它的配置文件web.xml,先读<listener></listener> 和 <context-param></context-param>

    2.创建一个servletContext,这个web项目所有部分都将共享这个上下文。

    3.把context-param转化为键值对,交给servletContext

    4.根据listener标签创建事件监听。

    如果加载filter的时候需要用到bean,但加载顺序是先filter后spring,那么spring中国初始化操作中的bean为null,所以使用下面的方式加载。

    <listener>  
            <listener-class>  
                 org.springframework.web.context.ContextLoaderListener   
            </listener-class>  
    </listener>

  • 相关阅读:
    Android中的跨进程通信方法实例及特点分析(二):ContentProvider
    智能交通焕发勃勃生机,未来会呈现哪些巨变?
    VS2008下编译boost_1_47_0
    windows下用vs2008和boost结合编译程序
    查表法计算CRC16校验值
    MFC读写配置文件
    VS2008快捷键_大全
    关于VS2008中的targetver.h文件
    VC++ 实验室仿真虚拟仪器
    OLEDB简介
  • 原文地址:https://www.cnblogs.com/tp123/p/6424076.html
Copyright © 2011-2022 走看看