Servlet的九⼤内置对象隐式对象说明
request转译后对应HttpServletRequest/ServletRequest对象
response转译后对应HttpServletRespons/ServletResponse对象
session转译后对应HttpSession对象
application转译后对应ServletContext对象
out转译后对应JspWriter对象,其内部关联⼀个PringWriter对象
page转译后对应this
config 转译后对应ServletConfig对象
exception 转译后对应Throwable对象,代表由其他JSP页⾯抛出的异常对象,只会出现于JSP错误页⾯(isErrorPage设置为true 的JSP页⾯)
pageContext转译后对应PageContext对象,它提供了JSP页⾯资源的封装,并可设置页⾯范围属性
Jsp隐含变量
1、out 来源于.io.Writer类,它⽤于发送输出流到客户端。
2、request 来源于javax.servlet.http.HttpServletRequest接⼝。它被关联到每⼀个HTTP请求。
3、response 来源于javax.servlet.http.HttpServletResponse。response对象⽤于把取得的数据返回到客户端。
4、pageContext 提供访问JSP页⾯的命名空间。它也提供⽤来访问其他的JSP隐含对象。
5、session 来源于javax.servlet.http.HttpSession。它⽤于存储客户端请求的信息,因此它是有状态交互式的。
6、application 来源于javax.servlet.ServletContext。
7、config 来源于ServletConfig,它包含了当前JSP/Servlet所在的WEB应⽤的配置信息。
8、page 来源于当前被访问JSP页⾯的实例化。它实际使⽤的是JSP转换成的Servlet。
9、exception ⽤于捕获JSP抛出的异常。它只有在JSP页⾯属性isErrorPage=true时才可⽤。
JSP九种内置对象:
⼀ request对象:
该对象封装了⽤户提交的信息,通过调⽤该对象相应的⽅法可以获取封装的信息, 即使⽤该对象可以获取⽤户提交信息。 客户端的请求参数都被封装到这个对象⾥⾯
⼆ response对象:
对客户的请求做出动态的响应,向客户端发送数据。
三 session对象
1.什么是session:session对象是⼀个JSP内置对象,它在第⼀个JSP页⾯被装载时⾃动创建,完成会话期管理。
从⼀个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为⼀个会话。当⼀个客户访问⼀个服务器时,可能会在这个服务器的⼏个页⾯之间反复连接,反复刷新⼀个页⾯,服务器应当通过某种办法知道这是同⼀个客户,这就需要session对象。2.session对象的ID:当⼀个客户⾸次访问服务器上的⼀个JSP页⾯时,JSP引擎产⽣⼀个session对象,同时分配⼀个String类型的ID 号,JSP引擎同时将这个ID号发送到客户端,存放在Cookie中,这样session对象和客户之间就建⽴了⼀⼀对应的关系。当客户再访问连接该服务器的其他页⾯时,不再分配给客户新的session对象,
直到客户关闭浏览器后,服务器端该客户的session对象才取消,并且和客户的会话对应关系消失。当客户重新打开浏览器再连接到该服务器时,服务器为该客户再创建⼀个新的session对象。
四 aplication对象
1.什么是application:
服务器启动后就产⽣了这个application对象,当客户在所访问的⽹站的各个页⾯之间浏览时,这个application对象都是同⼀个,直到服务器关闭。但是与session不同的是,所有客户的application对象都是同⼀个,即所有客户共享这个内置的application对象。2.application对象常⽤⽅法:
(1)public void setAttribute(String key,Object obj): 将参数Object指定的对象obj添加到application对象中,并为添加的对象指定⼀个索引关键字。
(2)public Object getAttribute(String key): 获取application对象中含有关键字的对象。
五 out对象
out 对象是⼀个输出流,⽤来向客户端输出数据。out对象⽤于各种数据的输出。
六 page .Object
对应this关键字。JSP⽹页本⾝
page对象是当前页⾯转换后的Servlet类的实例。从转换后的Servlet类的代码中,可以看到这种关系:
Object page = this;
在JSP页⾯中,很少使⽤page对象。
七 config
javax.servlet. ServletConfig 的实例,该实例代表该JSP 的配置信息。常⽤的⽅法有getInitPararneter(String paramNarne) 及getInitPararneternarnes() 等⽅法。事实上, JSP 页⾯通常⽆须配置,也就不存在配置信息。因此,该对象更多地在Servlet 中有效。
⼋ exception .Throwable 的实例
该实例代表其他页⾯中的异常和错误。只有当页⾯是错误处理页⾯,即编译指令page 的isErrorPage 属性为true 时,该对象才可以使⽤。常⽤的⽅法有getMessageO和printStackTraceO等。
九 pageContext
javax.servlet.jsp.PageContext 的实例,对象直译时可以称作“页⾯上下⽂”对象,代表的是当前页⾯运⾏的⼀些属性,通过此对象可以拿到其他8⼤对象,使⽤该对象可以访问页⾯中的共享数据。常⽤的⽅法有getServletContextO和getServletConfigO等。
//使⽤pageContext 设置属性,该属性默认在page 范围内
pageContext. setAttribute ("page" , "hello") ;
//使⽤request 设置属性,该属性默认在request 范围内
request. setAttribute ("request" , "hello");
//使⽤pageContext将属性设置在request 范围中
pageContext.setAttribute("request2" , "hello" , pageContext.REQUEST_SCOPE);
// 使⽤session将属性设置在session 范围中
session.setAttribute("session" , "hello"l;
//使⽤pageContext将属性设置在session范围中
pageContext.setAttribute("session2" , "hello" , pageContext.SESSION_SCOPE);
//使⽤application将属性设置在application范围中
application. setAttribute ("app" , "hello") ;
//使⽤pageContext 将属性设置在application 范围中
pageContext.setAttribute("app2" , "hello" , pageContext.APPL ⼯CATION_SCOPE) ;
四个作⽤域:request域 session域 application域 page域
application:
全局作⽤范围,整个应⽤程序共享,就是在部署⽂件中的同⼀个webApp共享,⽣命周期为:应⽤程序启动到停⽌。
session:
会话作⽤域,当⽤户⾸次访问时,产⽣⼀个新的会话,以后服务器就可以记住这个会话状态。⽣命周期:会话超时,或者服务器端强制使会话失效。
request:
请求作⽤域,就是客户端的⼀次请求。
:
⼀个JSP页⾯。
以上作⽤范围使越来越⼩, request和page的⽣命周期都是短暂的,他们之间的区别就是:⼀个request可以包含多个page页(include,forward以及filter)。
从显⽰的结果来看,我们可以直观的得出结论:
page⾥的变量没法从index.jsp传递到test.jsp。只要页⾯跳转了,它们就不见了。
request⾥的变量可以跨越forward前后的两页。但是只要刷新页⾯,它们就重新计算了。
session和application的区别 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) Attribute("countPage");
if (countPage == null) {
pageContext.setAttribute("countPage", 1);
} else {
pageContext.setAttribute("countPage", countPage + 1);
}
这⾥先从pageContext中取出名为countPage的整数,因为返回的都是.lang.Object类型,所以需要强制转换成我们需要的整形。这⾥取得的变量如果不存在就会返回null,通过判断countPage == null来辨别变量是否存在,如果不存在就设置为1,如果存在就进⾏累加,最后使⽤setAttribute()⽅法将修改后的变量值放⼊pageContext。将其中的pageContext换成request, session, application就可以操作其他三个作⽤域中的变量。
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
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论