_Ritchie

JSP内置对象

JSP中共包含9种内置对象,分别为:

  • application:javax.serlvet.ServletContext的实例,该实例代表JSP所属的Web应用本身,可用于JSP页面,或者在Servlet之间交换信息。
  • config:javax.servlet.ServletConfig的实例,该实例代表该JSP的配置信息。
  • exception:java.lang.Throwable的实例,该实例代表其他页面的异常和错误。只有当页面是错误处理页面,即编译指令page的isErrorPage属性为true时,该对象才可以使用。
  • out:javax.servlet.jsp.JspWriter的实例,该实例代表JSP页面的输出流,用于输出内容,形成HTML页面。
  • page:代表该页面本身,通常没有太大用处。也就是Servlet中的this,其类型就是生成的Servlet类,能用page的地方就可用this。
  • pageContext:javax.servlet.jsp.PageContext的实例,该对象代表该JSP页面上下文,使用该对象可以访问页面中的共享数据。
  • request:javax.servlet.http.HttpServletRequest的实例,该对象封装了一次请求,客户端的请求参数都被封装在该对象里。这是一个常用的对象,获取客户端请求参数必须使用该对象。
  • response:javax.servlet.http.HttpServletResponse的实例,代表服务器对客户端的响应。通常很少使用该对象直接响应,而是使用out对象,除非需要生成非字符响应。response对象常被用于进行重定向。
  • session:javax.servlet.http.HttpSession的实例,该对象代表一次会话。当客户端浏览器与站点建立连接时,会话开始;当客户端关闭浏览器时,会话结束。
    这9个内置对象都是在JSP页面对应的Servlet文件中声明的,具体的代码片段如下:
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
        throws java.io.IOException, javax.servlet.ServletException {

    final javax.servlet.jsp.PageContext pageContext;
    javax.servlet.http.HttpSession session = null;
    java.lang.Throwable exception = org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);
    if (exception != null) {
      response.setStatus(javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
    }
    final javax.servlet.ServletContext application;
    final javax.servlet.ServletConfig config;
    javax.servlet.jsp.JspWriter out = null;
    final java.lang.Object page = this;
    javax.servlet.jsp.JspWriter _jspx_out = null;
    javax.servlet.jsp.PageContext _jspx_page_context = null;


    try {
      response.setContentType("text/html charset=GBK");
      pageContext = _jspxFactory.getPageContext(this, request, response,
                null, true, 8192, true);
      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;
      ......

上述的_jspService()方法包含了JSP静态页面和脚本的执行代码,这些执行代码负责完成解析参数、处理请求、生成相应等业务功能。
JSP与Servlet进行数据通信,需要借助JSP内置对象来完成。主要有四个对象负责JSP与Servlet之间的通信,即application、session、request和page。这四个对象分别对应于不同的作用范围。下面将对9种不同的内置对象进行分别介绍:

application

application对象代表Web应用本身,因此使用application来操作Web应用相关数据。application对象通常有如下两个作用:

  • 在整个Web应用的多个JSP、Servlet之间共享数据
    • 设置属性:setAttribute(String attrName, Object value)
    • 获取属性:getAttribute(String attrName, Object value)
    • 该对象应当只存储Web应用的状态数据
  • 访问Web应用的配置参数

    • 获取web.xml中的配置参数:getInitParameter(String paramName)
    • 在web.xml中的配置参数格式(参数为paramName,返回值为paramValue):

      <context-param>
          <param-name>paramName</param-name>
          <param-value>paramValue</param-value>
      </context-param>

config

config对象代表当前JSP配置信息,但JSP页面通常无须配置,因此也就不存在配置信息。这个对象应用比较少。常用的功能有两个:

  • 获得处理请求的Servlet的名称(对于JSP页面,该值默认都为jsp):getServletName()
  • 获取web.xml中的JSP页面的配置参数:getInitParameter(String paramName)

    • 在web.xml中的配置参数格式(参数为paramName,返回值为paramValue):

      <servlet>
          <!-- 指定Servlet名字 -->
          <servlet-name>ServletName</servlet-name>
          <!-- 指定哪个JSP页面配置成Servlet -->
          <jsp-file>/JspPage.jsp</jps-file>
          <!-- 配置参数1 -->
          <init-param>
              <param-name>ParamName1</param-name>
              <param-value>ParamValue1</param-value>  
          </init-param>
          <!-- 配置参数2 -->
          <init-param>
              <param-name>ParamName2</param-name>
              <param-value>ParamValue2</param-name>
          </init-param>
      </servlet>
      <servlet-mapping>
          <!-- 指定将ServletName配置到指定目录/config下 -->
          <servlet-name>ServletName</servlet-name>
          <url-pattern>/config</url-pattern>
      </servlet-mapping>

exception

exception对象代表JSP脚本中产生的错误和异常,是JSP页面异常机制的一部分。通常一个JSP页面出现异常,就会将异常交给错误处理页面处理。exception对象也只在错误处理页面中才有效。所以,exception对象也只有JSP页面的page指令的isErrorPage属性值为true时,exception对象才会被创建并使用。
exception对象的主要功能就是在错误处理页面中显示跳转页面的异常信息。

out

out对象代表一个页面输出流,通常用于在页面上输出变量值及常量。一般在使用输出表达式的地方,都可以使用out对象来达到同样效果。
out对象最常用的方法就是println(String str):在JSP页面中显示某段字符串。

page

page对象有点类似于Java编程中的this指针,就是指当前JSP页面本身。page是java.lang.Object类的对象。page对象在实际开发过程中并不经常使用。

  • 返回当时Object的类:getClass()
  • 返回此时Object的哈希代码:hashCode()
  • 将此时的Object类转换成字符串:toString()
  • 比较此对象是否与指定的对象相等:equals(Object ob)
  • 将此对象复制到指定的对象中:copy(Object ob)
  • 对此对象进行克隆:clone()

pageContext

pageContext对象代表上下文,该对象主要用于访问JSP之间的共享数据。使用pageContext可以访问page、request、session、application范围的变量。

  • 获得page范围内属性的值:getAttribute(String name)
  • 获得指定范围内属性的值:getAttribute(String name, int scope),scope的值可以取以下四种:
    • PageContext.PAGE_SCOPE == 1
    • PageContext.REQUEST_SCOPE == 2
    • PageContext.SESSION_SCOPE == 3
    • PageContext.APPLICATION_SCOPE == 4
  • 设置page范围内属性的值:setAttribute(String name, Object value)
  • 设置指定范围内属性的值:setAttribute(String name, Object value, int scope),scope的值可以取以下四种:
    • PageContext.PAGE_SCOPE == 1
    • PageContext.REQUEST_SCOPE == 2
    • PageContext.SESSION_SCOPE == 3
    • PageContext.APPLICATION_SCOPE == 4
  • 获取request对象:getRequest()
  • 获取response对象:getResponse()
  • 获取config对象:getServletConfig()
  • 获取application对象:getServletContext()
  • 获取session对象:getSession()

request

request对象是JSP中重要的对象,每个request对象封装着一次用户请求,并且所有的请求参数都被封装在request对象中,因此request对象是获取请求参数的重要途径。

  • 获取请求头/请求参数
    • 获取paramName请求参数的值:getParameter(String paramName)
    • 获取所有请求参数名和参数值所组成的Map对象:getParameterMap()
    • 获取所有请求参数名所组成的Enumeration对象:getParameterNames()
    • 获取具有多个值的请求参数的所有值组成的数组:getParameterValues()
    • 根据指定请求头的值:getHeader(String name)
    • 获取所有请求头的名称:getHeaderNames()
    • 获取指定请求头的多个值:getHeaders(String name)
    • 获取指定请求头的值,并将该值转为整数值:getIntHeader(String name)
  • 操作request范围的属性
    • 设置request范围的属性:setAttribute(String attName, Object attValue)
    • 获取request范围的属性:getAttribute(String attName)
  • 执行forward或include
    • 获得RequestDispatcher对象,path为目标路径:getRequestDispatcher(String path)
      • 执行forward,同jsp:forward命令:forward(ServletRequest request, ServletResponse response)
      • 执行include,同jsp:include命令:include(ServletRequest request, ServletResponse response)

response

response代表服务器对客户端的响应。out也可以进行响应,不过out代表页面输出流,对于非字符输出,还是需要response来完成。

  • response响应生成非字符响应
    • 获取getOutputStream()
  • 重定向
    • 重定向会丢失所有的请求参数和request范围的属性,因为重定向将生成第二次请求,与前一次请求不在同一个request范围内,所以发送一次请求的请求参数和request范围的属性范围全部丢失,区别于forward指令。
    • 重定向到path资源,即重新向path资源发送请求:sendRedirect(String path)
    • 执行重定向操作后,浏览器地址栏的地址会变成重定向的地址,区别于forward指令
  • 增加Cookie
    • Cookie通常用于网站记录客户的某些信息
    • Cookie与session的不同在于: session会随浏览器的关闭而失效,但Cookie会一直存放在客户端机器上,除非超出Cookie的生命期限
    • Cookie的使用需要浏览器的支持
    • 增加Cookie:addCookie(Cookie cookie)
      • Cookie创建过程:
        • 1.构造器:Cookie(String name, String value)
        • 2.设置生命周期:setMaxAge(int time)
        • 3.向客户端写Cookie:addCookie(Cookie cookie)
    • 获取Cookie需要利用request对象:getCookies()
    • Cookie中默认不支持中文,所以需要对中文进行转码:java.net.URLEncoder.encode(“中文”, “gbk”)

session

session对象代表一次用户会话。一次用户会话的含义是:从客户端浏览器连接服务器开始,到客户端浏览器与服务器断开为止,这个过程就是一次会话。

  • 设置session属性:setAttribute(String attName, Object attValue)
  • 获取session属性值:getAttribute(String attName)
  • session中通常用于存储与用户会话状态相关的信息,如果只为了实现两个页面之间交换信息,可以将信息放到request范围内,然后通过forward请求实现通信。
  • session里的属性值必须是可序列化的,否则会引发不可序列化的异常

posted on 2015-07-06 11:34  _Ritchie  阅读(122)  评论(0编辑  收藏  举报

导航