`

jsp四个作用域及九个内置对象

阅读更多
1. jsp四个作用域

在Jsp开发中,可以保存数据,Jsp提供了四种数据保存范围;
分别是 page, request, session, application;


1) page范围

page范围:
    只在一个页面中保存数据;
使用:
    pageContext.setAttribute("xxx");
    pageContext.getAttribute("xxx");
抽象类:
    javax.servlet.jsp.PageContext


pageScope.jsp

<%
    // 设置两个page范围的数据 key-> value
    pageContext.setAttribute("name","page王二小");
    pageContext.setAttribute("age",12);
%>
<%
    // 取值
    String name=(String)pageContext.getAttribute("name");
    int age=(Integer)pageContext.getAttribute("age");
%>
<font>姓名:<%=name %></font>
<font>年龄:<%=age %></font>


2) request范围

request范围:
    只在一个请求中保存数据;
使用:
    request.setAttribute("key","value");
    request.getAttribute("key");
接口:
    javax.servlet.http.HttpServletRequest


requestScope.jsp

<%
    // 设置两个request范围的数据 key-> value
    request.setAttribute("name","request王二小");
    request.setAttribute("age",12);
%>
<jsp:forward page="requestTarget.jsp"></jsp:forward>

requestTarget.jsp

<%
    // 取值
    String name=(String)request.getAttribute("name");
    int age=(Integer)request.getAttribute("age");
    // 获取头信息
    Enumeration enu=request.getHeaderNames();
    while(enu.hasMoreElements()){
        String headerName=(String)enu.nextElement();
        String headerValue=request.getHeader(headerName);
%>
    <h4><%=headerName %>&nbsp;<%=headerValue %></h4>
<%
    }
%>
<font>姓名:<%=name %></font>
<font>年龄:<%=age %></font>


3) session范围

session范围:
    在一次会话范围中保存数据,仅供单个用户使用;
使用:
    session.setAttribute("key","value");
    session.getAttribute("key");
接口:
    javax.servlet.http.HttpSession


sessionScope.jsp

<%
    // 设置两个session范围的数据 key-> value
    session.setAttribute("name","session王二小");
    session.setAttribute("age",12);
%>
<h1>session值设置完毕!</h1>

sessionTarget.jsp

<%
    // 取值
    String name=(String)session.getAttribute("name");
    int age=(Integer)session.getAttribute("age");
%>
<font>姓名:<%=name %></font>
<font>年龄:<%=age %></font>


4) application范围

application范围:
    在整个服务器上保存数据,所有用户共享;
使用:
    application.setAttribute("key","value");
    application.getAttribute("key");


applicationScope.jsp

<%
    // 设置两个application范围的数据 key-> value
    application.setAttribute("name","application王二小");
    application.setAttribute("age",12);
%>
<h1>application值设置完毕!</h1>

applicationTarget.jsp

<%
    // 取值
    String name=(String)application.getAttribute("name");
    int age=(Integer)application.getAttribute("age");
%>
<font>姓名:<%=name %></font>
<font>年龄:<%=age %></font>


2. jsp九个内置对象

在Jsp开发中,Jsp提供了9个内置对象,这些内置对象将由容器为用户进行实例化,用户直接使用即可。
这个9个内置对象分别是:
pageContext, request, session, application, response, out, config, exception, page;
常用的是前面5个,需要熟练掌握;


1) pageContext对象 同上

pageContext内置对象是一个比较特殊的对象。它相当于页面中所有对象功能的集合,即使用它可以访问到本页面中所有对象。
pageContext内置对象由Jsp容器创建并初始化,pageContext对象提供了对JSP页面所有对象及控件的访问。


pageContext01.jsp

<%
    pageContext.setAttribute("name0", "pageInfo");
    request.setAttribute("name1", "requestInfo");
    session.setAttribute("name2", "sessionInfo");
    application.setAttribute("name3", "applicationInfo");
    
    out.println("使用pageContext<br/>");
    out.println("page中的属性值:"+pageContext.getAttribute("name0")+"<br/>");
    out.println("request中的属性值:"+pageContext.getRequest().getAttribute("name1")+"<br/>");
    out.println("session中的属性值:"+pageContext.getSession().getAttribute("name2")+"<br/>");
    out.println("application中的属性值:"+pageContext.getServletContext().getAttribute("name3")+"<br/>");
%>


2) request对象 同上

3) session对象 同上

4) application对象 同上

5) response对象

response对象:
    Response内置对象和request内置对象是相对应的,response内置对象用于响应客户请求,向客户端输出信息;
接口:
    javax.servlet.HttpServletResponse
使用:
    1) 自动刷新应用 response.setHeader("refresh","1");
    2) 页面重定向应用客户端跳转 response.sendRedirect("index.html");
    3) 操作cookie应用post get方法比较post放数据包里get放Url后面get数据量小,不安全;


1) response01.jsp

<%
    // 每隔一秒刷新一次页面
    response.setHeader("refresh","1");
    // 获取当前时间
    Date myDate=new Date();
%>
当前时间:<%= myDate.toLocaleString() %>

2) response02.jsp

<%
    // 重定向,客户端跳转
    response.sendRedirect("index.html");
%>

index.html

Hello 主页

3) response03.jsp

<script type="text/javascript">
    function resetValue(){
        document.getElementById("userName").value="";
        document.getElementById("pwd").value="";
    }
</script>
<%
    String userName=null;
    String pwd=null;
    Cookie[] cookies=request.getCookies();
    for(int i=0;cookies!=null &&i<cookies.length;i++){
        if(cookies[i].getName().equals("userNameAndPwd")){
            userName=cookies[i].getValue().split("-")[0];
            pwd=cookies[i].getValue().split("-")[1];
        }
    }
    if(userName==null){
        userName="";
    }
    if(pwd==null){
        pwd="";
    }
%>
</head>
<body>
response03.jsp
<form action="userLogin.jsp" method="post">
    <table>
        <tr>
            <td>用户名:</td>
            <td><input type="text" id="userName" name="userName" value="<%=userName%>"/></td>
        </tr>
        <tr>
            <td>密码:</td>
            <td><input type="password" id="pwd" name="pwd" value="<%=pwd %>" /></td>
        </tr>
        <tr>
            <td>记住密码:</td>
            <td><input type="checkbox" id="remember" name="remember" value="remember-me"/></td>
        </tr>
        <tr>
            <td><input type="submit" value="登录"/></td>
            <td><input type="button" value="重置" onclick="resetValue()"/></td>
        </tr>
    </table>
</form>
</body>


6) out对象

out对象:
    Out内置对象主要用来向客户端输出各种类型的数据,同时还可以管理应用服务器上的输出缓冲区。所以out内置对象的方法是向客户端输出数据和管理缓冲区;
抽象类:
    javax.servlet.jsp.JspWriter
使用:
    out.println("xxx");

out01.jsp

<%
    out.println("<h1>");
    out.println("Hello Jsp Servlet");
    out.println("</h1>");
%>

out02.jsp

<%
    int totalbuffer = out.getBufferSize();  // 获取总共缓冲区的大小
    int available = out.getRemaining(); // 获取未使用的缓冲区的大小
    int user = totalbuffer-available;  // 获取使用的缓冲区大小
    out.println("总共缓冲区的大小:" + totalbuffer);
    out.println("未使用的缓冲区的大小:" + available);
    out.println("使用的缓冲区大小:" + user);
%>


7) config对象

config对象:
    Config内置对象是JSP页面通过JSP容器进行初始化时被传递的对象。
    在Servlet初始化的时候,JPS引擎通过config向它传递信息。这种信息可以是属性名和属性值匹配的参数,也可以是通过ServletContext对象传递的服务器的有关信息;
底层:
    javax.servlet.ServletConfig
使用:
    config.getInitParameter


web.xml

<servlet>
      <servlet-name>init</servlet-name>
      <jsp-file>/sysInit.jsp</jsp-file>
      <init-param>
          <param-name>jdbcName</param-name>
          <param-value>com.mysql.jdbc.Driver</param-value>
      </init-param>
      <init-param>
          <param-name>dbUrl</param-name>
          <param-value>jdbc:mysql://localhost:3306/db_xx</param-value>
      </init-param>
</servlet>
<servlet-mapping>
      <servlet-name>init</servlet-name>
      <url-pattern>/init</url-pattern>
</servlet-mapping>

sysInit.jsp

<%
    String jdbcName=config.getInitParameter("jdbcName");
    String dbUrl=config.getInitParameter("dbUrl");
%>
<h1>驱动名称:<%=jdbcName %></h1>
<h1>连接地址:<%=dbUrl %></h1>

http://localhost:8080/HeadFirstJspServletChap03/init


8) exception对象

exception对象:
    Exception内置对象用来处理JSP文件在执行时发生的所有异常,它是java.lang.Throwable类的一个对象。


exception01.jsp

<%
    int a=1;
    int b=0;
    out.println(a/b);
%>

error.jsp

<%
    if(exception!=null){
        out.println("程序错误信息:");
        out.println(exception.getMessage());
    }
%>


9) page对象

page对象
    page对象是当前页面转换后的Servlet类的实例。在JSP页面中,很少使用page对象。
    Object page = this;

pageContext对象
    javax.servlet.jsp.PageContext 的实例,该对象代表该JSP 页面上下文,使用该对象可以访问页面中的共享数据。
    
总的来说,pageContext和page都是jsp中的隐含对象,pageContext代表jsp页面的上下文关系,能够调用、存取其他隐含对象;page代表处理当前请求的时候,这个页面的实现类的实例。
分享到:
评论

相关推荐

    JSP的九个内置对象及四个作用域

    JSP 九个内置对象及四个作用域 JSP(Java Server Pages)是一种基于Java的服务器端脚本...JSP四个作用域包括page、request、session和application四个作用域,分别对应着页面、请求、会话和应用程序四个级别的作用域。

    JSP内置对象及四种作用域

    在这个作用域内创建的对象只能被该页面访问,一旦页面处理完毕,这些对象就会被销毁。使用`pageContext.setAttribute()`方法可以在page作用域中设置属性。 2. **request**作用域:比page作用域稍大,一个请求中的...

    jsp九大内置对象和四大作用域详解.docx

    四大作用域包括page、request、session和application四个作用域,每个作用域都有其特定的生命周期和使用场景。 page作用域是指当前页面的生命周期,以JSP页面为单位,页面销毁后页面作用域的变量将被销毁。 ...

    jsp的九大内置对象和四大作用域

    【JSP的九大内置对象】 ...6. **pageContext对象**:提供对当前JSP页面所有作用域的访问,以及对其他内置对象的引用,如`getAttribute()`可以获取任何作用域中的属性。 7. **page对象**:代表当前JSP页面的Java对

    JSP中的常见的四种作用域

    Page 作用域是 JSP 页面的内置对象,用于存储当前页面的数据。PageContext 是一个在 JSP 中的隐含对象,通过它可以设置和获取当前页面的属性。Page 作用域的生命周期非常短暂,仅限于当前页面的执行周期内。在同一个...

    jsp九大内置对象

    ### JSP九大内置对象详解 #### 一、Request对象 - **定义**:`javax.servlet.http.HttpServletRequest` 类型的对象。 - **用途**:用于接收客户端发送到服务器端的数据(包括但不限于HTTP请求头、请求参数等)。 - ...

    jsp主要九大内置对象、四大web域、两种包含、两种注释、几个jsp标准动作

    NULL 博文链接:https://1601844782.iteye.com/blog/2274248

    JSP内置对象实验报告.doc

    本实验主要探讨了四个关键内置对象:request、response、session和pageContext。 1. **request对象**:request对象代表HTTP请求,由HttpServletRequest类实例化。它用于获取客户端发送的所有信息,如参数、头信息等...

    JSP九大内置对象

    这九个内置对象中的四个——`application`、`session`、`request`和`page`,具有不同的作用域,决定了它们的有效范围: - **application**:在整个Web应用的生命周期中有效,适用于全局范围的数据共享。 - **...

    浅谈jsp九大内置对象及四个作用域

    request 请求对象 类型 javax.servlet.ServletRequest 作用域 Request ...pageContext 页面上下文对象 类型 javax.servlet.jsp.PageContext 作用域 Page session 会话对象 类型 javax.serv

    jsp九大内置对象、四种作用域、跳转方式

    jsp有四种属性范围: page -&gt; 页面级别,显然只有在一个页面内可用。 request -&gt; 请求级别 服务器跳转,一次请求之后消失。 session -&gt; 会话级别 客户端跳转(服务器跳转),与浏览器有关,ie是在重新打开ie时才...

    jsp九大内置对象讲解

    - 功能:提供对四个作用域(page、request、session、application)的操作方法。 - 作用域:`page`(页面执行期间) - 特别说明:其提供的方法均为抽象方法,通过具体的PageContext实现类实现。 5. **session** ...

    JSP内置对象和作用域[收集].pdf

    四个作用域分别对应不同的数据有效期和范围: - **application**作用域:在整个Web应用程序的生命周期内有效,直至服务器关闭或清空应用程序数据。 - **session**作用域:在用户会话期间有效,会话结束或调用`...

    Jsp九大内置对象代码

    1. **pageContext对象**:PageContext对象提供了对请求、响应、页面范围以及其他四个作用域(page、request、session和application)的访问。它是其他所有对象的桥梁,通过它可以获取任何作用域内的数据。 2. **...

    第四单元 JSP内置对象.pdf

    JSP内置对象有不同的作用域,这决定了它们的有效范围: - **`page`对象**:页面级作用域,只在当前JSP页面中有效。 - **`request`对象**:请求级作用域,适用于当前HTTP请求的整个生命周期。 - **`session`对象**:...

    jsp九个内置对象 六个基本动作 三个指令元素

    ### JSP九个内置对象 六个基本动作 三个指令元素 #### 四种属性范围 ...以上就是JSP中四个作用域、九个内置对象、六个基本动作及三个指令元素的基本介绍,希望能帮助您更好地理解和使用JSP技术。

Global site tag (gtag.js) - Google Analytics