小谈-—ServletConfig对象和servletContext对象

一、servletContext概述

  servletContext对象是Servlet三大域对象之一,每个Web应用程序都拥有一个ServletContext对象,该对象是Web应用程序的全局对象或者上下文。Tomcat服务器在启动时,会自动创建一个ServletContext对象,在关闭时,会自动销毁这个ServletContext对象。每个Web应用程序只拥有一个ServletContext对象,ServletContext对象可以在整个Web应用中共享数据资源。

  1. 生命周期很长
  2. 每个web应用都有一个唯一的servletContext对象.
  3. 在每个应用加载的时候,服务器就会创建servletContext对象。
  4. ServletContext对象是一个域对象(领域)
  5. 获得servletContext的方式

在自定义Servlet中有以下几种方式获取到ServletContext对象:

  • 通过ServletConfig对象的this.getServletContext()方法获取。
  • 采用request.getSession().getServletContext()方法获取。
  • 通过继承GenericServlet类或HttpServlet类,调用GenericServlet类或HttpServlet类的getServletContext()方法获取。
 1 import java.io.IOException;
 2
 3 import javax.servlet.ServletConfig;
 4 import javax.servlet.ServletContext;
 5 import javax.servlet.ServletException;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 //演示获取servletContext对象
10 /**
11  * 有三种方式获取servletContext对象
12  *             1. 采用servletConfig对象获取
13  *             2. 采用servlet实例对象获取
14  *             3. 采用request对象获取
15  * @author Administrator
16  *
17  */
18 public class ServletContext1 extends HttpServlet {
19
20     ServletContext sc ;
21
22     @Override
23     public void init(ServletConfig config) throws ServletException {
24         super.init(config) ;
25         sc = config.getServletContext() ;//1.
26     }
27
28     public void doGet(HttpServletRequest request, HttpServletResponse response)
29             throws ServletException, IOException {
30         //第二种方式
31         ServletContext sc1 = this.getServletContext() ;
32         System.out.println(sc);
33         System.out.println(sc1 == sc);
34         //第三种方式
35         ServletContext sc2 = request.getSession().getServletContext() ;
36         System.out.println(sc2 == sc);
37     }
38
39     public void doPost(HttpServletRequest request, HttpServletResponse response)
40             throws ServletException, IOException {
41         doGet(request, response);
42     }
43 }

应用

1) 实现数据共享

2) 获取全局配置参数

3) 请求转发

a) 拿取请求转发器,然后转发

4) 获取资源文件

5) 用来获得文件的MIME的类型.

案例

下面我将通过例子说明:登录成功后,5秒后跳转到某个页面,在页面中显示您是第x次登录成功

  • 创建一个VisitServlet用来获取访问次数,并存储在ServletContext对象中。
 1 public class VisitServlet extends HttpServlet {
 2     @Override
 3     public void init() throws ServletException {
 4         ServletContext context = getServletContext();
 5         context.setAttribute("times", 0);
 6     }
 7     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 8         ServletContext context = getServletContext();
 9
10         int times = (Integer)context.getAttribute("times");
11         times ++;
12         context.setAttribute("times", times);

response.setHeader("Refresh", "5;url=/test/showTimeServlet");

13     }
14     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
15         doGet(request, response);
16     }
17 }
  • 创建一个ShowTimeServlet用来显示访问次数。
 1 public class ShowTimeServlet extends HttpServlet {
 2     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 3         ServletContext context = getServletContext();
 4        //获取访问的次数
 5         int times = (Integer)context.getAttribute("times");
 6
 7         response.setContentType("text/html;charset=utf-8");
 8         PrintWriter out = response.getWriter();
 9         out.println("<h1>VisitServlet共被访问了"+times+"次</h1>");
10     }
11     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
12         doGet(request, response);
13     }
14 }
获得Servlet的web.xml配置信息
1 <context-param>
2         <param-name>username</param-name>
3         <param-value>苍老师</param-value>
4 </context-param>
5 <context-param>
6       <param-name>password</param-name>
7       <param-value>123</param-value>
8 </context-param>

获取web.xml配置信息中



import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 获取web应用的初始化信息
 */
public class ServletContextDemo extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            //获得ServletContext域对象
        ServletContext context = this.getServletContext();
            //获得单个数据(username)
              String name = context.getInitParameter("username") ;
//        System.out.println(name);
             //获得所有数据
        Enumeration enumeration = context.getInitParameterNames();
        while(enumeration.hasMoreElements()){
            String name = (String)                     enumeration.nextElement();
            String value = context.getInitParameter(name);
            System.out.println(name+":"+value);
        }
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

二、servletConfig概述

  在javax.servlet包中,定义了ServletConfig接口。Servlet容器使用ServletConfig对象在Servlet初始化时向其传递配置信息。

所谓的Serlvet配置信息,就是在Web应用程序中web.xml文件中配置有关Servlet的内容。

<servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>ServletConfigTest</servlet-name>
    <servlet-class>app.java.servlet.FirstServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>FirstServlet</servlet-name>
    <url-pattern>/servlet/ServletConfigTest</url-pattern>
  </servlet-mapping>
    <init-param>
    <param-name>name</param-name>
    <param-value>yl</param-value>
    </init-param>
    <init-param>
    <param-name>blog</param-name>
    <param-value>http://www.longestory.com</param-value>
    </init-param>
  • getServletName()方法:获取web.xml文件中配置的Servlet名称。
public void service(ServletRequest req, ServletResponse res)throws ServletException, IOException {
    ServletConfig servletConfig = this.getServletConfig();

    String servletName = servletConfig.getServletName();
    System.out.println(servletName);
}

运行Web应用程序,在控制台中打印“ConfigServletTest”。

  • getInitParameter(String name)方法:返回指定名称的初始化参数的值,如果参数不存在则返回null值。


public void service(ServletRequest req, ServletResponse res)
            throws ServletException, IOException {
    ServletConfig servletConfig = getServletConfig();

    String name = servletConfig.getInitParameter("name");
    String blog = servletConfig.getInitParameter("blog");
    System.out.println(name + "‘s blog is " + blog);
}

运行Web应用程序,在控制台中打印“yl‘s blog is http://www.longestory.com”。

  • getInitParameterNames()方法:返回Servlet配置的所有初始化参数名称的枚举集合. Enumeration是Iterator的前身,用法与Iterator一致。
public void service(ServletRequest req, ServletResponse res)
            throws ServletException, IOException {
    ServletConfig servletConfig = getServletConfig();

    Enumeration enumeration = servletConfig.getInitParameterNames();
    while (enumeration.hasMoreElements()) {
        String element = (String) enumeration.nextElement();
        String value = servletConfig.getInitParameter(element);
        System.out.println(element + ": " + value);
    }
}
  • ServletConfig有哪些实际作用呢?在struts 1 框架中就运行了ServletConfig内容。
<!-- Standard Action Servlet Configuration (with debugging) -->
<servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>
          /WEB-INF/struts-config.xml,
          /WEB-INF/struts-config-Wildcard.xml
       </param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
</servlet>
<!-- Standard Action Servlet Mapping -->
<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

2017-05-12



时间: 2024-10-09 23:16:16

小谈-—ServletConfig对象和servletContext对象的相关文章

ServletConfig对象和ServletContext对象

ServletConfig对象是servlet配置对象,(web.xml中的)servlet信息封装在ServletConfig对象中,因此在一个web应用可存在多个ServletConfig.ServletContext对象是servlet上下文对象,而整个web.xml信息封装在ServletContext对象中,因此 一个web应用中只有一个servletcontext对象,可能存在多个servletconfig对象. ServletConfig 创建:在创建完servlet对象之后,在调

【Lucene】小谈lucene的BooleanQuery查询对象

BooleanQuery用于逻辑查询,即所谓的组合查询,具体的逻辑关系如下: 一个具体的使用测试,如下:

[Servlet]研究ServletContext对象

ServletContext概述 ServletContext对象是Servlet三大域对象之一,每个Web应用程序都拥有一个ServletContext对象,该对象是Web应用程序的全局对象或者上下文.Tomcat服务器在启动时,会自动创建一个ServletContext对象,在关闭时,会自动销毁这个ServletContext对象.每个Web应用程序只拥有一个ServletContext对象,ServletContext对象可以在整个Web应用中共享数据资源. 下列是ServletConte

重温Servlet学习笔记--servletContext对象

一个项目中只有一个ServletContext对象,我们可以在多个servlet中获取这个唯一的对象,使用它可以给多个servlet传递数据,我们通常成servletContext为上下文对象.这个对象在tomcat启动时就创建,在tomcat关闭时才被销毁.有时候我们也把这个对象叫做application. ServletContext对象的作用就是在整个web应用的动态资源之间共享数据,比如在AServlet中向ServletContext中保存一个数据,然后在Bservelt中获取这个数据

ServletContext对象初识

什么是ServletContext? ServletContext代表一个web应用的环境(上下文)对象,ServletContext对象内部封装的是该web应用的信息.一个web应用只有一个ServletContext对象.但是一个web应用有多个servlet对象. ServletContext的生命周期? 创建:该wwb应用被加载(服务器启动或发布web应用,前提是服务器是启动状态) 销毁:该wwb应用被卸载(服务器关闭或移除web应用) 如何获得ServletContext对象? Ser

三:ServletContext对象

一.ServletContext对象 1.什么是ServletContext对象 ServletContext代表是一个web应用的环境(上下文)对象,ServletContext对象 内部封装是该web应用的信息,ServletContext对象一个web应用只有一个 2.ServletContext对象的生命周期? 创建:该web应用被加载(服务器启动或发布web应用) 销毁:web应用被卸载(服务器关闭,移除该web应用) 3.怎样获得ServletContext对象 1)ServletC

ServletConfig对象与ServletContext区别

介绍 ServletContext对象:servlet容器在启动时会加载web应用,并为每个web应用创建唯一的servlet context对象,可以把ServletContext看成是一个Web应用的服务器端组件的共享内存,在ServletContext中可以存放共享数据.ServletContext对象是真正的一个全局对象,凡是web容器中的Servlet都可以访问. servletConfig对象:用于封装servlet的配置信息.从一个servlet被实例化后,对任何客户端在任何时候访

ServletConfig与ServletContext对象详解

一.ServletConfig对象    在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数.(配置在某个servlet标签或者整个web-app下) 当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将ServletConfig对象传递给servlet.进而,程序员通过ServletConfig对象就可以

ServletConfig和ServletContext对象

1由于一个WEB应用程序中的所有Servlet都共享同一个对应的ServletContext对象,所以ServletContext对象被称为application对象.是当前web应用的大管家,可以获取到web应用的各个信息 package servlet; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; import javax.servlet.ServletConfig