您的位置:首页 > Web前端 > JavaScript

jsp9大内置对象,及四大作用域

2015-09-16 16:16 399 查看
今天下午IT部部长,吴壮壮大神,带领我们IT部全体成员讲解了一下午,我们学习很多,以下是我们学习理解的重点:

九大内置对象:

1、out: javax.servlet.jsp.JspWriter类型,代表输出流的对象。作用域为page(页面执行期)

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


请求的细节(参数,属性,头标和数据)。

作用域为request(用户请求期)。

3、response:javax.servlet.ServletResponse的子类型,此对象封装了返回到HTTP客户端的输出,向页面作者提供设置响应头标和状态码的方式。

经常用来设置HTTP标题,添加cookie,设置响应内容的类型和状态,发送HTTP重定向和编码URL。作用域为page(页面执行期)。

4、pageContent:javax.servlet.jsp.PageContext(抽象类)类型,作用域为page(页面执行期)。

此对象提供所有四个作用域层次的属性查询和修改能力,它也提供了转发请求到其它资源和包含其他资源的方法

5、session:javax.servlet.http.HttpSession类型,主要用于跟踪对话。作用域session(会话期—)。
HttpSession是一个类似哈希表的与单一WEB浏览器会话相关的对象,它存在于HTTP请求之间,可以存储任何类型的命名对象。
如果不需要在请求之间跟踪会话对象,可以通过在page指令中指定session="false"

需要记住的是pageContext对象也可以与session.getAttribute(),session.setAttribute()一样的方式取得并设置会话属性。
6、application:javax.servlet.ServletContext类型,servlet的环境通过调用getServletConfig().getContext()方法获得。
作用域是application(整个程序运行期)。它提供了关于服务器版本,应用级初始化参数和应用内资源绝对路径,注册信息的方式
7、config:javax.servlet.ServletConfig,作用域为page(页面执行期)
8、exception:java.lang.Throwable,通过JSP错误页面中一个catch块已经益出但没有捕获的。
9、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

四个作用域:
大概流程是这样的,我们访问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就可以操作其他三个作用域中的变量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: