Hello JSP!——JSP内置对象分类及属性保存范围
2015-09-09 21:03
706 查看
一.JSP内置对象分类
在JSP2.0规范中一共定义了9种内置对象。这些对象可以不用进行显式的声明,而可以直接引用,不需要使用代码来创建其实例,而可以在程序中直接使用。JSP包含的9个内置对象及其对象类型、作用域如下表所示。
根据各对象的作用不同,可以将这9个对象分为如下4类。
第一类:与Servlet有关的内置对象。
包括page和config两个对象。
第二类:与Input/Output有关的内置对象。
包括out、request和response三个对象。
第三类:与Context有关的内置对象。
包括sesion、application、和pageContext三个对象。
第四类:与Error有关的内置对象。
仅包括exception这一个对象。
二.属性保存范围
在JSP中可以通过setAttribute()和getAttribute()这两个方法来设置和取得属性,从而实现数据的共享。同样,JSP中提供了4种属性保存范围,分别为page、request、session及application。
1.page范围
所谓page范围,就是指设置的属性只在当前页面有效。通过使用pageContext的setAttribute()方法来设置属性,并通过pageContext的getAttribute()方法来取得属性。
示例:PageScopeDemo.jsp
运行结果:
如果设置属性的范围为page,其他页面是无法取得page范围的属性的。
示例:PageScopeDemo2.jsp
运行结果:
2.request范围
所谓request范围,就是指属性在一次请求范围内有效。如果页面从一个页面跳转到另一个页面,那么该属性就失效了,这里所指的跳转是指客户端跳转,比如客户单机超链接跳转到其他页面,或者通过浏览器地址栏浏览其他网页。如果使用服务器端跳转<jsp:forward>,则该属性仍然有效。通过使用request的setAttribute()方法来设置属性,并通过request的getAttribute方法来取得属性。
下面是一个在跳转页面获得request范围属性的示例。
示例RequestScopeDemo.jsp
RequestScopeDemo2.jsp
运行结果:
如果使用客户端跳转,则无法获得request范围的属性,但是如果使用的是服务器端跳转,则仍然可以获得request范围属性。
示例:RequestScopeDemo.jsp
运行结果:
3.session范围
所谓session范围,也就是指客户浏览器与服务器一次会话范围内,如果和服务器断开链接,那么这个属性也就失效了。通过使用session的setAttribute()方法来设置属性,并通过session的getAttribute()方法来取得属性。
示例:SessionScopeDemo.jsp
SessionScopeDemo2.jsp
运行结果:
无论是客户端跳转还是服务器端跳转,都能够获得session范围的属性。但是如果重新打开浏览器,就不能获得session范围属性了,因为会话已经结束。
4.application范围
所谓application范围,也就是指在整个服务器范围,直到服务器停止以后才会失效。通过使用application的setAttribute()方法来设置属性,并通过application的getAttribute()方法来取得属性。
示例:ApplicationScopeDemo.jsp
ApplicationScopeDemo2.jsp
运行结果:
application范围保存的属性只要服务器不重启,就能够在任意页面中获得,就算是重新打开浏览器也是可以的。
5.移除属性
只需调用相应对象的removeAttribute()方法就可以移除指定属性。
示例:RemoveAttributeDemo.jsp
运行结果:
因为sex属性值被移除了,所以显示属性值为null,其他属性的属性值都能够正常显示。
在JSP2.0规范中一共定义了9种内置对象。这些对象可以不用进行显式的声明,而可以直接引用,不需要使用代码来创建其实例,而可以在程序中直接使用。JSP包含的9个内置对象及其对象类型、作用域如下表所示。
内置对象 | 类型 | 作用域 |
request | javax.servelt.HttpServletRequest | request |
response | javax.servelt.HttpServletResponse | response |
pageContext | javax.servelt.jsp.PageContext | page |
session | javax.servlet.http.HttpSession | session |
application | javax.servlet.jsp.ServletContext | application |
out | javax.servlet.jsp.JspWriter | page |
config | javax.servlet.ServletConfig | page |
page | java.lang.Object | page |
exception | java.lang.Throwable | page |
第一类:与Servlet有关的内置对象。
包括page和config两个对象。
第二类:与Input/Output有关的内置对象。
包括out、request和response三个对象。
第三类:与Context有关的内置对象。
包括sesion、application、和pageContext三个对象。
第四类:与Error有关的内置对象。
仅包括exception这一个对象。
二.属性保存范围
在JSP中可以通过setAttribute()和getAttribute()这两个方法来设置和取得属性,从而实现数据的共享。同样,JSP中提供了4种属性保存范围,分别为page、request、session及application。
1.page范围
所谓page范围,就是指设置的属性只在当前页面有效。通过使用pageContext的setAttribute()方法来设置属性,并通过pageContext的getAttribute()方法来取得属性。
示例:PageScopeDemo.jsp
<%@ page language="java" contentType="text/html; charset=gb2312"%> <html> <head> <title>page范围</title> </head> <body> <%-- 在page范围设置属性 --%> <% pageContext.setAttribute("name","James"); //设置属性name,其值为James %> <%-- 取得page范围属性 --%> <% String strName = (String)pageContext.getAttribute("name"); //取值属性name的值 out.println("page范围:name属性值为"+strName); //输出字符串strName的值 %> </body> </html>
运行结果:
如果设置属性的范围为page,其他页面是无法取得page范围的属性的。
示例:PageScopeDemo2.jsp
<%@ page language="java" contentType="text/html;charset=gb2312" %> <html> <head> <title>page范围</title> </head> <body> <%-- 取得page范围属性 --%> <% String strName = (String)pageContext.getAttribute("name"); out.println("page范围:name属性值为" + strName); %> </body> </html>
运行结果:
2.request范围
所谓request范围,就是指属性在一次请求范围内有效。如果页面从一个页面跳转到另一个页面,那么该属性就失效了,这里所指的跳转是指客户端跳转,比如客户单机超链接跳转到其他页面,或者通过浏览器地址栏浏览其他网页。如果使用服务器端跳转<jsp:forward>,则该属性仍然有效。通过使用request的setAttribute()方法来设置属性,并通过request的getAttribute方法来取得属性。
下面是一个在跳转页面获得request范围属性的示例。
示例RequestScopeDemo.jsp
<%@ page language="java" contentType="text/html; charset=gb2312"%> <html> <head> <title>request范围</title> </head> <body> <%-- 在request范围设置属性 --%> <% request.setAttribute("name","James"); //设置属性name,其值为James %> <a href="RequestScopeDemo2.jsp">跳转到RequestScopeDemo2.jsp </a> </body> </html>
RequestScopeDemo2.jsp
<%@ page language="java" contentType="text/html; charset=gb2312"%> <html> <head> <title>request范围</title> </head> <body> <%-- 在request范围设置属性 --%> <% String strName = (String) request.getAttribute("name"); //设置属性name,其值为James out.println("request范围:name属性值为" + strName); //s输出name属性值 %> </body> </html>
运行结果:
如果使用客户端跳转,则无法获得request范围的属性,但是如果使用的是服务器端跳转,则仍然可以获得request范围属性。
示例:RequestScopeDemo.jsp
<%@ page language="java" contentType="text/html; charset=gb2312"%> <html> <head> <title>request范围</title> </head> <body> <%-- 在request范围设置属性 --%> <% request.setAttribute("name","James"); //设置属性name,其值为James %> <%-- 使用forward动作指令执行跳转 --%> <jsp:forward page="RequestScopeDemo2.jsp"></jsp:forward> </body> </html>
运行结果:
3.session范围
所谓session范围,也就是指客户浏览器与服务器一次会话范围内,如果和服务器断开链接,那么这个属性也就失效了。通过使用session的setAttribute()方法来设置属性,并通过session的getAttribute()方法来取得属性。
示例:SessionScopeDemo.jsp
<%@ page language="java" contentType="text/html;charset=gb2312"%> <html> <head> <title>session范围</title> </head> <body> <%-- 在session范围设置属性 --%> <% session.setAttribute("name","James"); %> <%-- 添加页面链接,用来跳转到SessionScopeDemo2.jsp --%> <a href="SessionScopeDemo2.jsp">SessionScopeDemo2.jsp</a> </body> </html>
SessionScopeDemo2.jsp
<%@ page language="java" contentType="text/html;charset=gb2312"%> <html> <head> <title>session范围</title> </head> <body> <%-- 在session范围设置属性 --%> <% String strName = (String) session.getAttribute("name"); out.println("session范围:name属性值为" + strName); %> </body> </html>
运行结果:
无论是客户端跳转还是服务器端跳转,都能够获得session范围的属性。但是如果重新打开浏览器,就不能获得session范围属性了,因为会话已经结束。
4.application范围
所谓application范围,也就是指在整个服务器范围,直到服务器停止以后才会失效。通过使用application的setAttribute()方法来设置属性,并通过application的getAttribute()方法来取得属性。
示例:ApplicationScopeDemo.jsp
<%@ page language="java" contentType="text/html;charset=gb2312"%> <html> <head> <title>application范围</title> </head> <body> <%-- 在Application范围设置属性 --%> <% application.setAttribute("name","James"); %> <%-- 添加页面链接,用来跳转到ApplicationScopeDemo2.jsp --%> <a href="ApplicationScopeDemo2.jsp">ApplicationScopeDemo2.jsp</a> </body> </html>
ApplicationScopeDemo2.jsp
<%@ page language="java" contentType="text/html;charset=gb2312"%> <html> <head> <title>application范围</title> </head> <body> <%-- 在application范围设置属性 --%> <% String strName = (String) application.getAttribute("name"); out.println("application范围:name属性值为" + strName); %> </body> </html>
运行结果:
application范围保存的属性只要服务器不重启,就能够在任意页面中获得,就算是重新打开浏览器也是可以的。
5.移除属性
只需调用相应对象的removeAttribute()方法就可以移除指定属性。
示例:RemoveAttributeDemo.jsp
<%@ page language ="java" contentType="text/html;charset=gb2312"%> <html> <head> <title>移除属性</title> </head> <body> <%-- 在page范围设置属性 --%> <% pageContext.setAttribute("name","James"); //设置属性name,其值为James pageContext.setAttribute("age","12"); //设置属性age,其值为12 pageContext.setAttribute("sex","男"); //设置属性sex,其值为男 %> <%-- 移除属性 --%> <% pageContext.removeAttribute("sex"); %> <%-- 取得page范围属性 --%> <% String strName = (String)pageContext.getAttribute("name"); //取得属性name的值 String strAge = (String)pageContext.getAttribute("age"); //取得属性age的值 String strSex = (String)pageContext.getAttribute("sex"); //取得属性sex的值 out.println("page范围:name属性值为" + strName+ "<br>"); //输出字符串strName的值 out.println("page范围:age属性值为" + strAge + "<br>"); //输出字符串strAge的值 out.println("page范围:sex属性值为" + strSex+ "<br>"); //输出字符串strSex的值 %> </body> </html>
运行结果:
因为sex属性值被移除了,所以显示属性值为null,其他属性的属性值都能够正常显示。
相关文章推荐
- JSTL标签 参考手册
- BZOJ 1028: [JSOI2007]麻将 暴力
- boost property tree 解析Json ini
- extjs关于treePanel+chekBox全部选中以及清空选中问题探讨
- gulp打包seajs,用gulp-cmd-pack打包seajs模块
- jsp页面出现end tag "&lt;/c:forEach" is unbalanced
- A JavaScript Image Gallery
- Ext js学习笔记(二) 表格的创建
- Extjs 学习(一) 选择器
- JS实现动画
- extjs中treepanel例子
- JavaScript语言精粹 笔记06 方法
- JSP学习
- 关于JS 中的 substring() ;substr();slice();粗浅认识
- JavaScript并非“按值传递”
- javascript 初学小节 1
- C#Socket通信使用DataContractJsonSerializer传递对象
- js给所有a标签加个随机参数,防止页面缓存
- javascript操作注册表
- jsp include