zoukankan      html  css  js  c++  java
  • mvc-servlet---servletContext与servletConfig2

    在编写servlet过程中,需要用到 ServletConfig、ServletContext对象,对这两种对象的介绍如下:

    ServletContext对象:servlet容器在启动时会加载web应用,并为每个web应用创建唯一的servlet context对象,可以把ServletContext看成是一个Web应用的服务器端组件的共享内存,在ServletContext中可以存放共享数据。ServletContext对象是真正的一个全局对象,凡是web容器中的Servlet都可以访问。

    servletConfig对象:用于封装servlet的配置信息。从一个servlet被实例化后,对任何客户端在任何时候访问有效,但仅对servlet自身有效,一个servlet的ServletConfig对象不能被另一个servlet访问。

    在servlet中如何获取ServletContext对象和ServletConfig对象,请看下面代码:

    1. import javax.servlet.ServletConfig;  
    2. import javax.servlet.ServletException;  
    3. import javax.servlet.ServletRequest;  
    4. import javax.servlet.ServletResponse;  
    5. import javax.servlet.http.HttpServlet;  
    6.   
    7. public class Servlet1 extends HttpServlet{  
    8.   
    9.     @Override  
    10.     public void init() throws ServletException  
    11.     {  
    12.         ServletConfig config = this.getServletConfig();  
    13.         System.out.println("Servlet1 config=="+config);  
    14.         System.out.println("Servlet1 间接获取context==" +config.getServletContext() );  
    15.         System.out.println("Servlet1 直接获取context==" + this.getServletContext());  
    16.         System.out.println("Servlet1 param_value==" + config.getInitParameter("servlet1_param_name"));  
    17.         System.out.println("context_value==" + this.getServletContext().getInitParameter("context_param"));  
    18.         System.out.println("*********************************");  
    19.     }  
    20.       
    21.     @Override  
    22.     public void service(ServletRequest req, ServletResponse resp)  
    23.             throws ServletException{  
    24.           
    25.     }  
    26.       
    27.     @Override  
    28.     public void destroy() {  
    29.       
    30.     }  
    31. }  


    Servlet2的代码:

    1. import javax.servlet.ServletConfig;  
    2. import javax.servlet.ServletException;  
    3. import javax.servlet.ServletRequest;  
    4. import javax.servlet.ServletResponse;  
    5. import javax.servlet.http.HttpServlet;  
    6.   
    7. public class Servlet2 extends HttpServlet {  
    8.     @Override  
    9.     public void init() throws ServletException  
    10.     {  
    11.         ServletConfig config = this.getServletConfig();  
    12.         System.out.println("Servlet2 config=="+config);  
    13.         System.out.println("Servlet2 间接获取context==" +config.getServletContext());  
    14.         System.out.println("Servlet2 直接获取context==" + this.getServletContext());  
    15.         System.out.println("Servlet2 param_value==" + config.getInitParameter("servlet2_param_name"));  
    16.         System.out.println("context_value==" + this.getServletContext().getInitParameter("context_param"));  
    17.         System.out.println("*********************************");  
    18.     }  
    19.       
    20.     @Override  
    21.     public void service(ServletRequest req, ServletResponse resp)  
    22.             throws ServletException{  
    23.           
    24.     }  
    25.       
    26.     @Override  
    27.     public void destroy() {  
    28.       
    29.     }  
    30. }  


    web.xml文件的配置:

    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <web-app version="2.4"   
    3.     xmlns="http://java.sun.com/xml/ns/j2ee"   
    4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    5.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
    6.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
    7.   <servlet>  
    8.     <servlet-name>servlet_1</servlet-name>  
    9.     <servlet-class>com.test.servlet.Servlet1</servlet-class>  
    10.     <init-param>  
    11.        <param-name>servlet1_param_name</param-name>  
    12.        <param-value>value1</param-value>  
    13.     </init-param>  
    14.     <load-on-startup>1</load-on-startup>  
    15.   </servlet>  
    16.   <servlet>  
    17.     <servlet-name>servlet_2</servlet-name>  
    18.     <servlet-class>com.test.servlet.Servlet2</servlet-class>  
    19.     <init-param>  
    20.        <param-name>servlet2_param_name</param-name>  
    21.        <param-value>value2</param-value>  
    22.     </init-param>  
    23.     <load-on-startup>0</load-on-startup>  
    24.   </servlet>  
    25.   <context-param>  
    26.      <param-name>context_param</param-name>  
    27.      <param-value>value3</param-value>  
    28.   </context-param>  
    29.   <welcome-file-list>  
    30.     <welcome-file>index.jsp</welcome-file>  
    31.   </welcome-file-list>  
    32. </web-app>  


    部署到tomcat中,然后启动服务,在控制台打印出如下信息:


    Servlet2 config==org.apache.catalina.core.StandardWrapperFacade@13d422d
    Servlet2 间接获取context==org.apache.catalina.core.ApplicationContextFacade@1123c5f
    Servlet2 直接获取context==org.apache.catalina.core.ApplicationContextFacade@1123c5f
    Servlet2 param_value==value2
    context_value==value3
    *********************************
    Servlet1 config==org.apache.catalina.core.StandardWrapperFacade@14683c0
    Servlet1 间接获取context==org.apache.catalina.core.ApplicationContextFacade@1123c5f
    Servlet1 直接获取context==org.apache.catalina.core.ApplicationContextFacade@1123c5f
    Servlet1 param_value==value1
    context_value==value3
    *********************************

    通过控制台打印的信息可以得出如下结论:

    1、在web.xml配置文件中,对没个servlet的配置里,有一 项<load-on-startup></load-on-startup>,它的含义是:标记容器是否在启动的时候就加载这个 servlet。当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;当是一个负数时或者没有指定时,则指示容器在该servlet被 选择时才加载。正数的值越小,启动该servlet的优先级越高。

    servlet_2虽然配置在servlet_1后面,但是它的load-on-startup为0,启动的优先级高于servlet_1,所以servlet_2先启动。

    2、获取ServletContext的两种方式,直接获取和间接获取,得到的对象都是同一个。同时在servlet1和servlet2中取得的ServletContext对象都是同一个对象,说明整个web应用都只有一个唯一的ServletContext实例;

    3、servlet1与servlet2的serveletConfig对象是不一样的,说明ServletConfig对象的作用范围仅在servlet中。

  • 相关阅读:
    元素绑定与非元素绑定
    窗口之间的交互,windows和自定义的窗口集合
    e.which
    prop()和attr()
    web动画
    $.proxy()和$.makeArray()
    匿名自执行函数报错
    页面适配
    gulp
    伪元素和伪类
  • 原文地址:https://www.cnblogs.com/yang--yang/p/4469991.html
Copyright © 2011-2022 走看看