`
haofenglemon
  • 浏览: 243929 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

httpSession生命周期

阅读更多
新客户端向服务器第一次发送请求的时候,request中并无sessionID .
2 此时server端会创建一个session对象,并分配一个sessionID,serssion对象会保存在服务器端。此时session的状态处于new state状态,如果调用session.isNew(),则返回true
3 当服务器段处理完毕后,将此sessionID,同response一同传回到客户段,并将其存入到cookie中。
4 当客户段再次发送请求时,会将sessionID 同request一起发送,传递给服务器端。
5 服务器端可以根据传递过来的sessionID将这次请求(request)与保存在服务器端的session对象联系起来,此时的session已不处于new state状态,如果调用session.isNew(),则返回false.
6 循环3-5 ,直到session超时或销毁。

ServletContext接口- -
                                      

安装在一个服务器中的一个特定URL名字空间(比如,/myapplication)下的所有Servlet,JSP,JavaBean等Web部件的集合构成了一个Web的应用,每一个Web应用(同一JVM),容器都会有一个背景对象,而javax.servlet.ServletContext接口就提供了访问这个背景对象的途径。
你可以通过一个Servlet实例的getServletContext方法得到该Servlet运行其中的这个背景对象。从这个背景对象中你可以访问如下信息或资源:
    
日志

可以调用ServletContext.getInitParameterNames()返回一个初始化参数的枚举对象(java.util.Enumeration),或直接指定一个参数名来得到特定的参数值:ServletContext.getInitParameter(String name)。另外,在Servlet的背景中还可以存放与特定名字绑定的任意类型的对象,比如:
  context.setAttribute(String name, Object object);
将把object对象绑定到名字name,存放在Servlet背景中,可供同一背景中的其他Servlet共享。其他Servlet可以通过
context.getAttribute(String name),得到一个背景中的对象,或通过context.removeAttribute(String name)在背景中移除一个对象。
  一个特定资源的URL可以通过调用ServletContext.getResource(String path)得到,这儿的path参数必须以“/”开始,将被解析为相对于当前Servlet背景的根的相对路径。这个方法有别于基于类加载器的java.lang.Class.getResource方法。如果你通过
  ServletContext.getResource方法请求了一个.jsp页面,你得到的将是JSP的源码,要得到执行结果,可以使用RequestDispatcher对象的include方法。
    关于Config参数和Context参数的访问
ServletConfig和ServletConfig参数访问

我们先来回顾一下各种内置对象的作用范围

HttpServletRequest,HttpServletResponse:这两个属性的作用范围最小。
时间上:只是本身请求和应答完成就失效,当然转发是把当前的request对象取出来传给另一
个资源,其实本身的request对象还是只生存到本次请求结束,response也同样。
空间上:只能发送请求的客户端有效。

HttpSession:一次连结到客户端关闭,时间作用范围比上面两个大,空间任用范围相同。

ServletConfig:从一个servlet被实例化后,对任何客户端在任何时候访问有效,但仅对本servlet
有效,一个servlet的ServletConfig对象不能被另一个servlet访问。

ServletContext:对任何servlet,任何人在任何时间都有效,这才是真正全局的对象。

那么,ServletConfig参数和ServletContext参数到底应该如何使用,如何取得?

一般来说,对整个应用的配置,为了不使用“硬编码”,应该配置为ServletContext参数,比如字
符集设定。
<web-app>
.................
<init-param>
<param-name>charset</param-name>
<param-value>GB2312</param-value>
</init-param>
.................
</web-app>
注意以上格式只是2。0以后的标准格式,旧容器(引擎)采用服务商自己的格式配置。注意它的
父元素应该是<web-app>也就是说它是对一个应用作用的。

而如果只有一个特定的servlet要设定的参数,其它servlet不能共享,应该配置为ServletConfig
参数,如一个读取附件的servlet要用到绝对目录,而别的servlet不会用到:
<servlet>
<servlet-name>GetAtt</servlet-name>
<servlet-class>mail.GetAttServlet</servlet-class>
<init-param>
<param-name>absPath</param-name>
<param-value>/usr/mail/ax/axman/Maildir/</param-value>
</init-param>
</servlet>
不用说,因为在<servlet>标签中已经指定了name和class,也就是说只有mail.GetAttServlet这个\r
servlet中才能取到path,而别的Servlet是不能取到的。

那么如何访问这两个对象的参数呢?
访问ServletConfig参数:
首先要取得ServletConfig对象,然后调用它的getInitParameter();方法。要访问
ServletConfig对象,jsp中直接使用config内置对象,但因为你的JSP编译后的servlet一般不会被
加到web.xml中的,所以一般不会通过jsp来取对本JSP编译后的servlet的配置参数,那么在servlet
中要得到ServletConfig对象有两种方法:

在inii()方法中取到:通过init的重载方法传递

.....
public class Test extends HttpServlet
{
ServletConfig config;
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()方法直接到时,这样做的好处是不必调手工传递属性,想在任何时候都可
以得到。

还有第三种方法,要自己实现一些接口,这里作为一般讨论就不介绍了。

要访问ServletContext对象,只要从现有的ServletConfig对象getServletContext()就可以了,然后\r
调用它的getInitParameter()方法就可以获取它的参数。

按说:ServletContext对象的作用域比ServletConfig作用域大,为什么要从ServletConfig中到得
ServletContext对象呢?我个人认为:容器保存了很多个ServletContext对象,请求时容器到底取哪一个\r
给你呢?那就取其中包含ServletConfig信息的那个给你,就是说取ServletConfig对象的父级对象。就好
象HttpSession要从requset中取得一样,就是取那个包含当前requese对象的session对象给你,这只是我
的个人想法,还没有来得及看具体

分享到:
评论

相关推荐

    session生命周期的设置

    1. **编程方式设置**:在Java Web开发中,可以使用HttpSession接口的setMaxInactiveInterval(int interval)方法来设置Session的生命周期,interval参数表示的是以秒为单位的时间间隔。例如,以下代码将Session的生命...

    HttpSession的使用

    每个`HttpSession`都有一个生命周期,当用户关闭浏览器、手动清除session或者服务器达到预设的超时时,session会失效。默认情况下,session的超时时间为30分钟,但可以通过在web.xml配置文件中设置`&lt;session-config&gt;...

    httpSession

    2. **session的生命周期管理**:讨论session的默认超时时间(通常是30分钟),以及如何通过配置修改这个超时时间。 3. **session共享与复制**:在集群环境中,如何实现session的共享,以确保用户在不同服务器之间...

    基于Listener监听器生命周期(详解)

    以下将详细解析Listener监听器的生命周期,以及如何在实际项目中应用这些知识点。 ### 监听器的生命周期 监听器的生命周期指的是监听器被创建、执行以及销毁的整个过程。在Servlet规范中,监听器接口主要分为两大...

    session的生命周期1

    3. **手动失效**:开发者还可以通过调用`HttpSession.invalidate()`方法立即结束一个`Session`的生命周期,使其失效。 ### Session对浏览器的要求 - **Cookie依赖**:`Session`的识别主要依赖于`Cookie`。服务器在...

    使用监听器跟踪session的生命周期和session的属性

    为了更好地理解和管理Session的生命周期及其属性,我们可以使用监听器(Listeners)来实现这一目标。以下是关于使用监听器跟踪Session生命周期和属性的详细解释。 1. **HttpSessionListener**: - `...

    sevlet生命周期,request web.xml 及ServletContext总结

    Servlet的生命周期分为四个阶段:加载和实例化、初始化、服务以及销毁。下面将详细解释这些阶段。 1. **加载和实例化**: 当Servlet容器(如Tomcat、Jetty等)启动时,或者当容器首次接收到需要特定Servlet服务的...

    ServletHttpSession DEMO

    ServletHttpSession是Java Web开发中的一个关键概念,主要用于在HTTP无状态协议中维持客户端...在ServletHttpSessionExample的实践中,你可以尝试创建、读取、更新和删除Session属性,以及观察Session的生命周期管理。

    Web_4_状态管理Cookie和HttpSession1

    总的来说,本章节涵盖了状态管理的基本概念,Cookie的创建、查询、修改和生命周期,以及HttpSession的使用。学习者应该掌握这些内容,以便在实际的Web应用开发中有效地处理客户端和服务器之间的状态保持。

    Web应用安全:HTTPSession.pptx

    ... ... 当用户第一次访问 Servlet 时,服务器端会给用户创建一个独立的 ...通过了解 HTTP 会话的原理、域、创建、身份验证原理、何时创建 HTTP 会话、获取 HTTP 会话对象和生命周期,可以更好地理解和应用 HTTP 会话技术。

    java使用HttpSession实现QQ访问记录

    6. **Servlet的doGet方法**:这是Servlet生命周期的一部分,处理GET请求。在这里,我们利用`PrintWriter`向客户端发送HTML内容,展示QQ列表和访问记录。 7. **页面渲染**:`out.println()`用于向响应流写入HTML代码...

    java使用websocket,并且获取HttpSession 源码分析(推荐)

    这些注解用于处理 WebSocket 的生命周期事件。 知识点7:发送消息 在使用 WebSocket 时,我们可以使用 sendMessage 方法发送消息到客户端。sendMessage 方法用于将消息发送到客户端,例如发送文字消息或二进制消息...

    合肥工业大学 J2EE 2013 期末试题

    本资源摘要信息涵盖了 J2EE 相关知识点,涉及 JSP、Servlet、J2EE 中的生命周期、会话管理、请求处理等方面。 JSP 1. 在 JSP 中定义一个方法需要使用 `! %&gt;` 元素。 2. JSP 页面经过编译之后,将创建一个 Servlet...

    JSP考试题目(1).docx

    JSP考试题目知识点总结 ... 一、Java Bean * 一个Java类要被认为是Java Bean,必须满足三个条件:是一个公共类、含有公有的无参构造方法、属性私有...* 在JavaBean的生命周期中,用来跟踪用户请求操作的是HttpSession。

    Java实训教程 Java软件开发实战 web开发技术 第6章 listener 共21页.pptx

    ### Java Web 开发技术:Listener 监听器技术详解 #### 一、课程目标与概述 ...监听器为开发者提供了一种高效、灵活的方式来处理Web应用中的各种生命周期事件,极大地增强了应用程序的功能性和可维护性。

    Java Servlet Programming

    第3章:Servlet生命周期,详细介绍了Servlet的生命周期,包括Servlet的创建、初始化、服务和销毁。 第4章:Servlet配置,详细介绍了Servlet的配置方法,包括web.xml配置文件和Servlet的部署。 第5章:会话管理,...

    JavaWEB_源代码.rar

    - **Servlet生命周期**:Servlet的生命周期由容器(如Tomcat)管理,包括加载Servlet类、创建Servlet实例、调用`init()`方法进行初始化、处理请求(`service()`方法)、销毁Servlet(`destroy()`方法)。...

    Day09_cookie & Session

    ### Day09_cookie & Session:详解Cookie与Session的用法及生命周期 在现代Web开发中,维护用户状态是一项至关重要的任务。Cookie与Session是实现这一目标的两种主要机制。本文将深入探讨这两种技术的工作原理、...

    servlet事件监听

    Servlet事件监听是Java Web开发中的一个重要概念,它允许开发者在特定的Servlet生命周期事件发生时执行相应的处理代码。这种机制使得我们可以对Servlet的初始化、服务、销毁等过程进行监控和定制化操作,增强了程序...

Global site tag (gtag.js) - Google Analytics