欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JSP---JSP中4个容器-pageContext使用

程序员文章站 2022-03-25 08:01:12
这里重点只讲pagecontext容器的用法哦。 因为另外的3个容器(request,session,application)在前面的servlet中已经演示过很多遍了 容器...

这里重点只讲pagecontext容器的用法哦。
因为另外的3个容器(request,session,application)在前面的servlet中已经演示过很多遍了

  容器                 作用域
pagecontex         仅仅是当前页面,无法传参
request            当前页面,可以传参
session            同一个jsessionid共用一个
application       只要服务器还没重新启动,就一直存在

详细介绍:

pagecontext – 它的作用范围仅为当前jsp页面。

request – 对于用户的一次请求有效,请求/响应结束即消失。
更多细节:
一个请求通过servlet访问资源,在servlet中将数据封装到request中,这在单位中是通常的做法。必须记住、必须记住、必须记住。
然后将请求转发到jsp页面,在从jsp页面上将封装到request中的信息取出。mvc
注意我上面说的是转发,而不是重定向。
对于用户的一次请求,并且请求完成后,数据将不再使用可使用request进行封装,以节省内存。

session – 对于用户的一次会话有效,通常我们用此域来封装用户登录的信息。也必须记住。

application – 在整个web项目的生命周期内有效,不建议使用或谨慎使用。实际项目中根本不用。
开发原则 – 能用小的域尽量使用小的域。

setattribute()和getattribute:

第一种:

index.jsp;


<%@ page language="java" import="java.util.*" pageencoding="utf-8"%>

<!doctype html public "-//w3c//dtd html 4.01 transitional//en">
<html>
  <head>
  </head>

  <body>
    <h2>演示一下jsp中的4个容器---重点是pagecontext,因为之前3个在servlet中学了</h2>
    <% //从小到大的4个容器 pagecontext.setattribute("name", "page-jack"); request.setattribute("name", "request-jack"); session.setattribute("name", "session-jack"); application.setattribute("name", "application-jack"); %>

    okok-------<br/>

    <% //读取4个容器中的name属性值 out.println(pagecontext.getattribute("name")); out.println("<br/>"); out.println(request.getattribute("name")); out.println("<br/>"); out.println(session.getattribute("name")); out.println("<br/>"); out.println(application.getattribute("name")); %>

  </body>
</html>

演示结果:

JSP---JSP中4个容器-pageContext使用

演示用pagecontext设置4个容器的属性:

<%
        //从小到大的4个容器
        //这一段的功能等价于那4个容器设置属性,这里全部通过pagecontext.setattribute()实现
        pagecontext.setattribute("name", "page-jack",pagecontext.page_scope);
        pagecontext.setattribute("name", "request-jack",pagecontext.request_scope);
        pagecontext.setattribute("name", "session-jack",pagecontext.session_scope);
        pagecontext.setattribute("name", "application-jack",pagecontext.application_scope);
    %>
    

    <%
    //这一段的功能等价于之前用4个容器分别读取属性值,这里全部通过pagecontext.getattribute()实现
        out.println( pagecontext.getattribute("name", pagecontext.page_scope) );
        out.println("
");
        out.println( pagecontext.getattribute("name", pagecontext.request_scope) );
        out.println("
");
        out.println( pagecontext.getattribute("name", pagecontext.session_scope) );
        out.println("
");
        out.println( pagecontext.getattribute("name", pagecontext.application_scope) );
    %>

演示结果:

JSP---JSP中4个容器-pageContext使用

演示pagecontext.findattribute():

pagecontext.findattribute()方法会依次从pagecontext、request、session和application中(页面、请求、会话、app)查找对应的属性,找到一个,后面的就不会再去找了。如果没有就返回null.

    <%
        out.println( pagecontext.findattribute("name") );
    %>

演示结果:

JSP---JSP中4个容器-pageContext使用

顺便提一下contenttype与pageencoding的区别:

pageencoding是jsp文件本身的编码 ,把jsp文件编译成java的时候给编译器用的 。
contenttype的charset是指服务器发送给客户端时的内容编码 ,是浏览器解析网页的时候用的
如果两个任意设置了其中一个,另一个即会与此保持一致。但,contenttype除可以设置charset外,还可以设置mime类型,如text/html