JSP九大内置对象和四种属性范围解读.docx
- 文档编号:4347714
- 上传时间:2022-11-30
- 格式:DOCX
- 页数:30
- 大小:26.08KB
JSP九大内置对象和四种属性范围解读.docx
《JSP九大内置对象和四种属性范围解读.docx》由会员分享,可在线阅读,更多相关《JSP九大内置对象和四种属性范围解读.docx(30页珍藏版)》请在冰豆网上搜索。
JSP九大内置对象和四种属性范围解读
JSP九大内置对象和四种属性范围解读
一、四种属性范围
1.1、在JSP中提供了四种属性保存范围
page:
在一个页面内保存属性,跳转之后无效
request:
在一次服务请求范围内,服务器跳转后依然有效
session:
-在一次会话范围内,无论何种跳转都可以使用,但是新开浏览器无法使用
application:
在整个服务器上保存,所有用户都可以使用
1.2、4种属性范围都支持的操作
[java]viewplaincopy
publicvoidsetAttribute(Stringname,Objectvalue)
publicObjectgetAttribute(Stringname)
publicObjectremoveAttribute(Stringname)
下面,我们来对四种范围来分别进行详细的介绍
1.3、page范围
在JSP中设置一个页的属性范围,必须通过pageContext完成,PageContext属性范围是最重要的JSP属性之一,但是如果使用纯粹的JSP代码开发,此属性显示不出用处,其发挥作用在Struts,WebWork中
如下:
[html]viewplaincopy
<%@pageimport="java.util.*"%>
<%@pagelanguage="java"contentType="text/html;charset=UTF-8"
pageEncoding="UTF-8"%>
DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http:
//www.w3.org/TR/html4/loose.dtd">
<%
//设置page属性范围,此属性只在当前JSP页面内起作用
pageContext.setAttribute("name","linbingwen");
pageContext.setAttribute("time",newDate());
%>
姓名:
${pageScope.name}
时间:
${pageScope.time}
${pageScope.name}这里用了EL表达式来取得值,输出结果如下,
这里要注意发果在其它页面使用:
如下:
[html]viewplaincopy
<%@pageimport="java.util.*"%>
<%@pagelanguage="java"contentType="text/html;charset=UTF-8"
pageEncoding="UTF-8"%>
DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http:
//www.w3.org/TR/html4/loose.dtd">
姓名:
${pageScope.name}
时间:
${pageScope.time}
输出结果:
这说明page范围的值只能在本页使用!
1.4、request属性范围
request将属性保存在一次请求范围之内:
前提:
必须使用服务器端跳转:
forward/>应用点: MVC设计模式、Struts、Webwork 应用实例 首先是设置request: request.jsp [html]viewplaincopy <%@pageimport="java.util.*"%> <%@pagelanguage="java"contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%> DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http: //www.w3.org/TR/html4/loose.dtd">
<%
//设置request属性范围
request.setAttribute("name","linbingwen");
request.setAttribute("time",newDate());
%>
forwardpage="requestResult.jsp"/> 然后是显示requestResult.jsp [html]viewplaincopy <%@pageimport="java.util.*"%> <%@pagelanguage="java"contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%> DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http: //www.w3.org/TR/html4/loose.dtd">
获取request姓名:
${requestScope.name}
获取request时间:
${requestScope.time}
访问结果:
这时比如requestResult1.jsp也想来访问这两个属性
内容和requestResult.jsp一样:
[html]viewplaincopy
<%@pageimport="java.util.*"%>
<%@pagelanguage="java"contentType="text/html;charset=UTF-8"
pageEncoding="UTF-8"%>
DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http:
//www.w3.org/TR/html4/loose.dtd">
获取request姓名:
${requestScope.name}
获取request时间:
${requestScope.time}
结果如下,说明request只针对服务器跳转有效,在两次跳转之间保存。
1.5、session属性范围
session:
只要设置上去,则不管是什么跳转,都可以取得属性,主要用于验证用户是否登陆。
EMAIL--->用户需要先进行登陆,登陆成功后再编辑邮件。
与session有关的任何打开的页面都可以取得session
比如session.jsp设置如下:
[html]viewplaincopy
<%@pageimport="java.util.*"%>
<%@pagelanguage="java"contentType="text/html;charset=UTF-8"
pageEncoding="UTF-8"%>
DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http:
//www.w3.org/TR/html4/loose.dtd">
<%
//设置session属性范围
session.setAttribute("name","linbingwen");
session.setAttribute("time",newDate());
%>
然后是取出sesson的值sessionResult.jsp
[html]viewplaincopy
<%@pageimport="java.util.*"%>
<%@pagelanguage="java"contentType="text/html;charset=UTF-8"
pageEncoding="UTF-8"%>
DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http:
//www.w3.org/TR/html4/loose.dtd">
获取session姓名:
${sessionScope.name}
获取session时间:
${sessionScope.time}
输出结果:
如果还有一个sessionResult1.jsp和sessionResult.jsp一样如下
[html]viewplaincopy
<%@pageimport="java.util.*"%>
<%@pagelanguage="java"contentType="text/html;charset=UTF-8"
pageEncoding="UTF-8"%>
DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http:
//www.w3.org/TR/html4/loose.dtd">
<%
//设置request属性范围
session.setAttribute("name","linbingwen");
session.setAttribute("time",newDate());
%>
然后是取出sesson的值sessionResult.jsp
<%@pageimport="java.util.*"%>
<%@pagelanguage="java"contentType="text/html;charset=UTF-8"
pageEncoding="UTF-8"%>
DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http:
//www.w3.org/TR/html4/loose.dtd">
获取session姓名:
${sessionScope.name}
获取session时间:
${sessionScope.time}
注意看上面的GIF动画和这里的获取到的时间是一样的,这也说明了这两个jsp页面取得了同一个值
1.6、application属性范围
只要设置一次,则所有的页面窗口都可以取得数据。
这里的值将会保存在服务器上,所以每一个用户都可以看见。
如下面application.jsp:
[html]viewplaincopy
<%@pageimport="java.util.*"%>
<%@pagelanguage="java"contentType="text/html;charset=UTF-8"
pageEncoding="UTF-8"%>
DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http:
//www.w3.org/TR/html4/loose.dtd">
<%
//设置request属性范围
application.setAttribute("name","linbingwen");
application.setAttribute("time",newDate());
%>
然后是applicationResult.jsp
[html]viewplaincopy
<%@pageimport="java.util.*"%>
<%@pagelanguage="java"contentType="text/html;charset=UTF-8"
pageEncoding="UTF-8"%>
DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http:
//www.w3.org/TR/html4/loose.dtd">
获取application姓名:
${applicationScope.name}
获取application时间:
${applicationScope.time}
输出结果:
如果这时在新建一个网页或新建一个新的web项目,但是它们两个要运行在同一个Tomcat中,那么它同样也能访问到这个值。
注意:
pplication、session、request--==--》都与要跨多个页,属性保存是有内存开销的,设置过多的application或每一个session保存过多的对象,性能就降低了。
原则:
能用request就不要用session,能用session就不要用application
application应用:
在线人员统计、在线人员名单列表,要释放application资源,只能重新启动服务器.
使用application缓存数据库的连接,每次使用时,从缓冲中取出,用完就返回。
二、JSP九大内置对象详解
内置对象(又叫隐含对象,有9个内置对象):
不需要预先声明就可以在脚本代码和表达式中随意使用
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
JSP中一共预先定义了9个这样的对象,分别为:
request、response、session、application、out、pagecontext、config、page、exception
2.1、request对象
request对象是javax.servlet.httpServletRequest类型的对象。
该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。
(包括头信息、系统信息、请求方式以及请求参数等)。
request对象的作用域为一次请求。
实现常有的方法
1、获取数据
[java]viewplaincopy
getParameter;;接收请求参数的,
2、对所有数据进行再编码
[java]viewplaincopy
publicbyte[]getBytes(“encoding”)
如下实例将byte数组编码转换
[html]viewplaincopy
<%@pagecontentType="text/html";charset=gbk"%>
<%
//接收内容
Stringname=request.getParameter("uname");
byte[]b=name.getBytes("ISO8859-1");
name=newString(b);
Stringname=newString(request.getParameter("uname").getBytes("ISO8859-1"));
%>
输入内容为:
<%=name%>
3、设置统一的请求编码
[java]viewplaincopy
publicvoidsetCharacterEncoding(Stringenv)throwsUnsunpportedEncodingException
如下设置
[html]viewplaincopy
<%@pagecontentType="text/html";charset=gbk"%>
<%
//接收内容
request.setCharacterEncoding("GBK");
Stringname=request.getParameter("uname");
%>
输入内容为:
<%=name%>
4、获取requst信息:
[html]viewplaincopy
<%@pagelanguage="java"contentType="text/html;charset=UTF-8"
pageEncoding="UTF-8"%>
DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http:
//www.w3.org/TR/html4/loose.dtd">
请求方式:
<%=request.getMethod()%>
请求的资源:
<%=request.getRequestURI()%>
请求用的协议:
<%=request.getProtocol()%>
请求的文件名:
<%=request.getServletPath()%>
请求的服务器的IP:
<%=request.getServerName()%>
请求服务器的端口:
<%=request.getServerPort()%>
客户
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JSP 内置 对象 种属 范围 解读