??xml version="1.0" encoding="utf-8" standalone="yes"?>
九大对象Q?/p>
内置对象Q又叫隐含对象,?个内|对象):不需要预先声明就可以在脚本代码和表达式中随意使用
1-out:
javax.servlet.jsp.JspWritercdQ代表输出流的对象。作用域为pageQ页面执行期Q?/p>
requestQjavax.servlet.ServletRequest的子cdQ此对象装了由WEB览器或其它客户端生成地HTTP
h的细节(参数Q属性,头标和数据)。作用域为request(用户h期)?br />Ҏ由可查看API
responseQjavax.servlet.ServletResponse的子cdQ此对象装了返回到HTTP客户端的输出Q向面
作者提供设|响应头标和状态码的方式。经常用来设|HTTP标题Q添加cookieQ设|响应内容的cd和状
态,发送HTTP重定向和~码URL。作用域为pageQ页面执行期Q?/p>
pageContextQjavax.servlet.jsp.PageContextQ抽象类Q类型,作用域ؓpageQ页面执行期Q。此对象
提供所有四个作用域层次的属性查询和修改能力Q它也提供了转发h到其它资源和包含其他资源的方?/p>
Q?br />该对象的Ҏ都是抽象Ҏ
sessionQjavax.servlet.http.HttpSessioncdQ主要用于跟t对话。作用域session(会话?#8212;Q?/p>
HttpSession是一个类似哈希表的与单一WEB览器会话相关的对象Q它存在于HTTPh之间Q可以存储Q
何类型的命名对象?br />如果不需要在h之间跟踪会话对象Q可以通过在page指o中指定session="false"
需要记住的是pageContext对象也可以与session.getAttribute(),session.setAttribute()一L方式?/p>
得ƈ讄会话属性?/p>
applicationQjavax.servlet.ServletContextcdQservlet的环境通过调用getServletConfig
().getContext()Ҏ获得。作用域是application(整个E序q行期)。它提供了关于服务器版本Q应?/p>
U初始化参数和应用内资源l对路径Q注册信息的方式
configQjavax.servlet.ServletConfig,作用域ؓpageQ页面执行期Q?/p>
exception:java.lang.Throwable,通过JSP错误面中一个catch块已l益Z没有捕获?/p>
java.lang.Throwable的Q意实例,传向了errorPage的URI。作用域为pageQ页面执行期Q。注?/p>
exception只有在page指o中具有属性isErrorPage="true"时才有效?/p>
page:java.lang.ObjectcdQ指向页面自w的方式。作用域为pageQ页面执行期
JSP中九大内|对象ؓQ?
request h对象 cd javax.servlet.ServletRequest 作用?Request
response 响应对象 cd javax.servlet.SrvletResponse 作用?nbsp; Page
pageContext 面上下文对?nbsp; cd javax.servlet.jsp.PageContext 作用?nbsp; Page
session 会话对象 cd javax.servlet.http.HttpSession 作用?nbsp; Session
application 应用E序对象 cd javax.servlet.ServletContext 作用?nbsp; Application
out 输出对象 cd javax.servlet.jsp.JspWriter 作用?nbsp; Page
config 配置对象 cd javax.servlet.ServletConfig 作用?nbsp; Page
page 面对象 cd javax.lang.Object 作用?nbsp; Page
exception 例外对象 cd javax.lang.Throwable 作用?nbsp; page
request 对象代表的是来自客户端的hQ例如我们在FORM表单中填写的信息{,是最常用的对?/p>
常用的方法有QgetParameter、getParameterNames 和getParameterValues 通过调用q几个方法来获取h对象中所包含的参数的倹{?/p>
response 对象代表的是对客L的响应,也就是说可以通过response 对象来组l发送到客户端的数据。但是由于组l方式比较底层,所以不普通读者用,需要向客户端发送文字时直接使用
pageContext 对象直译时可以称?#8220;面上下?#8221;对象Q代表的是当前页面运行的一些属?/p>
常用的方法有 QfindAttribute、getAttribute、getAttributesScope 和getAttributeNamesInScope
一般情况下pageContext对象用到得也不是很多Q只有在目所面的情冉|较复杂的情况下,才会利用到页面属性来辅助处理?/p>
session 对象代表服务器与客户端所建立的会话,当需要在不同的JSP面中保留客户信息的情况下用,比如在线购物、客戯q跟t等?#8220;session” 对象建立在cookie的基上,所以用时应注意判断一下客L是否打开了cookie。常用的Ҏ包括getId?getValue?getValueNames和putValue{?
概要
HTTP是无状态(statelessQ协议;
Web Server Ҏ一个客Lh都没有历史记忆;
Session用来保存客户端状态信息;
由Web Server 写入Q?br />存于客户端;
客户端的每次讉K都把上次的session记录传递给Web ServerQ?br />Web Serverd客户端提交的session来获取客L的状态信?/p>
application 对象负责提供应用E序在服务器中运行时的一些全局信息Q常用的Ҏ有getMimeType和getRealPath{?/p>
out 对象代表了向客户端发送数据的对象Q与“response” 对象不同Q通过“out” 对象发送的内容是览器需要显C的内容Q是文本一U的Q可以通过“out” 对象直接向客L写一个由E序动态生成HTML文g。常用的Ҏ除了pirnt和println之外Q还包括clear、clearBuffer、flush、getBufferSize和getRemainingQ这是因?#8220;out” 对象内部包含了一个缓冲区Q所以需要一些对~冲行操作的Ҏ
“config” 对象提供一些配|信息,常用的方法有getInitParameter和getInitParameterNamesQ以获得Servlet初始化时的参数?/p>
“page” 对象代表了正在运行的由JSP文g产生的类对象Q不一般读者用?/p>
“exception” 对象则代表了JSP文gq行时所产生的例外对象,此对象不能在一般JSP文g中直接用,而只能在使用?#8220;<%@ page isErrorPage="true "%>”的JSP文g中?
四个作用域:
何ؓ作用?
先让我们看看效果Q?/p>
大概程是这LQ我们访?4-01/index.jsp的时候,分别对pageContext, request, session,
application四个作用域中的变量进行篏加。(当然先判断这个变量是不是存在Q如果变量不存在Q则?/p>
把变量初始化?。)计算完成后就从index.jsp执行forward跌{到test.jsp。在test.jsp里再q行一?/p>
累加Q然后显C出q四个整数来?/p>
从显C的l果来看Q我们可以直观的得出l论Q?/p>
page里的变量没法从index.jsp传递到test.jsp。只要页面蟩转了Q它们就不见了?/p>
request里的变量可以跨越forward前后的两c但是只要刷新页面,它们重新计了?/p>
session和application里的变量一直在累加Q开始还看不出区别,只要关闭览器,再次重启览器访?/p>
q页Qsession里的变量重新计了?/p>
application里的变量一直在累加Q除非你重启tomcatQ否则它会一直变大?/p>
而作用域规定的是变量的有效期限?/p>
如果把变量放到pageContext里,p明它的作用域是pageQ它的有效范围只在当前jsp面里?/p>
从把变量攑ֈpageContext开始,到jsp面l束Q你都可以用这个变量?/p>
如果把变量放到request里,p明它的作用域是requestQ它的有效范围是当前h周期?/p>
所谓请求周期,是指从httph发vQ到服务器处理结束,q回响应的整个过E。在q个q程中可能
用forward的方式蟩转了多个jsp面Q在q些面里你都可以用这个变量?/p>
如果把变量放到session里,p明它的作用域是sessionQ它的有效范围是当前会话?/p>
所谓当前会话,是指从用户打开览器开始,到用户关闭浏览器q中间的q程。这个过E可能包含多?/p>
h响应。也是_只要用户不关览器,服务器就有办法知道这些请求是一个h发v的,整个q程?/p>
UCؓ一个会话(sessionQ,而放C话中的变量,可以在当前会话的所有请求里使用?/p>
如果把变量放到application里,p明它的作用域是applicationQ它的有效范围是整个应用?/p>
整个应用是指从应用启动,到应用结束。我们没有说“从服务器启动Q到服务器关?#8221;Q是因ؓ一个服?/p>
器可能部|多个应用,当然你关闭了服务器,׃把上面所有的应用都关闭了?/p>
application作用域里的变量,它们的存zL间是最长的Q如果不q行手工删除Q它们就一直可以用?/p>
与上qC个不同的是,application里的变量可以被所有用户共用。如果用L的操作修改了application
中的变量Q用户乙讉K时得到的是修改后的倹{这在其他scope中都是不会发生的Qpage, request,
session都是完全隔离的,无论如何修改都不会媄响其他h的数据?/p>
我们使用public Object getAttribute(String name)获得变量|使用public void setAttribute
(String name, Object value)变量g存到对应作用域中。D个pageContext的例子就是:
// page
Integer countPage = (Integer) pageContext.getAttribute("countPage");
if (countPage == null) {
pageContext.setAttribute("countPage", 1);
} else {
pageContext.setAttribute("countPage", countPage + 1);
}
q里先从pageContext中取出名为countPage的整敎ͼ因ؓq回的都是java.lang.ObjectcdQ所以需要强
制{换成我们需要的整Ş。这里取得的变量如果不存在就会返回nullQ通过判断countPage == null来L
别变量是否存在,如果不存在就讄?Q如果存在就q行累加Q最后用setAttribute()Ҏ修改后
的变量值放入pageContext?/p>
其中的pageContext换成request, session, application可以操作其他三个作用域中的变量?br />