Servlet的三大作用域对象
什么是域对象
域对象是所有应用程式的中枢。他们捕捉了数据库的核心数据模型和应用在数据上的业务规则。在典型情况下,应用程式的大多数子系统都依赖这些通用的域对象–这意味着域对象的映射越接近数据库大纲,应用程式研发者理解和使用他们就越容易,因为他们表现了数据库中的现实"实体"和"关系"。
如果域对象没有和应用程式的其他部分分开,你通常就得把持续性代码复制到非常多个位置。同样,如果域对象没有和持续性代码分开,你遇见的情况就是,所有使用域对象的子系统都必须知道并依赖持续性对象。对持续性对象的所有更改都必然影响整个应用程式。因此,如果没有把域对象和应用程式和持续性代码分开都是不好的设计。
Servlet三大作用域对象
Request:
- 每一次请求都是一个新的request对象,如果在Web组件之间需要共享同一个请求中的数据,只能使用请求转发.
- 用处:常用于服务器间同一请求不同页面之间的参数传递,常应用于表单的控件值传递。
Session:
- 每一次会话都是一个新的session对象,如果需要在一次会话中的多个请求之间需要共享数据,只能使用session.
- 用处:常用于web开发中的登陆验证界面(当用户登录成功后浏览器分配其一个session键值对)。
- 对于服务器而言,每一个连接到它的客户端都是一个 session,servlet 容器使用此接口创建 HTTP客户端和 HTTP 服务器之间的会话。会话将保留指定的时间段,跨多个连接或来自用户的页面请求。一个会话通常对应于一个用户,该用户可能多次访问一个站点。可以通过此接口查看和操作有关某个会话的信息,比如会话标识符、创建时间和最后一次访问时间。在整个 session 中,最重要的就是属性的操作。
标识会话JSESSIONID
- Session 既然是为了标识一次会话,那么此次会话就应该有一个唯一的标志,这个标志就是sessionId。
- 每当一次请求到达服务器,如果开启了会话(访问了 session),服务器第一步会查看是否从客户
端回传一个名为 JSESSION 的 cookie,如果没有则认为这是一次新的会话,会创建一个新的 session 对
象,并用唯一的 sessionId 为此次会话做一个标志。如果有 JESSIONID 这个 cookie 回传,服务器则会
根据 JSESSIONID 这个值去查看是否含有 id 为 JSESSION 值的 session 对象,如果没有则认为是一个新
的会话,重新创建一个新的 session 对象,并标志此次会话;如果找到了相应的 session 对象,则认为
是之前标志过的一次会话,返回该 session 对象,数据达到共享。 - 这里提到一个叫做 JSESSION 的 cookie,这是一个比较特殊的 cookie,当用户请求服务器时,如
果访问了 session,则服务器会创建一个名为 JSESSION,值为获取到的 session(无论是获取到的还是
新创建的)的 sessionId 的 cookie 对象,并添加到 response 对象中,响应给客户端,有效时间为关闭
浏览器。 - 所以 Session 的底层依赖 Cookie 来实现。
ServletContext(Application):
每一个 web 应用都有且仅有一个 ServletContext 对象,又称 Application 对象,从名称中可知,该对象是与应用程序相关的。在 WEB 容器启动的时候,会为每一个 WEB 应用程序创建一个对应的ServletContext 对象。
该对象有两大作用,第一、作为域对象用来共享数据,此时数据在整个应用程序中共享; 第二、该对象中保存了当前应用程序相关信息。例如可以通过 getServerInfo(); 方法获取当前服务器信,getResourceAsStream(String path); 方法以流的形式获取某个资源, getRealPath(Stringpath); 获取资源的真实路径等。
-
应用对象,Tomcat启动到Tomcat关闭,表示一个应用,在一个应用中有且只有一个application对象.作用于整个Web应用,可以实现多次会话之间的数据共享.
对象名称 对象类型 request HttpServletRequest session HttpSession servletcontext(application) ServletContext