javaweb之jsp的属性范围

1.什么是jsp的属性范围?

所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以保存并继续使用。jsp提供了四种属性范围,如下:

  • 当前页,对应的jsp对象为pageContext,属性的作用范围仅限于当前JSP页面,跳转到其他页面无法取得。
  • 一次服务请求,对应的jsp对象为request,属性的作用范围仅限于同一个请求。
  • 一次会话(浏览器打开到关闭为一次会话),对应的jsp对象为session,一个用户设置的内容,只要是与此用户相关的页面都可以访问。
  • 上下文,对应的jsp对象为application,属性的作用范围限于当前web应用,是范围最大的属性作用范围,只要在一处设置属性,在其他各处的JSP或Servlet中都可以获取到。

2.属性的操作方法

 public void setAttribute(String name,Object value)    设置属性

 public object getAttribute(String name)    取得属性

 public void removeAttribute(String name)    删除属性

示例代码如下:

1<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2<% 3String path = request.getContextPath(); 4String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 5%> 6<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 7<html> 8 <head> 9 <base href="<%=basePath%>"> 10 <title>My JSP 'attrTest1.jsp' starting page</title> 11 <meta http-equiv="pragma" content="no-cache"> 12 <meta http-equiv="cache-control" content="no-cache"> 13 <meta http-equiv="expires" content="0"> 14 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 15 <meta http-equiv="description" content="This is my page"> 16 <!-- 17 <link rel="stylesheet" type="text/css" href="styles.css"> 18 --> 19 </head> 20 <body> 21 <% 22 pageContext.setAttribute("pageContextAttr", "pageContextValue"); 23 request.setAttribute("requestAttr", "requestValue"); 24 session.setAttribute("sessionAttr", "sessionValue"); 25 application.setAttribute("applicationAttr", "applicationValue"); 26 %> 27 <br><br> 28 pageContextAttr: <%=pageContext.getAttribute("pageContextAttr") %> 29 <br><br> 30 request: <%=request.getAttribute("requestAttr") %> 31 <br><br> 32 session: <%=session.getAttribute("sessionAttr") %> 33 <br><br> 34 application: <%=application.getAttribute("applicationAttr") %> 35 </body> 36</html>

 运行后输出结果如下:

3.四种属性范围的具体介绍

示例代码如下:

attrTest1.jsp

1<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2<% 3String path = request.getContextPath(); 4String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 5%> 6<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 7<html> 8 <head> 9 <base href="<%=basePath%>"> 10 <title>My JSP 'attrTest1.jsp' starting page</title> 11 <meta http-equiv="pragma" content="no-cache"> 12 <meta http-equiv="cache-control" content="no-cache"> 13 <meta http-equiv="expires" content="0"> 14 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 15 <meta http-equiv="description" content="This is my page"> 16 <!-- 17 <link rel="stylesheet" type="text/css" href="styles.css"> 18 --> 19 </head> 20 <body> 21 <% 22 pageContext.setAttribute("pageContextAttr", "pageContextValue"); 23 request.setAttribute("requestAttr", "requestValue"); 24 session.setAttribute("sessionAttr", "sessionValue"); 25 application.setAttribute("applicationAttr", "applicationValue"); 26 %> 27 <h2>attrTest1 page</h2> 28 <br> 29 pageContextAttr: <%=pageContext.getAttribute("pageContextAttr") %> 30 <br><br> 31 request: <%=request.getAttribute("requestAttr") %> 32 <br><br> 33 session: <%=session.getAttribute("sessionAttr") %> 34 <br><br> 35 application: <%=application.getAttribute("applicationAttr") %> 36 <br><br> 37 <a href="jspTest/attrTest2.jsp">To attrTest2 Page</a> 38 </body> 39</html>

attrTest2.jsp

1<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2<% 3String path = request.getContextPath(); 4String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 5%> 6<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 7<html> 8 <head> 9 <base href="<%=basePath%>"> 10 <title>My JSP 'attrTest2.jsp' starting page</title> 11 <meta http-equiv="pragma" content="no-cache"> 12 <meta http-equiv="cache-control" content="no-cache"> 13 <meta http-equiv="expires" content="0"> 14 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 15 <meta http-equiv="description" content="This is my page"> 16 <!-- 17 <link rel="stylesheet" type="text/css" href="styles.css"> 18 --> 19 </head> 20 <body> 21 <h2>attrTest2 page</h2> 22 <br> 23 pageContextAttr: <%=pageContext.getAttribute("pageContextAttr") %> 24 <br><br> 25 request: <%=request.getAttribute("requestAttr") %> 26 <br><br> 27 session: <%=session.getAttribute("sessionAttr") %> 28 <br><br> 29 application: <%=application.getAttribute("applicationAttr") %> 30 <br><br> 31 </body> 32</html>

运行后跳转页面显示结果如下:

从上面的运行结果来看,pageContext属性的作用范围仅限于当前JSP页面,从attrTest1页面跳转到attrTest2页面之后,pageContext对象获得的属性值为null。

修改上面的代码:

attrTest1.jsp中,做如下修改:

<h2>attrTest1 page: <%=new Date() %></h2>

attrTest2.jsp中,做如下修改:

<h2>attrTest2 page:<%=new Date() %></h2>

运行attrTest1.jsp后:

跳转到attrTest2页面:

从上面的运行结果可以看出,request的属性作用范围仅限于同一个请求,对于不同页面的不同请求的Date函数的调用,输出的时间是不同的。

运行attrTest1.jsp:

 

跳转到attrTest2 页面时:

关闭浏览器,直接运行attrTest2.jsp,看到session的属性值为null,运行结果显示如下:

从上面的运行结果可以看出,在一次会话(session)过程中,在第一个页面上设置的属性,跳转(服务器跳转/客户端跳转)到其他页面之后,其他的页面依然可以取得第一个页面上设置的属性。会话结束后,属性值丢失(体现为session值为null)。

点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java代码100

code100.jsp获取requestScope范围的数据$requestScope.userName$sessionScope.manager$applicationScope.message

java代码012

code012.jspInserttitlehere<%JSP内置对象1.request用于处理HTTP请求中的各项参数。如,删除可以通过request对象的getParameter()方法获取如,request.getParameter("id")在请求转发时,需要把一些数据传递到转发后的页面处理。就需要用到request的se

java代码008

code008.jsp请求转发标识<%通过jsp:forward动作标识可以将请求转发到其他的web资源,如JSP页面、html页面、servlet等。执行请求转发后,当前页面将不再被执行,而是去执行该标识指定的目标页面。jsp:forwardpage"url"举例新建一个index.jsp文件,内容如下,就放置一个转发标识

Java代码002

code002.jspInserttitlehere<!我们来说说,页面的page指令@pageattr1"value1"attr2"value2"....1.language属性用于设置JSP页面使用的语言,目前只支持java如@pagelanguage"java"2.extends属性该

Java Web学习总结(16)——JSP的九个内置对象

一、JSP运行原理  每个JSP页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一个\_jspServlet(实质上也是一个servlet),然后按照servlet的调用方式进行调用。  由于JSP第一次访问时会翻译成servlet,所以第一次访