Jsp九大内置对象及四大作用域

第一节:Jsp九大内置对象及四大作用域概述

在 Jsp 开发中,Jsp 提供了 9个内置对象,这些内置对象将由容器为用户进行实例化,用户直接使用即可。

这9 个内置对象分别是:pageContext,request,response,session,application,config,out,page,exception;常用的是前面 5个,需要熟练掌握;
在 Jsp 开发中,可以保存数据,Jsp 提供了四种数据保存范围;分别是 page,request,session,application;

第二节:Jsp四大作用域

Page 范围:只在一个页面中保存数据; javax.servlet.jsp.PageContext(抽象类)
Request 范围:只在一个请求中保存数据; javax.servlet.http.HttpServletRequest(接口)
Session 范围:在一次会话范围中保存数据,仅供单个用户使用;javax.servlet.http.HttpSession(接口)
Application 范围:在整个服务器上保存数据,所有用户共享;javax.servlet.ServletContext(接口)

<body>
<%
    // 设置两个request范围的数据 key-> value
    request.setAttribute("name","request王二小");
    request.setAttribute("age",12);
%>
<!-- 转发,服务器内部跳转,不改变url -->
<jsp:forward page="requestTarget.jsp"></jsp:forward>
</body>

------------------------------requestTarget.jsp-------------------------------
<body>
<%
    // 取值
    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>
</body>
requestScope
<body>
<%
    // 设置两个session范围的数据 key-> value
    session.setAttribute("name","session王二小");
    session.setAttribute("age",12);
%>
<h1>session值设置完毕!</h1>
</body>
---------------------sessionTarget.jsp-----------------------------------------
<body>
<%
    // 取值
    String name=(String)session.getAttribute("name");
    int age=(Integer)session.getAttribute("age");
%>
<font>姓名:<%=name %></font>
<font>年龄:<%=age %></font>
</body>
sessionScope.jsp

==================================================参考:Servlets_JSP_API_Doc.chm

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

  1. page对象就是指向当前JSP页面本身,有点象类中的this指针,它是java.lang.Object类的实例
<body>
<%
    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/>");
%>
</body>
pageContext

====================================================

Response内置对象和 request 内置对象是相对应的,response 内置对象用于响应客户请求,向客户端输出信息;
javax.servlet.HttpServletResponse接口
1,自动刷新应用
2,页面重定向应用 客户端跳转(response.sendRedirect("index.html");)

      参考:与服务器端跳转的区别http://www.cnblogs.com/memewry/archive/2012/08/21/2649988.html
3,操作 cookie 应用 post get 方法比较 post 放数据包里 get 放 Url 后面 get 数据量小,不安全;
4,cookie 和 session 的比较 cookie 信息是存客户端的,session 信息是存服务器的;

<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>

<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>

--------------------------userLogin.jsp----------------------------

<body>
<%
    String userName=request.getParameter("userName");  // 获取用户名
    String pwd=request.getParameter("pwd");  // 获取密码
    String remember=request.getParameter("remember");  // 获取记住密码
    
    if("remember-me".equals(remember)){
        Cookie userNameAndPwd=new Cookie("userNameAndPwd",userName+"-"+pwd);
        userNameAndPwd.setMaxAge(1*60*60*24*7); // cookie记录一个星期
        response.addCookie(userNameAndPwd);  // 保存cookie
        System.out.println("设置Cookie成功");
    }
    response.sendRedirect("response03.jsp");
%>

</body>
response.jsp

==============================================================

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

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

==================================================================

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

下面代码是在web.xml中配置servlet初始化参数,然后用config对象取出

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

--------------------------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>
config

====================================================================

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

 注意页面中的<%@ page errorPage="error.jsp"%><%@ page isErrorPage="true"%>

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ page import="java.util.*"%>
<%@ page errorPage="error.jsp"%>  <!-- 声明errorPage -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<%
    int a=1;
    int b=0;
    out.println(a/b);
%>
</body>
</html>
-----------------------------error.jsp----------------------------------------

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ page import="java.util.*"%>
<%@ page isErrorPage="true"%> <!--  添加后内置对象exception生效 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<%
    if(exception!=null){
        out.println("程序错误信息:");
        out.println(exception.getMessage());
    }
%>
</body>
</html>
exception

 

posted @ 2017-03-02 16:23  SKYisLimit  阅读(234)  评论(0编辑  收藏  举报