JSP的九个隐式对象

JSP使用脚本元素作为一种简易方法在模板数据中嵌入java代码,这些脚本元素在JSP翻译成Servlet的阶段,都被转化为Servlet中的java代码。

JSP引擎在调用JSP对应的_jspServlet时,会传递或创建9个与web开发相关的对象供_jspServlet使用。JSP技术的设计者为便于开发人员在编写JSP页面时获得这些web对象的引用,特意定义了9个相应的变量,开发人员在JSP页面中通过这些变量就可以快速获得这9大对象的引用。

JSP翻译成Servlet代码都存在有:

 1  public void _jspService(HttpServletRequest request, HttpServletResponse response)
 2         throws java.io.IOException, ServletException {
 3
 4     PageContext pageContext = null;
 5     HttpSession session = null;
 6     ServletContext application = null;
 7     ServletConfig config = null;
 8     JspWriter out = null;
 9     Object page = this;
10     JspWriter _jspx_out = null;
11     PageContext _jspx_page_context = null;
12     ......
13 }

在上面的代码中就存在九个隐式对象


对象名


描述


作用域


request


代表与请求相关的HttpServletRequest对象


request


response


代表与响应相关的HttpServletResponse对象


page


pageContext


代表封装请求某个JSP页面时请求环境的pageContext对象


page


session


代表特定用户请求会话的HttpSession对象。该对象只有在JSP页面参与一个HTTP会话时才有意义


session


application


代表Web应用程序的ServletContext对象


application


out


代表与响应输出流相关的JspWriter对象


page


config


代表JSP 页面的Servlet相关的ServletConfig对象


page


page


等于Java编程语言中的this变量


page


exception


代表JSP页面抛出的Trowable对象。这个对象只能在JSP错误页面中使用


page

request,response,session,application,config这些对象之前都讲过了的。还有out , page,pageContext没讲过!下面就主要介绍着三个对象。

一 out  对象

out对象是javax.servlet.jsp.JspWriter的实例,用于发送内容到响应中。JspWriter相当于一种带缓存功能的PrintWriter,设置JSP页面的page指令的buffer属性可以调整它的缓存大小。

只有向out对象中写入了内容,且满足如下任何一个条件时,out对象才去调用ServletResponse.getWriter方法,并通过该方法返回的PrintWriter对象将out对象的缓冲区中的内容真正写入到Servlet引擎提供的缓冲区中:

  • 设置page指令的buffer属性关闭了out对象的缓存功能
  • out对象的缓冲区已满
  • 整个JSP页面结束

out对象的使用方法,只要简单的调用out.print()或者out.println()方法即可。

 out对象的其他方法:

abstract void clear()

Clear the contents of the buffer.
abstract void clearBuffer()

Clears the current contents of the buffer.
abstract void close()

Close the stream, flushing it first.
abstract void flush()

Flush the stream.
int getBufferSize()

This method returns the size of the buffer used by the JspWriter.
abstract int getRemaining()

This method returns the number of unused bytes in the buffer.
boolean isAutoFlush()

This method indicates whether the JspWriter is autoFlushing.

示例:

 

 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
 2 <%
 3 String path = request.getContextPath();
 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 5 %>
 6
 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 8 <html>
 9   <head>
10     <base href="<%=basePath%>">
11
12     <title>out隐式对象演示</title>
13
14     <meta http-equiv="pragma" content="no-cache">
15     <meta http-equiv="cache-control" content="no-cache">
16     <meta http-equiv="expires" content="0">
17     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
18     <meta http-equiv="description" content="This is my page">
19     <!--
20     <link rel="stylesheet" type="text/css" href="styles.css">
21     -->
22   </head>
23
24   <body>
25    <%out.print("演示out隐式对象方法的使用"); %><br/>
26    <%int getBufferSize=out.getBufferSize();
27      int getRemaining=out.getRemaining();
28      out.print("当前缓冲区的大小:"+getBufferSize+"<br/>");
29      out.print("当前可使用的缓冲区大小:"+getRemaining+"<br/>");
30      /* out.clear();
31      out.close(); */
32     %>
33   </body>
34 </html>
 

显示结果:

 

二  page  对象

page对象表示当前一个JSP页面,可以理解为一个对象本身,即:把一个JSP当作一个对象来看待。page对象在开发中几乎不用。

三  PageContext 对象

PageContext 是javax.servlet.jsp.PageContext 的实例。pageContext对象是JSP技术中最重要的一个对象,它代表JSP页面的运行环境,这个对象不仅封装了对其它8大隐式对象的引用,它自身还是一个域对象(容器),可以用来保存数据。他有三个主要的功能

3.1 用它可以存取其他的隐式对象;

3.2 用它可以对四个作用域空间进行数据的存取;

3.3 可以用它进行页面的转发和包含。

PageContext 对象中用于存取其他隐式对象的方法:

abstract Exception getException()

The current value of the exception object (an Exception).
abstract Object getPage()

The current value of the page object (In a Servlet environment, this is an instance of javax.servlet.Servlet).
abstract ServletRequest getRequest()

The current value of the request object (a ServletRequest).
abstract ServletResponse getResponse()

The current value of the response object (a ServletResponse).
abstract ServletConfig getServletConfig()

The ServletConfig instance.
abstract ServletContext getServletContext()

The ServletContext instance.
abstract HttpSession getSession()

The current value of the session object (an HttpSession).

PageContext 对象中用于对作用域空间进行数据存取的方法:

1 public void setAttribute(java.lang.String name,java.lang.Object value)
2 public java.lang.Object getAttribute(java.lang.String name)
3 public void removeAttribute(java.lang.String name)
4 public java.lang.Object findAttribute(java.lang.String name)

PageContext 类提供了四个常量,用来表示四个作用域的范围:

PAGE_SCOPE 表示存储在PageContext 对象中,只在当前页面有效。

REQUEST_SCOPE 表示存储在request对象中,在request作用域有效。

SESSION_SCOPE 表示存储在session对象中,在session作用域有效。

APPLICATION_SCOPE 表示存储在application对象中,在application作用域有效。

 

PageContext引入和跳转到其他资源

PageContext类中定义了一个forward方法(用来跳转页面)和两个include方法(用来引入页面)来分别简化和替代RequestDispatcher.forward方法和include方法。
  方法接收的资源如果以“/”开头, “/”代表当前web应用。

 

时间: 2024-11-10 01:24:52

JSP的九个隐式对象的相关文章

JSP 隐式对象

JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明.JSP隐式对象也被称为预定义变量. JSP所支持的九大隐式对象: 对象 描述 request HttpServletRequest类的实例 response HttpServletResponse类的实例 out PrintWriter类的实例,用于把结果输出至网页上 session HttpSession类的实例 application ServletContext类的实例,与应用上下文有关 conf

JSP隐式对象和MVC设计模式

 今天我们一起来了解一下关于JSP应用的JSP的隐式对像和MVC设计模式. 首先我们先来说一下JSP的隐式对象:JSP隐式对象是Web容器加载的一组类的实例.它是可以直接在JSP页面使用的对象.分为4个主要类别:1. 输入和输出对象:控制页面的输入和输出(request.response.out). 2. 作用域通信对象:检索与JSP页面的Servlet相关的信息(session.application.pageContext). 3. Servlet对象:提供有关页面环境的信息(page.co

J2EE探索者:隐式对象的多种用法

j2ee|对象 接着上月对会话作用域的介绍,企业 Java 专家 Kyle Gabhart 深入研究了 JSP 隐式对象的多种用法.接下来,他将介绍 9 个隐式对象,解释每个对象的用途(或者多种用途),最后给出一些怎样在 JSP 编程中使用这些便利工具的最佳实践.您可以到我们的 讨论论坛 中分享您对这篇文章或者 J2EE 探索者 系列中的任何其他文章的想法. 本期的 J2EE探索者 是上个月的 正确处理会话作用域入门 的续篇.除了访问会话作用域之外,JSP 隐式对象还可以用来处理 HTML 参数

J2EE探索者: 隐式对象的多种用法

本期的 J2EE探索者是上个月的 正确处理会话作用域入门 的续篇.除了访问会话作用域之外,JSP 隐式对象还可以用来处理 HTML 参数,转发请求到一个 Web 组件,包括组件的内容.通过 JSP 容器的日志数据.控制输出流,处理异常,等等. 本月,您将学到在 JSP 页面中使用隐式对象.我们首先简要概括 JSP 架构,其中包括了隐式对象.然后,我将介绍每个对象并描述它的核心功能.最后,我们将给出使用每种类型的对象和它提供的容器管理服务的一些最佳实践. 隐式对象简介 JSP 架构背后的理念是提供

关于jsp使用隐式对象的问题

问题描述 关于jsp使用隐式对象的问题 Tomcat版本:7.0.57 现象: 使用${request.name}得不到数据,使用${name}能得到数据.不是很理解 Servlet 类 jsp页面 jsp 编译后的Servlet 解决方案 参考request的setAttribute()用法及request.sendRedirect 与 request.getRequestDispatcher.forward 的区别 request.getRequestDispatcher().forward

《Servlet和JSP学习指南》一3.3 隐式对象

3.3 隐式对象 Servlet容器将几个对象传给它所运行的Servlet.例如,在Servlet的service方法中获得HttpServletRequest和HttpServletResponse,并在init方法中获得ServletConfig.此外,还可以通过在HttpServletRequest对象中调用getSession获得一个HttpSession. 在JSP中,可以通过使用隐式对象来获取那些对象.表3-1列出了隐式对象. 例如,隐式对象request表示由Servlet/JSP

Scala入门到精通——第十九节 隐式转换与隐式参数(二)

作者:摇摆少年梦 配套视频地址:http://www.xuetuwuyou.com/course/12 本节主要内容 隐式参数中的隐式转换 函数中隐式参数使用概要 隐式转换问题梳理 1. 隐式参数中的隐式转换 前一讲中,我们提到函数中如果存在隐式参数,在使用该函数的时候如果不给定对应的参数,则编译器会自动帮我们搜索相应的隐式值,并将该隐式值作为函数的参数,这里面其实没有涉及到隐式转换,本节将演示如何利用隐式参数进行隐式转换,下面的代码给定的是一个普通的比较函数: object ImplicitP

关于隐式对象转换问题

问题描述 privateSqlParameterobjparm;objparm.SourceVersion=objSqlDataAdapter.InsertCommand.Parameters.Add(newSystem.Data.SqlClient.SqlParameter("@Description",System.Data.SqlDbType.VarChar,50));提示错误:无法将类型System.Data.SqlClient.SqlParameter隐式转换为 System

J2EE中EL的隐式对象param和paramValues

一.param.html <html> <head><title>param.jsp</title></head> <body> <form method="post" action="param.jsp"> <p>姓名:<input type="text" name="username" size="15"