JSP九大内置对象及四个做用域

九大对象:java

内置对象(又叫隐含对象,有9个内置对象):不须要预先声明就能够在脚本代码和表达式中随意使用浏览器

1-out:tomcat

 javax.servlet.jsp.JspWriter类型,表明输出流的对象。做用域为page(页面执行期)服务器

request:javax.servlet.ServletRequest的子类型,此对象封装了由WEB浏览器或其它客户端生成地HTTPcookie

请求的细节(参数,属性,头标和数据)。做用域为request(用户请求期)。
方法由可查看APIsession

response:javax.servlet.ServletResponse的子类型,此对象封装了返回到HTTP客户端的输出,向页面app

做者提供设置响应头标和状态码的方式。常常用来设置HTTP标题,添加cookie,设置响应内容的类型和状less

态,发送HTTP重定向和编码URL。做用域为page(页面执行期)。jsp


pageContext:javax.servlet.jsp.PageContext(抽象类)类型,做用域为page(页面执行期)。此对象编码

提供全部四个做用域层次的属性查询和修改能力,它也提供了转发请求到其它资源和包含其余资源的方法


该对象的方法都是抽象方法

session:javax.servlet.http.HttpSession类型,主要用于跟踪对话。做用域session(会话期—)。

HttpSession是一个相似哈希表的与单一WEB浏览器会话相关的对象,它存在于HTTP请求之间,能够存储任

何类型的命名对象。
若是不须要在请求之间跟踪会话对象,能够经过在page指令中指定session="false"
须要记住的是pageContext对象也能够与session.getAttribute(),session.setAttribute()同样的方式取

得并设置会话属性。

application:javax.servlet.ServletContext类型,servlet的环境经过调用getServletConfig

().getContext()方法得到。做用域是application(整个程序运行期)。它提供了关于服务器版本,应用

级初始化参数和应用内资源绝对路径,注册信息的方式


config:javax.servlet.ServletConfig,做用域为page(页面执行期)

exception:java.lang.Throwable,经过JSP错误页面中一个catch块已经益出但没有捕获的

java.lang.Throwable的任意实例,传向了errorPage的URI。做用域为page(页面执行期)。注意

exception只有在page指令中具备属性isErrorPage="true"时才有效。

page:java.lang.Object类型,指向页面自身的方式。做用域为page(页面执行期

 

JSP中九大内置对象为:
request            请求对象                 类型 javax.servlet.ServletRequest        做用域 Request
response          响应对象                   类型 javax.servlet.SrvletResponse       做用域  Page
pageContext    页面上下文对象       类型 javax.servlet.jsp.PageContext      做用域    Page
session            会话对象                   类型 javax.servlet.http.HttpSession       做用域    Session
application       应用程序对象          类型 javax.servlet.ServletContext          做用域    Application
out                   输出对象                   类型 javax.servlet.jsp.JspWriter             做用域    Page
config              配置对象                  类型 javax.servlet.ServletConfig            做用域    Page
page               页面对象                  类型 javax.lang.Object                            做用域    Page
exception        例外对象                 类型 javax.lang.Throwable                     做用域    page

request 对象表明的是来自客户端的请求,例如咱们在FORM表单中填写的信息等,是最经常使用的对象

经常使用的方法有:getParameter、getParameterNames 和getParameterValues 经过调用这几个方法来获取请求对象中所包含的参数的值。

response 对象表明的是对客户端的响应,也就是说能够经过response 对象来组织发送到客户端的数据。可是因为组织方式比较底层,因此不建议普通读者使用,须要向客户端发送文字时直接使用

pageContext 对象直译时能够称做“页面上下文”对象,表明的是当前页面运行的一些属性

经常使用的方法有 :findAttribute、getAttribute、getAttributesScope 和getAttributeNamesInScope
通常状况下pageContext对象用到得也不是不少,只有在项目所面临的状况比较复杂的状况下,才会利用到页面属性来辅助处理。

session    对象表明服务器与客户端所创建的会话,当须要在不一样的JSP页面中保留客户信息的状况下使用,好比在线购物、客户轨迹跟踪等。“session” 对象创建在cookie的基础上,因此使用时应注意判断一下客户端是否打开了cookie。经常使用的方法包括getId、 getValue、 getValueNames和putValue等。

概要
HTTP是无状态(stateless)协议;
Web Server 对每个客户端请求都没有历史记忆;
Session用来保存客户端状态信息;
由Web Server 写入;
存于客户端;
客户端的每次访问都把上次的session记录传递给Web Server;
Web Server读取客户端提交的session来获取客户端的状态信息

application 对象负责提供应用程序在服务器中运行时的一些全局信息,经常使用的方法有getMimeType和getRealPath等。

out 对象表明了向客户端发送数据的对象,与“response” 对象不一样,经过“out” 对象发送的内容将是浏览器须要显示的内容,是文本一级的,能够经过“out” 对象直接向客户端写一个由程序动态生成HTML文件。经常使用的方法除了pirnt和println以外,还包括clear、clearBuffer、flush、getBufferSize和getRemaining,这是由于“out” 对象内部包含了一个缓冲区,因此须要一些对缓冲区进行操做的方法

“config” 对象提供一些配置信息,经常使用的方法有getInitParameter和getInitParameterNames,以得到Servlet初始化时的参数。

“page” 对象表明了正在运行的由JSP文件产生的类对象,不建议通常读者使用。

“exception” 对象则表明了JSP文件运行时所产生的例外对象,此对象不能在通常JSP文件中直接使用,而只能在使用了“<%@ page isErrorPage="true "%>”的JSP文件中使用


 


四个做用域:

何为做用域
先让咱们看看效果:


大概流程是这样的,咱们访问04-01/index.jsp的时候,分别对pageContext, request, session,

application四个做用域中的变量进行累加。(固然先判断这个变量是否是存在,若是变量不存在,则要

把变量初始化成1。)计算完成后就从index.jsp执行forward跳转到test.jsp。在test.jsp里再进行一次

累加,而后显示出这四个整数来。

从显示的结果来看,咱们能够直观的得出结论:

page里的变量无法从index.jsp传递到test.jsp。只要页面跳转了,它们就不见了。

request里的变量能够跨越forward先后的两页。可是只要刷新页面,它们就从新计算了。

session和application里的变量一直在累加,开始还看不出区别,只要关闭浏览器,再次重启浏览器访问

这页,session里的变量就从新计算了。

application里的变量一直在累加,除非你重启tomcat,不然它会一直变大。

而做用域规定的是变量的有效期限。

若是把变量放到pageContext里,就说明它的做用域是page,它的有效范围只在当前jsp页面里。

从把变量放到pageContext开始,到jsp页面结束,你均可以使用这个变量。

若是把变量放到request里,就说明它的做用域是request,它的有效范围是当前请求周期。

所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。在这个过程当中可能使

用forward的方式跳转了多个jsp页面,在这些页面里你均可以使用这个变量。

若是把变量放到session里,就说明它的做用域是session,它的有效范围是当前会话。

所谓当前会话,就是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。这个过程可能包含多个

请求响应。也就是说,只要用户不关浏览器,服务器就有办法知道这些请求是一我的发起的,整个过程被

称为一个会话(session),而放到会话中的变量,就能够在当前会话的全部请求里使用。

若是把变量放到application里,就说明它的做用域是application,它的有效范围是整个应用。

整个应用是指从应用启动,到应用结束。咱们没有说“从服务器启动,到服务器关闭”,是由于一个服务

器可能部署多个应用,固然你关闭了服务器,就会把上面全部的应用都关闭了。

application做用域里的变量,它们的存活时间是最长的,若是不进行手工删除,它们就一直可使用。

与上述三个不一样的是,application里的变量能够被全部用户共用。若是用户甲的操做修改了application

中的变量,用户乙访问时获得的是修改后的值。这在其余scope中都是不会发生的,page, request,

session都是彻底隔离的,不管如何修改都不会影响其余人的数据。

咱们使用public Object getAttribute(String name)得到变量值,使用public void setAttribute

(String name, Object value)将变量值保存到对应做用域中。举个pageContext的例子就是:

// page
Integer countPage = (Integer) pageContext.getAttribute("countPage");
if (countPage == null) {
    pageContext.setAttribute("countPage", 1);
} else {
    pageContext.setAttribute("countPage", countPage + 1);
}
这里先从pageContext中取出名为countPage的整数,由于返回的都是java.lang.Object类型,因此须要强

制转换成咱们须要的整形。这里取得的变量若是不存在就会返回null,经过判断countPage == null来辨

别变量是否存在,若是不存在就设置为1,若是存在就进行累加,最后使用setAttribute()方法将修改后

的变量值放入pageContext。

将其中的pageContext换成request, session, application就能够操做其余三个做用域中的变量。

相关文章
相关标签/搜索