• jsp四种属性范围


    在JSP提供了四种属性的保存范围。所谓的属性保存范围,指的就是一个设置的对象,可以在多个页面中保存并可以继续使用。它们分别是:page、request、session、appliction。

    1、page属性范围(pageContext范围)当前页面

      page属性范围(使用pageContext表示,但一般来讲习惯于将这种范围称为page范围)只在一个页面范        围内有效,不能发生跳转,也就是说,在跳转到另一个页面后,就不能取得它的属性了。

    单页面:

     设置和取得page范围的属性
    1
    <% // 设置page的属性范围,此属性只在当前JSP页面中起作用 2 pageContext.setAttribute("name", "李华"); 3 pageContext.setAttribute("age", "18"); 4 %> 5 <% // 从page属性范围中取出属性,并执行向下转型操作 6 String username =(String) pageContext.getAttribute("name"); 7 String userage =(String) pageContext.getAttribute("age"); 8 %> 9 10 <h3>姓名:<%=username %></h3> <!-- 输出取得的属性内容 --> 11 <h3>年龄:<%=userage %></h3> <!-- 输出取得的属性内容 -->


      可行!!

    
    

    双页面:

    在test.jsp页面设置page范围的属性
    <% // 设置page的属性范围,此属性只在当前JSP页面中起作用 pageContext.setAttribute("name", "李华"); pageContext.setAttribute("age", "18"); %> <jsp:forward page="forward.jsp"> 在forward.jsp页面取得page范围的属性 <% //从page属性范围中取出属性,并执行向下转型操作 String username =(String) pageContext.getAttribute("name"); String userage =(String) pageContext.getAttribute("age"); %> <h3>姓名:<%=username %></h3> <!-- 输出取得的属性内容 --> <h3>年龄:<%=userage %></h3> <!-- 输出取得的属性内容 -->


      错误!!

    2、request属性范围(一次请求)

       如果要在服务器跳转,也就是请求转发(<jsp:forward page="forward.jsp">这种方式;)之后属性可以继续保存下来,则可以使用request属性范围操作,request属性范围表示的是在服务器跳转之后,所有设置的内容在下一个页面依然会被保留下来。

     服务器跳转:

    //  在test.jsp中设置request范围的属性
    <%     // 设置request的属性范围,此属性只在服务器跳转中起作用
        request.setAttribute("name", "李华");
        request.setAttribute("age", "18");
    %>
    <jsp:forward page="forward.jsp">
    

    // 在forward.jsp中取得request范围的属性 <% //从request属性范围中取出属性,并执行向下转型操作 String username =(String) request.getAttribute("name"); String userage =(String) request.getAttribute("age"); %> <h3>姓名:<%=username %></h3> <!-- 输出取得的属性内容 --> <h3>年龄:<%=userage %></h3> <!-- 输出取得的属性内容 -->

      可行!!

    使用超链接跳转(可以理解为重定向):

    //  在test.jsp中设置request范围的属性
    <%  // 设置request的属性范围,此属性只在服务器跳转中起作用
        request.setAttribute("name", "李华");
        request.setAttribute("age", "18");
    %>
     <!-- 跳转后,地址栏改变,属于客户端跳转 -->
    <a href = "forward.jsp">超链接获取属性</a>
    
    
    
    // 在forward.jsp中取得request范围的属性
    
    <%  //从request属性范围中取出属性,并执行向下转型操作
        String username =(String) request.getAttribute("name");
        String userage =(String) request.getAttribute("age");
    %>
    
    <h3>姓名:<%=username %></h3>     <!-- 输出取得的属性内容 -->
    <h3>年龄:<%=userage %></h3>      <!-- 输出取得的属性内容 -->   
     错误!!

     关于request属性范围的理解

       request表示的是客户端的请求,正常情况下,一次请求服务器只会给予一次回应,那么这个时候如果是服务器跳转,请求的地址栏没有改变,所以也就相当于回应了一次,而如果地址栏改变了,就相当于是发出了第二次请求,则第一次请求的内容肯定就已经消失了,所以无法取得。

    session属性范围(一次会话)

       如果现在希望一个属性设置之后,可以再任何一个与设置页面相关的页面取得的话,则就可以使用session属性范围,使用session设置属性之后,不管是客户端还是服务器端跳转,只要属性设置了就都可以取得。(以下就不举例子,只需将上述两个里面的pageContext或request换成session即可

    application属性范围(一个项目)

      如果现在希望设置一个属性,可以让所有的用户(每一个session)都能看得见的话,则可以将属性范围设置成application,这样属性就保存在了服务器之上。

      一般地,如果能使用request就尽量不要使用session,能使用session就尽量不要使用application

  • 相关阅读:
    npm镜像切换
    vue组件样式覆盖问题-module
    实现微信小程序多文件同时上传,并且携带参数
    提交现有代码到gitee
    富文本框 字段存入数据库
    js动态添加 <select>标签disable属性
    validate验证,rules属性名为特殊属性名
    springboot themleaf ajax总结
    th:field,th:value
    直接在页面上显示当前年份
  • 原文地址:https://www.cnblogs.com/qzhc/p/11172777.html
Copyright © 2020-2023  润新知