博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小谈-—ServletConfig对象和servletContext对象
阅读量:4949 次
发布时间:2019-06-11

本文共 7595 字,大约阅读时间需要 25 分钟。

 

一、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 Administrator16  *17  */18 public class ServletContext1 extends HttpServlet {19     20     ServletContext sc ; 21     22     @Override23     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("

VisitServlet共被访问了"+times+"次

");10 }11 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {12 doGet(request, response);13 }14 }

 

 

获得Servlet的web.xml配置信息
1 
2
username
3
苍老师
4
5
6
password
7
123
8

获取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);    }}
  • 打开浏览器,在地址栏输入,访问VisitServlet。
  • 再新打开浏览器,在地址栏输入,显示访问次数。

 

 二、servletConfig概述

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

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

This is the description of my J2EE component
This is the display name of my J2EE component
ServletConfigTest
app.java.servlet.FirstServlet
FirstServlet
/servlet/ServletConfigTest
name
yl
blog
http://www.longestory.com
  • 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内容。
action
org.apache.struts.action.ActionServlet
config
/WEB-INF/struts-config.xml, /WEB-INF/struts-config-Wildcard.xml
2
action
*.do

2017-05-12

 

 

转载于:https://www.cnblogs.com/god-y-l/p/6847612.html

你可能感兴趣的文章
被放逐的皇后 金建云
查看>>
Javascript 有用参考函数
查看>>
点群的判别(三)
查看>>
GNSS 使用DFT算法 能量损耗仿真
查看>>
网页抓取 总结
查看>>
【转】Simulink模型架构指导
查看>>
MYSQL数据库的导出的几种方法
查看>>
SQL Server-5种常见的约束
查看>>
硬件之美
查看>>
[转载]java开发中的23种设计模式
查看>>
表格的拖拽功能
查看>>
函数的形参和实参
查看>>
文字过长 用 ... 表示 CSS实现单行、多行文本溢出显示省略号
查看>>
1Caesar加密
查看>>
【TP SRM 703 div2 500】 GCDGraph
查看>>
MapReduce 重要组件——Recordreader组件 [转]
查看>>
webdriver api
查看>>
转载-FileZilla Server源码分析(1)
查看>>
apache 实现图标缓存客户端
查看>>
MediaWiki左侧导航栏通过特殊页面就可以设置。
查看>>