作用:ServletContext可以实现一个web应用程序中所用servlet共享数据。
生命周期:ServletContext随着第一个Servlet的创建而创建,随着服务器的停止而销毁。
ServletContext接口表示一个web应用的上下文。可以想象成一个web应用的共享数据区域,该区域保存整个web共享数据。
当一个web应用启动的时候,就会创建该ServletContext接口的实现类。
与HttpSession以及HttpServletRequest的区别?
参考:
Servlet容器在启动时会加载Web应用,并为每个Web应用创建唯一的ServletContext对象。可以把ServletContext看成是一个Web应用的服务器端组件的共享内存。在ServletContext中可以存放共享数据,它提供了4个读取或设置共享数据的方法。
1)setAttribute(String name,Object object):把一个对象和一个属性名绑定,将这个对象存储在ServletContext中;
2)getAttribute(String name):根据指定的属性名返回所绑定的对象;
3)removeAttribute(String name):根据给定的属性名从ServletContext中删除相应的操作;
4)getAttributeNames():返回Enumeration对象,它包含了存储在ServletContext对象中的所有属性名。
下面通过一个例子,说明ServletContext和Web应用的关系。
package mypack;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class CounterServlet extends HttpServlet
{
public static final String CONTENT_TYPE="text/html;charset=GB2312";
public void init(ServletConfig config)throws ServletException{
super.init(config);
}
public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
doPost(request,response);
}
public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
//获得ServletContext的引用
ServletContext context=getServletContext();
//从ServletContext读取count属性
Integer count=(Integer)context.getAttribute("count");
//如果count属性还没有设置,那么创建count属性,初始值为0
//one and add it to the ServletContext
if(count==null){
count=new Integer(0);
context.setAttribute("count",new Integer(0));
}
response.setContentType(CONTENT_TYPE);
PrintWriter out=response.getWriter();
out.println("<HTML>");
out.println("<HEAD><TITLE>点击计数</TITLE></HEAD>");
out.println("<BODY>");
//输出当前的count属性值
out.println("<P>当前计数是:"+count+"</P>");
out.println("</BODY></HTML>");
//创建新的count对象,其值增1
count=new Integer(count.intValue()+1);
//将新的count属性存储到ServletContent中
context.setAttribute("count",count);
}
public void destroy(){
}
}
在web.xml中为CounterServlet类加上<servlet>和<servlet-mapping>元素
<servlet>
<servlet-name>CounterServlet</servlet-name>
<servlet-class>mypack.CounterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CounterServlet</servlet-name>
<url-pattern>/counter</url-pattern>
</servlet-mapping>
测试通过。
1)刷新页面,count加1;
2)关闭浏览器,再打开新浏览器还是在原来基础上加1(即便由IE换成Opera);
3)如果重启Tomcat服务器,再访问CounterServlet,则count又初始化为0;
4)复制helloapp应用,改为helloapp1,再发布helloapp1,通过不同的浏览器窗口分别访问helloapp及helloapp1中的CounterServlet,发现这两个Web应用拥有各自独立的count属性。
即ServletContext对象只在Web应用被关闭时才被销毁;不同的Web应用,ServletContext各自独立存在。
分享到:
相关推荐
这是servlet中ServletContext的应用实例,主要就是添加属性和读取属性。
ServletContext与ServletConfig关系
ServletContext读取web应用中的资源文件
Ssh获取ServletContext 只需要更改struts-config action中的type就可以了ru :type="com.uo.spring.SpringDelegatingActionProxy" 大家有什么疑问可以直接去我的blog查看...《[正解]Ssh获取ServletContext》
对servletContext的学习,并使用实例进行了实战。完成了一个登录和统计登录人数的功能。
超全面javaweb教程28天第9天_14_获取ServletContext对象
注意:每个servlet有一个ServletConfig,每个Web应用有一个ServletContext.要把初始化参数认为是部署时常量,可用在运行时得到这些初始化参数,但不能设置初始化参数,根本没有setInitParameter().如果修改XML来改变...
quartz servletcontext quartz servletcontext配置资料quartz servletcontext配置资料
NULL 博文链接:https://onway417.iteye.com/blog/2194540
博客地址:...存放数据指的是这三个对象在工程中setAttribute(),removeAttribute()的时候,我们的监听器就会知道,然后在对应的方法中执行相应的操作。
Servlet生命周期,及servlet相关知识点的总结。
ServletContext官方叫servlet上下文。服务器会为每一个工程创建一个对象,这个对象就是ServletContext对象。这个对象全局唯一,而且工程内部的所有servlet都共享这个对象。所以叫全局应用程序共享对象。
Application对象(ServletContext对象).pptx
很清楚的讲解了ServletContext和ServletConfig,不光有理论上的讲解,还有例子。
介绍 ServletContext对象的一些重要方法的示例代码
超全面javaweb教程28天第9天_13_ServletContext概述
超全面javaweb教程28天第9天_15_演示ServletContext
超全面javaweb教程28天第9天_17_ServletContext获取资源相关方法
超全面javaweb教程28天第9天_16_ServletContext获取公共的初始化参数