JSP九大内置对象和四种属性范围解读_第1页
JSP九大内置对象和四种属性范围解读_第2页
JSP九大内置对象和四种属性范围解读_第3页
JSP九大内置对象和四种属性范围解读_第4页
JSP九大内置对象和四种属性范围解读_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、JSP九大内置对象和四种属性范围解读一、四种属性范围1.1、在JSP中提供了四种属性保存范围page:在一个页面内保存属性,跳转之后无效request:在一次服务请求范围内,服务器跳转后依然有效session:-在一次会话范围内,无论何种跳转都可以使用,但是新开浏览器无法使用application:在整个服务器上保存,所有用户都可以使用1.2、4种属性范围都支持的操作java view plain copypublic void setAttribute(String name,Object value) public Object getAttribute(String name) publ

2、ic Object removeAttribute(String name) 下面,我们来对四种范围来分别进行详细的介绍1.3、page范围在JSP中设置一个页的属性范围,必须通过pageContext完成,PageContext属性范围是最重要的JSP属性之一,但是如果使用纯粹的JSP代码开发,此属性显示不出用处,其发挥作用在 Struts ,WebWork 中如下:html view plain copy<%page import="java.util.*"%> <% page language="java" contentType

3、="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; chars

4、et=UTF-8"> <title>Insert title here</title> </head> <body> <% /设置page属性范围,此属性只在当前JSP页面内起作用 pageContext.setAttribute("name", "linbingwen"); pageContext.setAttribute("time", new Date(); %> 姓名:$pageS<br> 时间:$pageScope.ti

5、me<br> </body> </html> $pageS这里用了EL表达式来取得值,输出结果如下,这里要注意发果在其它页面使用:如下:html view plain copy<%page import="java.util.*"%> <% page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html

6、 PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body>

7、姓名:$pageS<br> 时间:$pageScope.time<br> </body> </html> 输出结果:这说明page范围的值只能在本页使用!1.4、request属性范围request将属性保存在一次请求范围之内:前提:必须使用服务器端跳转:<jsp:forward/> 应用点:MVC设计模式、Struts、 Webwork应用实例首先是设置request:request.jsphtml view plain copy<%page import="java.util.*"%&g

8、t; <% page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "/TR/html4/loose.dtd"> <html> <head> <meta http-equiv=&quo

9、t;Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% /设置request属性范围 request.setAttribute("name", "linbingwen"); request.setAttribute("time", new Date(); %> <jsp:forward

10、page="requestResult.jsp"/> </body> </html> 然后是显示requestResult.jsphtml view plain copy<%page import="java.util.*"%> <% page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBL

11、IC "-/W3C/DTD HTML 4.01 Transitional/EN" "/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> 获取req

12、uest姓名:$requestS<br> 获取request时间:$requestScope.time<br> </body> </html> 访问结果:这时比如requestResult1.jsp也想来访问这两个属性内容和requestResult.jsp一样:html view plain copy<%page import="java.util.*"%> <% page language="java" contentType="text/html; cha

13、rset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> &l

14、t;title>Insert title here</title> </head> <body> 获取request姓名:$requestS<br> 获取request时间:$requestScope.time<br> </body> </html> 结果如下,说明request只针对服务器跳转有效,在两次跳转之间保存。1.5、session属性范围session:只要设置上去,则不管是什么跳转,都可以取得属性,主要用于验证用户是否登陆。EMAIL->用户需要先进行登陆,登陆成功后

15、再编辑邮件。与session有关的任何打开的页面都可以取得session比如session.jsp设置如下:html view plain copy<%page import="java.util.*"%> <% page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-/W3C/DTD HTML 4.01 Transit

16、ional/EN" "/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% /设置session属性范围 session.setAttribute

17、("name", "linbingwen"); session.setAttribute("time", new Date(); %> <a href="sessionResult.jsp">获取session内容</a> </body> </html> 然后是取出sesson的值sessionResult.jsphtml view plain copy<%page import="java.util.*"%> <% pag

18、e language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Ty

19、pe" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> 获取session姓名:$sessionS<br> 获取session时间:$sessionScope.time<br> </body> </html> 输出结果:如果还有一个sessionResult1.jsp和sessionResult.jsp一样如下html view

20、 plain copy<%page import="java.util.*"%> <% page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "/TR/html4/loose.dtd"&

21、gt; <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% /设置request属性范围 session.setAttribute("name", "linbingwen"); session.setAttribut

22、e("time", new Date(); %> <a href="sessionResult.jsp">获取session内容</a> </body> </html> 然后是取出sesson的值sessionResult.jsp <%page import="java.util.*"%> <% page language="java" contentType="text/html; charset=UTF-8" pageE

23、ncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert titl

24、e here</title> </head> <body> 获取session姓名:$sessionS<br> 获取session时间:$sessionScope.time<br> </body> </html> 注意看上面的GIF动画和这里的获取到的时间是一样的,这也说明了这两个jsp页面取得了同一个值 1.6、application属性范围只要设置一次,则所有的页面窗口都可以取得数据。这里的值将会保存在服务器上,所以每一个用户都可以看见。如下面application.jsp:html vi

25、ew plain copy<%page import="java.util.*"%> <% page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "/TR/html4/loose.dtd"

26、;> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% /设置request属性范围 application.setAttribute("name", "linbingwen"); application.s

27、etAttribute("time", new Date(); %> <a href="applicationResult.jsp">获取application内容</a> </body> </html> 然后是applicationResult.jsphtml view plain copy<%page import="java.util.*"%> <% page language="java" contentType="text/

28、html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8&quo

29、t;> <title>Insert title here</title> </head> <body> 获取application姓名:$applicationS<br> 获取application时间:$applicationScope.time<br> </body> </html> 输出结果:如果这时在新建一个网页或新建一个新的web项目,但是它们两个要运行在同一个Tomcat中,那么它同样也能访问到这个值。注意:pplication、session、request-=

30、-都与要跨多个页,属性保存是有内存开销的,设置过多的application或每一个session保存过多的对象,性能就降低了。原则:能用request就不要用session,能用session就不要用applicationapplication应用:在线人员统计、在线人员名单列表,要释放application资源,只能重新启动服务器.使用application缓存数据库的连接,每次使用时,从缓冲中取出,用完就返回。二、JSP九大内置对象详解内置对象(又叫隐含对象,有9个内置对象):不需要预先声明就可以在脚本代码和表达式中随意使用JSP内置对象映射表request 请求对象 类型 javax.s

31、ervlet.ServletRequest 作用域 Requestresponse 响应对象 类型 javax.servlet.SrvletResponse 作用域 PagepageContext 页面上下文对象 类型 javax.servlet.jsp.PageContext 作用域 Pagesession 会话对象 类型 javax.servlet.http.HttpSession 作用域 Sessionapplication 应用程序对象 类型 javax.servlet.ServletContext 作用域 Applicationout 输出对象 类型 javax.servlet.js

32、p.JspWriter 作用域 Pageconfig 配置对象 类型 javax.servlet.ServletConfig 作用域 Pagepage 页面对象 类型 javax.lang.Object 作用域 Pageexception 例外对象 类型 javax.lang.Throwable 作用域 pageJSP中一共预先定义了9个这样的对象,分别为:request、response、session、application、out、pagecontext、config、page、exception2.1、request对象request 对象是 javax.servlet.httpSer

33、vletRequest类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。实现常有的方法1、获取数据java view plain copygetParameter;接收请求参数的, 2、对所有数据进行再编码java view plain copypublic byte getBytes(“encoding”) 如下实例将byte数组编码转换html view plain copy<% page contentType="text/html"

34、charset=gbk"%> <html> <body> <% /接收内容 String name=request.getParameter("uname"); byte b=name.getBytes("ISO8859-1"); name=new String(b); String name= new String(request.getParameter("uname").getBytes("ISO8859-1"); %> <h1>输入内容为:&l

35、t;%=name%></h1> </body> </html> 3、设置统一的请求编码java view plain copypublic void setCharacterEncoding(String env) throws UnsunpportedEncodingException 如下设置html view plain copy<% page contentType="text/html"charset=gbk"%> <html> <body> <% /接收内容 reque

36、st.setCharacterEncoding("GBK"); String name= request.getParameter("uname"); %> <h1>输入内容为:<%=name%></h1> </body> </html> 4、获取requst信息:html view plain copy<% page language="java" contentType="text/html; charset=UTF-8" pageEnco

37、ding="UTF-8"%> <!DOCTYPE html PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title h

38、ere</title> </head> <body bgcolor="#FFFFF0"> <form action="" method="post"> <input type="text" name="name"> <input type="submit" value="提交"> </form> 请求方式:<%=request.getMethod()%><

39、br> 请求的资源:<%=request.getRequestURI()%><br> 请求用的协议:<%=request.getProtocol()%><br> 请求的文件名:<%=request.getServletPath()%><br> 请求的服务器的IP:<%=request.getServerName()%><br> 请求服务器的端口:<%=request.getServerPort()%><br> 客户端IP地址:<%=request.getRemot

40、eAddr()%><br> 客户端主机名:<%=request.getRemoteHost()%><br> 表单提交来的值:<%=request.getParameter("name")%><br> </body> </html> 我们第一次访问是默认用GET方法,表单提交后使用POST方式。2.2、response对象 response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。response对象的

41、主要使用1.设置HTTP头信息、重定向、设置COOKie(1).Web服务器收到一个http请求,会针对每个请求创建一个HttpServletRequest和HttpServletResponse对象,向客户端发送数据找HttpServletResponse,从客户端取数据找HttpServletRequest;(2).HttpServletResponse对象可以向客户端发送三种类型的数据:a.响应头b.状态码c.数据2.2.1、response对象所提供的方法。(1)设定表头的方法java view plain copyvoid addCookie(Cookie cookie) 新增coo

42、kie void addDateHeader(String name, long date) 新增long类型的值到name标头 void addHeader(String name, String value) 新增String类型的值到name标头 void addIntHeader(String name, int value) 新增int类型的值到name标头 void setDateHeader(String name, long date) 指定long类型的值到name标头 void setHeader(String name, String value) 指定String类型的

43、值到name标头 void setIntHeader(String name, int value) 指定int类型的值到name标头 containsHeader( String name )判断指定名字的HTTP文件头是否已经存在,然后返回真假布尔值 (2)设定响应状态码的方法html view plain copyvoid sendError(int sc) 传送状态码(status code) void sendError(int sc, String msg) 传送状态码和错误信息 void setStatus(int sc) 设定状态码 (3)用来URL 重写(rewriting)

44、的方法html view plain copyString encodeRedirectURL(String url) 对使用sendRedirect( )方法的URL予以编码 (4)设置重定向html view plain copysendRedirect():设置重定向页面. 2.2.2、使用范例(1)使用response对象可以设置HTTP的头信息。格式response.setHeader(“头信息名称”,”参数”),其中一个重要的头信息:refresh(刷新)。例如,每秒刷新一次也没,显示刷新次数:html view plain copy<%page import="j

45、ava.util.*"%> <% page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "/TR/html4/loose.dtd"> <html> <head> <m

46、eta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <%!int i=0; %> <% /每秒刷新一次 response.setHeader("refresh","1"); %> <%=i+ %> </body> </html>

47、输出结果如下:(2)重定向html view plain copy<%page import="java.util.*"%> <% page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "/TR/

48、html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% response.setHeader("refresh","3;URL=index.jsp") ; %>

49、三秒后跳转!<br> 如果没有跳转,请按<a href="index.jsp">这里</a>! </body> </html> 来输出结果看看:输入http:/localhost:8080/JspLearning/responseObject1.jsp,三秒后自动跳转到http:/localhost:8080/JspLearning/index.jsp当然还可以使用response.sendRedirect("*.jsp");命令如下:html view plain copy<%page

50、import="java.util.*"%> <% page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "/TR/html4/loose.dtd"> <html> <

51、head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% response.sendRedirect("index.jsp"); %> </body> </html> 输出结果,直接重定向返回到首页了,(3)设置cookiehtml view p

52、lain copy<%pagecontentType="text/html;charset=gb2312"%> <HTML> <HEAD> <TITLE>Cookie的使用</TITLE> </HEAD> <BODY> <% Cookie c1 = newCookie("name","aaa") ; Cookie c2 = newCookie("password","111") ; / 最大保存时间为60秒

53、 c1.setMaxAge(60) ; c2.setMaxAge(60) ; / 通过response对象将Cookie设置到客户端 response.addCookie(c1) ; response.addCookie(c2) ; %> </BODY> </HTML> (4)读取cookiehtml view plain copy<%page contentType="text/html;charset=gb2312"%> <HTML> <HEAD> <TITLE>Cookie的使用</T

54、ITLE> </HEAD> <BODY> <% / 通过request对象,取得客户端设置的全部Cookie / 实际上客户端的Cookie是通过HTTP头信息发送到服务器端上的 Cookie c = request.getCookies() ; %> <% for(int i=0;i<c.length;i+) Cookie temp = ci ; %> <h1><%=temp.getName()%> -> <%=temp.getValue()%></h1> <% %>

55、 </BODY> </HTML> 2.3、session对象session 对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。(1)session(会话)对象是类javax.servlet.Httpsession的一个对象。session是从客户端连接服务器开始,到与服务器断开为止。(2)session对象用于保存每个

56、与服务器建立连接的客户端的信息,session的ID保存于客户端的Cookie中,这个session ID标识唯一和用户,与其他用户的session ID不同。(3)session对象的ID:当一个客户端访问服务器的一个JSP页面时,JSP引擎产生一个session对象,同时分配一个String类型的ID号,并发给客户端。客户端将其存储于Cookie.a其标志了一个唯一的ID;采用getID()方法返回session对象在服务器端的编号。服务器端通过此ID,唯一地识别一个用户,并提供特殊的服务。(4)session对象的有效期:存在以下几个情况时,session对象和其存储的数据会消失,情况有

57、:当用户关闭当前正在使用的浏览器时;关闭网页服务器。用户未向服务器提出请求超预设时,Tomcat服务器预设为30分钟;运行程序结束session.出现以上四种情况时,session对象会消失。以下是一个简单的session登陆实例:login.jsphtml view plain copy<% page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-/

58、W3C/DTD HTML 4.01 Transitional/EN" "/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form action=

59、"login.jsp" method="post"> 用户名:<input type="text" name="uname"><br> 密 码:<input type="password" name="upass"><br> <input type="submit" value="登录"> <input type="reset" value=&q

60、uot;重置"> </form> <% String name = (String)request.getParameter("uname"); String password = (String)request.getParameter("upass"); if(!(name = null | "".equals(name) | password = null | "".equals(password) if("linlin".equals(name) &am

61、p;& "123456".equals(password) /如果登录成功,则设置session的属性范围 session.setAttribute("userid", name); response.setHeader("refresh","3;URL= welcome.jsp"); %> <h3>用户登录成功!三秒后跳转到欢迎页</h3> <h3>如果没有跳转,请按<a href="welcome.jsp">这里</a>

62、;</h3> <% else %> <h3>错误的用户名或密码!</h3> <% %> </body> </html> welcome.jsphtml view plain copy<% page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-/W3C/DTD HTML

63、 4.01 Transitional/EN" "/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% /如果已经设置过了session属性,则肯定不为空 if(session.getAttribute("userid") != null) %> <h3>欢迎<%=session.getAttribute("userid")%>登陆<a href="logout.jsp">注销</a></h3> <% else %> <h3>请先进行本系统的<a href="login.jsp&qu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论