javaweb之jsp的属性范围

Wesley13
• 阅读 741

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)    删除属性

示例代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>My JSP 'attrTest1.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>
  <body>
    <%
    pageContext.setAttribute("pageContextAttr", "pageContextValue");
    request.setAttribute("requestAttr", "requestValue");
    session.setAttribute("sessionAttr", "sessionValue");
    application.setAttribute("applicationAttr", "applicationValue");
    %>
    <br><br>
    pageContextAttr: <%=pageContext.getAttribute("pageContextAttr") %>
    <br><br>
    request: <%=request.getAttribute("requestAttr") %>
    <br><br>
    session: <%=session.getAttribute("sessionAttr") %>
    <br><br>
    application: <%=application.getAttribute("applicationAttr") %>
  </body>
</html>

 运行后输出结果如下:

javaweb之jsp的属性范围

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

示例代码如下:

attrTest1.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>My JSP 'attrTest1.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>
  <body>
    <%
    pageContext.setAttribute("pageContextAttr", "pageContextValue");
    request.setAttribute("requestAttr", "requestValue");
    session.setAttribute("sessionAttr", "sessionValue");
    application.setAttribute("applicationAttr", "applicationValue");
    %>
    <h2>attrTest1 page</h2>
    <br>
    pageContextAttr: <%=pageContext.getAttribute("pageContextAttr") %>
    <br><br>
    request: <%=request.getAttribute("requestAttr") %>
    <br><br>
    session: <%=session.getAttribute("sessionAttr") %>
    <br><br>
    application: <%=application.getAttribute("applicationAttr") %>
    <br><br>
    <a href="jspTest/attrTest2.jsp">To attrTest2 Page</a>
  </body>
</html>

attrTest2.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>My JSP 'attrTest2.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>
  <body>
      <h2>attrTest2 page</h2>
    <br>
    pageContextAttr: <%=pageContext.getAttribute("pageContextAttr") %>
    <br><br>
    request: <%=request.getAttribute("requestAttr") %>
    <br><br>
    session: <%=session.getAttribute("sessionAttr") %>
    <br><br>
    application: <%=application.getAttribute("applicationAttr") %>
    <br><br>
  </body>
</html>

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

javaweb之jsp的属性范围

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

修改上面的代码:

attrTest1.jsp中,做如下修改:

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

attrTest2.jsp中,做如下修改:

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

运行attrTest1.jsp后:

javaweb之jsp的属性范围

跳转到attrTest2页面:

javaweb之jsp的属性范围

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

运行attrTest1.jsp:

 javaweb之jsp的属性范围

跳转到attrTest2 页面时:

javaweb之jsp的属性范围

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

javaweb之jsp的属性范围

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

点赞
收藏
评论区
推荐文章
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
虾米大王 虾米大王
2年前
java代码100
code100.jsp获取requestScope范围的数据$requestScope.userName$sessionScope.manager$applicationScope.message
虾米大王 虾米大王
2年前
java代码012
code012.jspInserttitlehere<%JSP内置对象1.request用于处理HTTP请求中的各项参数。如,删除可以通过request对象的getParameter()方法获取如,request.getParameter("id")在请求转发时,需要把一些数据传递到转发后的页面处理。就需要用到request的se
虾米大王 虾米大王
2年前
java代码008
code008.jsp请求转发标识<%通过jsp:forward动作标识可以将请求转发到其他的web资源,如JSP页面、html页面、servlet等。执行请求转发后,当前页面将不再被执行,而是去执行该标识指定的目标页面。jsp:forwardpage"url"举例新建一个index.jsp文件,内容如下,就放置一个转发标识
虾米大王 虾米大王
2年前
Java代码002
code002.jspInserttitlehere<!我们来说说,页面的page指令@pageattr1"value1"attr2"value2"....1.language属性用于设置JSP页面使用的语言,目前只支持java如@pagelanguage"java"2.extends属性该
Wesley13 Wesley13
3年前
Java Web学习总结(16)——JSP的九个内置对象
一、JSP运行原理  每个JSP页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一个\_jspServlet(实质上也是一个servlet),然后按照servlet的调用方式进行调用。  由于JSP第一次访问时会翻译成servlet,所以第一次访
Wesley13 Wesley13
3年前
JSP页面、EL表达式
JSP页面:jsp是一种动态页面,html页面和jsp页面最大的区别是:html是一种静态页面,在html中只能定义css、js等,在jsp中除了可以定义css、js之外还可以定义java代码,还可以在jsp中使用el表达式和jstl标签,但是java代码必须使用<%java代码%第一
Wesley13 Wesley13
3年前
JSP动作元素
JSP动作元素JSP动作元素用来控制JSP容器的动作,可以动态插入文件、重用JavaBean组件、导向另一个页面等。动作元素与指令元素不同,动作元素是在客户端请求时动态执行的,每次有客户端请求时可能都会被执行一次,而指令元素是在编译时被编译执行,它只会被编译一次。可用的标准动作元素如下:1<jsp:useBea
Wesley13 Wesley13
3年前
JavaWeb学习总结(十七)——JSP中的九个内置对象
一、JSP运行原理  每个JSP页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一个\_jspServlet(实质上也是一个servlet),然后按照servlet的调用方式进行调用。  由于JSP第一次访问时会翻译成servlet,所以第一次访
Stella981 Stella981
3年前
JSP内置九个对象Request请求对象
jsp内置对象是什么呢?例如Java语言使用一个对象之前需要实例化(也就是所说的new一个对象),创建对象这个过程有点麻烦,所以在jsp中提供了一些内置对象,用来实现很多jsp应用。在使用内置对象时,不需要实例化这些对象,直接使用就行了。预先定义了九个这样的对象。下面分别对这九个预先定于的对象进行分析和讲解。1.Request请求对象