`

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页面中,这九大内置对象和四大作用域使得数据管理和交互变得更加方便和高效。开发者可以根据需要选择合适的作用域来存储数据,以及使用内置对象来进行请求处理、页面输出、会话管理和应用程序级操作。 例如,...

    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