9大内置对象、4大作用域、session的生命周期

jsp的九大内置对象?对应servlet中的java对象?

------------------------------------------------------------

request       HttpServletRequest

 该对象封装了用户提交的信息,通过调用该对象

 相应的方法可以获取封装的信息,即使用该对象可以

 获取用户提交的信息。

------------------------------------------------------------

response      HttpServletResponse

 对客户的请求做出动态的响应,向客户端发送数据。

------------------------------------------------------------

session       HttpSession

 Session对象是一个JSP内置对象,

 它在第一个JSP页面被装载时自动创建,完成会话期管理。

------------------------------------------------------------

application  ServletContext 

 服务器启动后就产生了这个Application对象,

 当客户再所访问的网站的各个页面之间浏览时,

 这个Application对象都时同一个,直到服务器关闭

 但是与Session对象不同的是,所有客户的Application

 对象都是同一个,即所有客户共享这个内置的Application对象。

------------------------------------------------------------

out           JspWriter 

 Out对象时一个输出流,用来向客户端输出数据。

 Out对象用于各种数据的输出。

------------------------------------------------------------

pagecontext  PageContext

              页面上下文对象

------------------------------------------------------------

page          this

 页面对象。

------------------------------------------------------------

config        ServletConfig

 配置对象

------------------------------------------------------------

exception     Throwable

              在处理异常的网页中可以直接访问exception隐式对象。

jsp九大内置对象、四种作用域、跳转方式


jspstringobjectservlet服务器session

jsp有四种属性范围:
 page -> 页面级别,显然只有在一个页面内可用。
 request -> 请求级别 服务器跳转,一次请求之后消失。
 session -> 会话级别 客户端跳转(服务器跳转),与浏览器有关,ie是在重新打开ie时才会不同。
 application = 应用级别,当重启服务器时才会消失
客户端跳转: 客户端跳转是服务器将请求结果返回给客户端,客户端再向服务器发起另一次请求。在客户端跳转的过程中,客户端一定要参与跳转的过程。客户端跳转后的url是最后一次请求的地址。
客户端跳转能够进行网站外跳转。
链接方式:<ahref = ""> </a>

表单提交
<meta http-equiv = "refresh" content = "3; url =2.jsp">
javascript:history.back();
response.sendRedirect
response.setHeader("refresh", "3; url ="request2.jsp");
客户端跳转时的"/"表示的是服务器的根

服务器跳转(容器内跳转):能够自动的在服务器内部进行页面的转换,所以对于客户端来说这是透明的。而request范围的属性会被传递到下一个页面。服务器跳转是第一个页面的地址。
服务器跳转只能是站点内跳转。服务器跳转时的"/"代表本网站的根
<jsp:forward page = " "/>
pageContent.forward("request2.jsp");

以"/"开始的路径代表绝对路径,反之代表相对路径

………………………………………………………………………………………… 

JSP为简化页面的开发提供了一些内部的对象,在所有的JSP页面中都能使用这些内部对象。编写JSP的人员不需要对这些内部对象进行例化,只要调用其中的方法就能实现特定的功能。JSP主要有如下内置对象:

JSP中九大内置对象为:

 1、request           请求对象       类型javax.servlet.ServletRequest        作用域 Request

 2、response         响应对象        类型javax.servlet.SrvletResponse       作用域 Page

 3、pageContext   页面上下文对象      类型javax.servlet.jsp.PageContext             作用域   Page

 4、session           会话对象          类型 javax.servlet.http.HttpSession   作用域   Session

 5、application      应用程序对象         类型javax.servlet.ServletContext         作用域   Application

  6、out                输出对象                  类型javax.servlet.jsp.JspWriter            作用域   Page

 7、config             配置对象                 类型javax.servlet.ServletConfig           作用域   Page

 8、page              页面对象                 类型javax.lang.Object                     作用域   Page

 9、exception       例外对象                类型javax.lang.Throwable                    作用域   page


下面分别介绍这些对象的使用。


1.request对象 


客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。 


序号 方 法 说 明 

1 object getAttribute(String name) 返回指定属性的属性值 

2 Enumeration getAttributeNames() 返回所有可用属性名的枚举 

3 String getCharacterEncoding() 返回字符编码方式 

4 int getContentLength() 返回请求体的长度(以字节数) 

5 String getContentType() 得到请求体的MIME类型 

6 ServletInputStream getInputStream() 得到请求体中一行的二进制流 

7 String getParameter(String name) 返回name指定参数的参数值 

8 Enumeration getParameterNames() 返回可用参数名的枚举 

9 String[] getParameterValues(String name) 返回包含参数name的所有值的数组 

10 String getProtocol() 返回请求用的协议类型及版本号 

11 String getScheme() 返回请求用的计划名,如:http.https及ftp等 

12 String getServerName() 返回接受请求的服务器主机名 

13 int getServerPort() 返回服务器接受此请求所用的端口号 

14 BufferedReader getReader() 返回解码过了的请求体 

15 String getRemoteAddr() 返回发送此请求的客户端IP地址 

16 String getRemoteHost() 返回发送此请求的客户端主机名 

17 void setAttribute(String key,Object obj) 设置属性的属性值 

18 String getRealPath(String path) 返回一虚拟路径的真实路径 
2.response对象 


response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。 


序号 方 法 说 明 

1 String getCharacterEncoding() 返回响应用的是何种字符编码 

2 ServletOutputStream getOutputStream() 返回响应的一个二进制输出流 

3 PrintWriter getWriter() 返回可以向客户端输出字符的一个对象 

4 void setContentLength(int len) 设置响应头长度 

5 void setContentType(String type) 设置响应的MIME类型 

6 sendRedirect(java.lang.String location) 重新定向客户端的请求 

3.session对象 


session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。它是HttpSession类的实例

序号 方 法 说 明 

1 long getCreationTime() 返回SESSION创建时间 

2 public String getId() 返回SESSION创建时JSP引擎为它设的惟一ID号 

3 long getLastAccessedTime() 返回此SESSION里客户端最近一次请求时间 

4 int getMaxInactiveInterval() 返回两次请求间隔多长时间此SESSION被取消(ms) 

5 String[] getValueNames() 返回一个包含此SESSION中所有可用属性的数组 

6 void invalidate() 取消SESSION,使SESSION不可用 

7 boolean isNew() 返回服务器创建的一个SESSION,客户端是否已经加入 

8 void removeValue(String name) 删除SESSION中指定的属性 

9 void setMaxInactiveInterval() 设置两次请求间隔多长时间此SESSION被取消(ms) 

4.out对象 


out对象是JspWriter类的实例,是向客户端输出内容常用的对象 


序号 方 法 说 明 

1 void clear() 清除缓冲区的内容 

2 void clearBuffer() 清除缓冲区的当前内容 

3 void flush() 清空流 

4 int getBufferSize() 返回缓冲区以字节数的大小,如不设缓冲区则为0 

5 int getRemaining() 返回缓冲区还剩余多少可用 

6 boolean isAutoFlush() 返回缓冲区满时,是自动清空还是抛出异常 

7 void close() 关闭输出流 

5.page对象 


page对象就是指向当前JSP页面本身,有点象类中的this指针,它是java.lang.Object类的实例 


序号 方 法 说 明 

1 class getClass 返回此Object的类 

2 int hashCode() 返回此Object的hash码 

3 boolean equals(Object obj) 判断此Object是否与指定的Object对象相等 

4 void copy(Object obj) 把此Object拷贝到指定的Object对象中 

5 Object clone() 克隆此Object对象 

6 String toString() 把此Object对象转换成String类的对象 

7 void notify() 唤醒一个等待的线程 

8 void notifyAll() 唤醒所有等待的线程 

9 void wait(int timeout) 使一个线程处于等待直到timeout结束或被唤醒 

10 void wait() 使一个线程处于等待直到被唤醒 

11 void enterMonitor() 对Object加锁 

12 void exitMonitor() 对Object开锁 

6.application对象 


application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决定了application对象的生命。它是ServletContext类的实例。 


序号 方 法 说 明 

1 Object getAttribute(String name) 返回给定名的属性值 

2 Enumeration getAttributeNames() 返回所有可用属性名的枚举 

3 void setAttribute(String name,Object obj) 设定属性的属性值 

4 void removeAttribute(String name) 删除一属性及其属性值 

5 String getServerInfo() 返回JSP(SERVLET)引擎名及版本号 

6 String getRealPath(String path) 返回一虚拟路径的真实路径 

7 ServletContext getContext(String uripath) 返回指定WebApplication的application对象 

8 int getMajorVersion() 返回服务器支持的ServletAPI的最大版本号 

9 int getMinorVersion() 返回服务器支持的ServletAPI的最大版本号 

10 String getMimeType(String file) 返回指定文件的MIME类型 

11 URL getResource(String path) 返回指定资源(文件及目录)的URL路径 

12 InputStream getResourceAsStream(String path) 返回指定资源的输入流 

13 RequestDispatcher getRequestDispatcher(String uripath) 返回指定资源的RequestDispatcher对象 

14 Servlet getServlet(String name) 返回指定名的Servlet 

15 Enumeration getServlets() 返回所有Servlet的枚举 

16 Enumeration getServletNames() 返回所有Servlet名的枚举 

17 void log(String msg) 把指定消息写入Servlet的日志文件 

18 void log(Exception exception,String msg) 把指定异常的栈轨迹及错误消息写入Servlet的日志文件 

19 void log(String msg,Throwable throwable) 把栈轨迹及给出的Throwable异常的说明信息 写入Servlet的日志文件 

7.exception对象 


exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象 
序号 方 法 说 明 

1 String getMessage() 返回描述异常的消息 

2 String toString() 返回关于异常的简短描述消息 

3 void printStackTrace() 显示异常及其栈轨迹 

4 Throwable FillInStackTrace() 重写异常的执行栈轨迹 

8.pageContext对象 


pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本类名也叫pageContext 
序号 方 法 说 明 

1 JspWriter getOut() 返回当前客户端响应被使用的JspWriter流(out) 

2 HttpSession getSession() 返回当前页中的HttpSession对象(session) 

3 Object getPage() 返回当前页的Object对象(page) 

4 ServletRequest getRequest() 返回当前页的ServletRequest对象(request) 

5 ServletResponse getResponse() 返回当前页的ServletResponse对象(response) 

6 Exception getException() 返回当前页的Exception对象(exception) 

7 ServletConfig getServletConfig() 返回当前页的ServletConfig对象(config) 

8 ServletContext getServletContext() 返回当前页的ServletContext对象(application) 

9 void setAttribute(String name,Object attribute) 设置属性及属性值 

10 void setAttribute(String name,Object obj,int scope) 在指定范围内设置属性及属性值 

11 public Object getAttribute(String name) 取属性的值 

12 Object getAttribute(String name,int scope) 在指定范围内取属性的值 

13 public Object findAttribute(String name) 寻找一属性,返回起属性值或NULL 

14 void removeAttribute(String name) 删除某属性 

15 void removeAttribute(String name,int scope) 在指定范围删除某属性 

16 int getAttributeScope(String name) 返回某属性的作用范围 

17 Enumeration getAttributeNamesInScope(int scope) 返回指定范围内可用的属性名枚举 

18 void release() 释放pageContext所占用的资源 

19 void forward(String relativeUrlPath) 使当前页面重导到另一页面 

20 void include(String relativeUrlPath) 在当前位置包含另一文件 

9.config对象 
config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象) 


序号 方 法 说 明 

1 ServletContext getServletContext() 返回含有服务器相关信息的ServletContext对象 

2 String getInitParameter(String name) 返回初始化参数的值 

3 Enumeration getInitParameterNames() 返回Servlet初始化所需所有参数的枚举

 Servlet的内置对象 


1.request对象:

客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。

2.response对象:

response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。

3.session对象:

session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。它是HttpSession类的实例.

4.out对象:

out对象是JspWriter类的实例,是向客户端输出内容常用的对象

5.page对象:

page对象就是指向当前JSP页面本身,有点象类中的this指针,它是java.lang.Object类的实例

6.application对象:

application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决定了application对象的生命。它是ServletContext类的实例。

7.exception对象:

exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象

8.pageContext对象:

    pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本类名也叫pageContext。

9.config对象:

   config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)

session简介
Session直接翻译成中文比较困难,一般都译成时域。在计算机专业术语中,Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间以及如果需要的话,可能还有一定的操作空间。
 
  具体到Web中的Session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间。因此从上述的定义中我们可以看到,Session实际上是一个特定的时间概念。
 
  需要注意的是,一个Session的概念需要包括特定的客户端,特定的服务器端以及不中断的操作时间。A用户和C服务器建立连接时所处的SessionB用户和C服务器建立连接时所处的Session是两个不同的Session
 
session的工作原理
 
  (1)当一个session第一次被启用时,一个唯一的标识被存储与本地的cookie中。
 
  (2)首先使用session_star()函数,PHPsession仓库中加载已经存储的session变量
 
  (3) 当执行PHP脚本时,通过使用session_register()函数注册session变量
 
  (4)当PHP脚本执行结束时,未被销毁的session变量会自动被保存在本地一定路径下的session库中,这个路径可以通过php.ini文件中的session.save_path指定,下次浏览网页时可以加载使用。
  
一、ASPSession对象
 
其属性Timeout (读/写。整型)。为这个会话定义以分钟为单位的超时周期。如果用户在超时周期内没有进行刷新或请求一个网页,该会话结束。在各网页中根据
需要可以修改。缺省值是10min。在使用率高的站点上该时间应更短。
  
二、.netsession
在每次读取Session的值以前请务必先判断Session是否为空,否则很有可能出现未将对象引用设置到对象的实例的异常(出现这种异常原因之一就是session超时)Session使用一种平滑超时的技术来控制何时销毁Session。默认情况下,Session 的超时时间(Timeout)是20分钟,用户保持连续20分钟不访问网站,则Session被收回,如果在这20分钟内用户又访问了一次页面,那么20 分钟就重新计时了,也就是说,这个超时是连续不访问的超时时间,而不是第一次访问后20分钟必过时。这个超时时间同样也可以通过调整Web.config 文件进行修改;在程序中进行设置:Session.Timeout = "30";
一旦Session超时,Session中的数据将被回收,如果再使用Session系统,将给你分配一个新的SessionID
不过,你可别太相信SessionTimeout属性,如果你把它设置为24小时,则很难相信24小时之后用户的Session还在。Session是否存在,不仅仅依赖于Timeout属性,以下的情况都可能引起Session丢失(所谓丢失就是在超时以前原来的Session无效)。
  
三、在JSP
Jspsession是使用bean的一个生存期限,一般为page,session意思是在这个用户没有离开网站之前一直有效,如果无法判断用户何时离开,一般依据系统设定,tomcat中设定为30分钟.
     
四、php中的session
PHP开发中对比起Cookiesession 是存储在服务器端的会话,相对安全,并且不像 Cookie 那样有存储长度限制;Session 能否像 Cookie 那样设置生存周期呢?有了 Session 是否就完全抛弃 Cookie ?我想说,结合 Cookie 来使用 session 才是最方便的。
如果客户端没有禁用 Cookie,则 Cookie 在启动 Session 会话的时候扮演的是存储 Session ID session 生存期的角色。
 
  我们来手动设置 session 的生存期:
 
session_start();// 保存一天
 
$lifeTime = 24 *3600;
setcookie(session_name(),session_id(),time() +$lifeTime,"/");
>
  其实 Session 还提供了一个函数session_set_cookie_params(); 来设置 Session 的生存期的,该函数必须在 session_start() 函数调用之前调用:
 
// 保存一天<?php $lifeTime = 24 * 3600; session_set_cookie_params($lifeTime);session_start(); $_session["admin"]= true; >

Session的生命周期

  以前在学习的时候没怎么注意,今天又回过头来仔细研究研究了一下Session的生命周期。

  Session存储在服务器端,一般为了防止在服务器的内存中(为了高速存取),Sessinon在用户访问第一次访问服务器时创建,需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session,可调用request.getSession(true)强制生成Session。

Session什么时候失效?

  1. 服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。Tomcat中Session的默认失效时间为20分钟。

  2. 调用Session的invalidate方法。

  Session对浏览器的要求:

  虽然Session保存在服务器,对客户端是透明的,它的正常运行仍然需要客户端浏览器的支持。这是因为Session需要使用Cookie作为识别标志。HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。

 

  该Cookie为服务器自动生成的,它的maxAge属性一般为-1,表示仅当前浏览器内有效,并且各浏览器窗口间不共享,关闭浏览器就会失效。因此同一机器的两个浏览器窗口访问服务器时,会生成两个不同的Session。但是由浏览器窗口内的链接、脚本等打开的新窗口(也就是说不是双击桌面浏览器图标等打开的窗口)除外。这类子窗口会共享父窗口的Cookie,因此会共享一个Session。

 

注意:新开的浏览器窗口会生成新的Session,但子窗口除外。子窗口会共用父窗口的Session。例如,在链接上右击,在弹出的快捷菜单中选择"在新窗口中打开"时,子窗口便可以访问父窗口的Session。

 

如果客户端浏览器将Cookie功能禁用,或者不支持Cookie怎么办?例如,绝大多数的手机浏览器都不支持Cookie。Java Web提供了另一种解决方案:URL地址重写。

  URL地址重写是对客户端不支持Cookie的解决方案。URL地址重写的原理是将该用户Session的id信息重写到URL地址中。服务器能够解析重写后的URL获取Session的id。这样即使客户端不支持Cookie,也可以使用Session来记录用户状态。HttpServletResponse类提供了encodeURL(String url)实现URL地址重写,该方法会自动判断客户端是否支持Cookie。如果客户端支持Cookie,会将URL原封不动地输出来。如果客户端不支持Cookie,则会将用户Session的id重写到URL中。

注意:TOMCAT判断客户端浏览器是否支持Cookie的依据是请求中是否含有Cookie。尽管客户端可能会支持Cookie,但是由于第一次请求时不会携带任何Cookie(因为并无任何Cookie可以携带),URL地址重写后的地址中仍然会带有jsessionid。当第二次访问时服务器已经在浏览器中写入Cookie了,因此URL地址重写后的地址中就不会带有jsessionid了

猜你喜欢

转载自blog.csdn.net/csdngaoqingrui/article/details/48495121