servletContext,ServletConfig,HttpServletRequest,HttpServletResponse,HttpSession相关总结
一、ServletContext
ServletContext 是servlet 与servlet 容器之间的直接通信的接口。Servlet容器在启动一个Web 应用时,会为它创建一个servletContext 对象。每个web 应用有唯一的servletContext 对象。同一个web 应用的所有servlet 对象共享一个serveltContext,servlet 对象可以通过它来访问容器中的各种资源。而getServletContext因为相当与当前的servlet而言,每个用户都是访问它一个,所以不可能每个用户都new一个ServletContext,则用get得到一个引用就行了。
servletContext 接口提供的方法分为以下几种类型:
用于在Web应用范围内存取共享数据的方法;
在这里简单介绍一个例子说明servletContext实现多个servlet之间的共享:
1、获得servletContext并设置属性值:
ServletContext context=this.getServletContext(); context.setAttribute("name","name");
另外一个servlet共享这个属性值:
ServletContext context=this.getServletContext(); String name=context.getAttribute("name");
2、访问当前Web应用的资源;访问servlet容器的相关信息;访问web容器的相关信息;访问服务器端的文件系统资源;输出日志;
ServletContext对象获得几种方式:
Javax.servlet.http.HttpSession.getServletContext()
Javax.servlet.jsp.PageContext.getServletContext()
Javax.servlet.ServletConfig.getServletContext()
二、ServletConfig
ServletConfig只能被本servlet访问,其它Servlet不能访问,而对于ServletContext的用法则是其它Servlet都可以访问,多个Servlet通过ServletContext对象实现数据共享。如果只有一个特定的servlet要设定的参数,其它servlet不能共享,应该配置为ServletConfig
参数,如一个读取附件的servlet要用到绝对目录,而别的servlet不会用到。而一般来说,对整个应用的配置,为了不使用"硬编码",应该配置为ServletContext参数,比如字符集设定。
三、 那么如何访问这两个对象的参数呢
访问ServletConfig参数:
首先要取得ServletConfig对象,然后调用它的getInitParameter();方法。要访问ServletConfig对象,jsp中直接使用config内置对象,但因为你的JSP编译后的servlet一般不会被加到web.xml中的,所以一般不会通过jsp来取对本JSP编译后的servlet的配置参数,那么在servlet中要得到ServletConfig对象有两种方法:
1、在inii()方法中取到:通过init的重载方法传递
public class Test extends HttpServlet{
ServletConfig onfig;
public void init(ServletConfig config) throws ServletException {
this.config = config;
..................
}
}
然后在下面的方法中就可以访问config对象。但要注意,为了确保能从构造方法中到到当前servlet的
config对象,应该调用父类的构造方法:
public class Test extends HttpServlet
{ ServletConfig config;
public void init(ServletConfig config) throws ServletException {
super.init(config);
this.config = config;
}
通过getServletConfig()方法直接到时,这样做的好处是不必调手工传递属性,想在任何时候都可以得到。
四、HttpSession
1、httpsession通过request.getSession()获得
2、Javax.servlet.http.HttpSession.getServletContext()通过session可以获得ServletContext
3、httpsession和servletContext的区别:
(1)HttpSession 是一种数据存储的范围,用来存放用户私有的信息,只对当前用户有效,当前用户的信息不会被访问该站点的其他用户看到.
ServletContext也是一种数据的存储范围,在整个Web应用中只有一个,是一个全局的,共享的范围,保存的信息对访问该站点的所有用户都是有效的.
4、httpsession、httpservletresponse、httpservletRequest的区别
Request是获取,Response是输出值,Session是保存值
情景假设 假如你有两个页面,A页面时登陆页面,B页面是你的空间主页,你在A页面输入了用户名进行登陆,想在B页面显示你刚才输入的用户名,可利用地址带参数的方法把值传B页面,到B页面后利用Request获取这个传过来的值。然后再利用Response将这个值显示到页面上,同时将你的用户名保存在Session中,在你从主页转到相册页面时就不用再次输入用户名了,可以直接到Session中获取。就相当于一个全局变量。另外Session默认只是帮你保存一定的时间,过了这个时间它就会失效,所以有时你发觉,打开一个网页后长时间不进行操作,再次操作时提示你重新登录
HttpServletRequest,HttpServletResponse:这两个属性的作用范围最小。时间上:只是本身请求和应答完成就失效,当然转发是把当前的request对象取出来传给另一个资源,其实本身的request对象还是只生存到本次请求结束,response也同样。空间上:只能发送请求的客户端有效。
HttpSession:一次连结到客户端关闭,时间作用范围比上面两个大,空间任用范围相同。
ServletConfig:从一个servlet被实例化后,对任何客户端在任何时候访问有效,但仅对本servlet有效,一个servlet的ServletConfig对象不能被另一个servlet访问。
ServletContext:对任何servlet,任何人在任何时间都有效,这才是真正全局的对象。
浙公网安备 33010602011771号