现在的位置: 首页 > 综合 > 正文

02—jsp内置对象01(内置对象简介及四种属性范围)

2013年10月22日 ⁄ 综合 ⁄ 共 4024字 ⁄ 字号 评论关闭

在jsp中已经为用户的应用提供了很多内置的对象;
内置对象共九个:
 pageContext:  javax.servlet.jsp.PageContext   JSP的页面容器
 request:  javax.servlet.http.HttpServeletRequest  得到用户的请求信息
 response:  javax.servlet.http.HttpServeletResponse  服务器想客户端的回应信息
 session:  javax.servlet.http.HttpSession   用来保存每个用户的信息
 application:  javax.servlet.ServletContext   表示所有用户的共享信息
 config:   javax.servlet.ServletConfig   服务器配置,可以取得初始化参数
 out:   javax.servlet.jsp.JspWriter   页面输出
 page:   java.lang.Object    表示从该页面中表示出来的一个servlet实例
 exception:  java.lang.Throwable    表示在jsp页面发生的异常,在错误页中才起作用

四种属性范围:
 在jsp中提供了四种属性的保存范围,所谓的属性保存范围,指的
 就是一个设置的对象,可以再多少个页面中保存并可以继续使用;

四种属性范围:
 pageContext:只在一个页面中保存属性,跳转之后无效;
 request:   只在一次请求中保存,服务器跳转后依然有效;
 session:   在一次回话范围中,无论何种跳转都可以使用,
      但是新开浏览器无法使用;
 application:在整个服务器上保存,所有用户都可以使用;
 
 public void setAttribute(String name,Object o)
 public Object getAttribute(String name)
 public void removeAttribute(String name)
 四种属性范围都有以上的三个方法;

page属性范围(pageContext范围)
 page属性范围(使用pageContext表示,但是一般来讲都习惯于将这种属性范围称为page范围)
 表示将一个属性设置在本页上,跳转之后无法取得;
  <%@ page contentType="text/html" pageEncoding="gbk"%>
  <%@ page import="java.util.*"%>
  <html>
  <head><title>这是测试</title></head>
  <body>
   <%//设置属性
    pageContext.setAttribute("name","lid");
    pageContext.setAttribute("birthday",new Date());
   %>
   <%//取得属性值
    String name=(String)pageContext.getAttribute("name");
    Date birthday=(Date)pageContext.getAttribute("birthday");
   %> 
    <h1><%=name%></h1>
    <h1><%=birthday%></h1>
  </body>
  </html>
 如上,在同一页面上pageContext设置的属性是可以取到的,如果发生跳转就取不到了;

 page_scope_02.jsp:
  <%@ page contentType="text/html" pageEncoding="gbk"%>
  <%@ page import="java.util.*"%>
  <html>
  <head><title>这是测试</title></head>
  <body>
   <%//设置属性
    pageContext.setAttribute("name","lid");
    pageContext.setAttribute("birthday",new Date());
   %>
   <jsp:forward page="page_scope_03.jsp"/>
  </body>
  </html>
 page_scope_03.jsp:
  <%@ page contentType="text/html" pageEncoding="gbk"%>
  <%@ page import="java.util.*"%>
  <html>
  <head><title>这是测试</title></head>
  <body>
   <%//取得属性值
    String name=(String)pageContext.getAttribute("name");
    Date birthday=(Date)pageContext.getAttribute("birthday");
   %> 
    <h1><%=name%></h1>
    <h1><%=birthday%></h1>
   
  </body>
  </html>
 输出的结果是null,原因是pageContext属性的范围是在本页面内;

request属性范围:
 只要是服务器端的跳转,request中设置的属性都可以被访问到;
 request_scope_02.jsp:
  <%@ page contentType="text/html" pageEncoding="gbk"%>
  <%@ page import="java.util.*"%>
  <html>
  <head><title>这是测试</title></head>
  <body>
   <%//设置属性
    request.setAttribute("name","lid");
    request.setAttribute("birthday",new Date());
   %>
   <jsp:forward page="request_scope_03.jsp"/>
  </body>
  </html>

 request_scope_03.jsp:
  <%@ page contentType="text/html" pageEncoding="gbk"%>
  <%@ page import="java.util.*"%>
  <html>
  <head><title>这是测试</title></head>
  <body>
   <%//取得属性值
    String name=(String)request.getAttribute("name");
    Date birthday=(Date)request.getAttribute("birthday");
   %> 
    <h1><%=name%></h1>
    <h1><%=birthday%></h1>
   
  </body>
  </html>
 以上可以正常显示,如果将<jsp:forward page="request_scope_03.jsp"/>改成<a href="request_scope_03.jsp">显示</a>,
  将不会得到request的属性;

session属性范围:无论是服务器跳转还是客户端跳转都可以取得session中属性;
 session_scope_02.jsp:
  <%@ page contentType="text/html" pageEncoding="gbk"%>
  <%@ page import="java.util.*"%>
  <html>
  <head><title>这是测试</title></head>
  <body>
   <%//设置属性
    session.setAttribute("name","lid");
    session.setAttribute("birthday",new Date());
   %>
   
   <a href="session_scope_03.jsp">显示</a>
   
  </body>
  </html>

 session_scope_03.jsp:
  <%@ page contentType="text/html" pageEncoding="gbk"%>
  <%@ page import="java.util.*"%>
  <html>
  <head><title>这是测试</title></head>
  <body>
   <%//取得属性值
    String name=(String)session.getAttribute("name");
    Date birthday=(Date)session.getAttribute("birthday");
   %> 
    <h1><%=name%></h1>
    <h1><%=birthday%></h1>
   
  </body>
  </html>
 如果换个浏览器 直接打开session_scope_03.jsp这个jsp则就得不到值了,session是在一个回话
 中,可以去到其中的属性的;

application属性范围:
 供该服务其中的所有用户使用;
 
 在pageContext对象有个方法public void setAttribute(String name,Object o,int scope)
 可以设置属性存放的范围:PageContext.APPLICATION_SCOPE、PageContext.PAGE_SCOPE 、PageContext.REQUEST_SCOPE、PageContext.SESSION_SCOPE

 

 

 

 

抱歉!评论已关闭.