在JSP页面的转换阶段,容器在_jspService()方法中申明并初始化一些变量,可以在JSP页面小脚本中或表达式中直接使用这些变量。

一、JSP页面中可使用的隐含变量

1、applicationjavax.servlet.ServletContext接口引用WEB应用程序的上下文

2、sessionjavax.servlet.http.HttpSession接口引用用户会话

3、requestjavax.servlet.http.HttpServletRequest接口引用页面的当前请求对象

4、responsejavax.servlet.http.HttpServletResponse接口引用向客户发送的一个响应

5、outjavax.servlet.jsp.JspWriter类引用页面输出流

6、pagejava.lang.Object类引用页面的Servlet实例

7、pageContextjavax.servlet.jsp.PageContext类引用页面上下文

8、configjavax.servlet.Servletconfig接口引用Servlet的配置对象

9、exceptionjava.lang.Throwable类用来处理错误

下面的是JSP页面转换成Servlet中的部内容:

...

public void _jspService(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{

...其他代码

PageContext pageContext = null;

HttpSession session = null;

ServletContext application= null;

ServletConfig config= null;

JspWriter out = null;

Object page = this;

...创建有关对象的代码

pageContext = _jspFactoty.getPageContext(this,request,response,null,ture,8192,true);

session = pageContext.getSession();

application = pageContext.getServletContext();

config = pageContext.getServletConfig();

out = pageContext.getOut();

...其他代码

}

可以看到在_jspService方法中申明了8个变量(加粗字体表示的)。如果一个也I安是错误处理页面的,即页面中包含下面的page指令:

<%@ page isErrorPage="true" %>

则页面实现类中将自动申明一个exception隐含变量,如下:

Throwable exception = (Throwable) request.getAttribute("javax.servlet.jsp.jspException");

二、各隐含变量讲解

1、request与response变量

request与response分别对应HttpServletRequest和HttpServletResponse类型的隐含变量,当页面的Servlet向客户端提供服务时,他们作为参数传递给_jspService()方法。在jsp页面中他们与在servlet中使用完全一样,即用来分析请求和发送响应。

例如:

<% String remoteAddr = request.getRemoteAddr();

response.setContextType("text/html,charset=ISO-8859-1");

%>

<html><body>

Hi,Your IP address is <%=remoteAddr%>

</body></html>

2、out变量

out是javax.servlet.jsp.JspWriter类型的隐含变量,JspWriter类扩展了java.io.writer并继承了所有重载的write()方法。在此基础上,还增加了其自己的一组print()和println()方法来打印输出所有的基本数据类型、字符串以及用户定义的对象。可以在小脚本中直接使用它,也可以在表达式中间间接使用它产生HTML代码。

例如:

<% out.print("Hello World!"; %>

<%= "Hello User" %>

3、application变量

application是javax.servlet.ServletContext类型的隐含变量,它是JSP页面所在的Web应用程序的上下文的引用。

例如下面两个是等价的:

<% String path = application.getRealPath("/WEB-INF/counter.db");

application.log("Using:"+path);

%>

<% String path = getServletContext().getRealPath("/WEB-INF/counter.db");

getServletContext().log("Using:"+path);

%>

4、session变量

session是javax.servlet.http.HttpSession类型的隐含变量,它在JSP页面中表示会话对象。要使用会话对象,必须要求JSP页面参加Http会话,即要求将JSP页面的page指令的session属性值设置为true。

如果page指令的session属性设置为true,那么在页面转换的类中就会申明一个session隐含变量。由于默认情况下,session属性的值为true,所以即使没有指定page指令,该变量也会被申明并可以使用。然而,如果明确将session属性设置为false,容器将不会申明改变量,对该变量的使用将产生错误。

例如;

<%@ page session="false" %>

<html><body>

会话ID=<%=session.getId()%>

</body></html>

5、pageContext是javax.servlet.jsp.PageContext类型的隐含变量,它是一个页面上下文对象。PageContext类是一个抽象类,容器厂商提供了一个具体子类(如jspContext),它有三个作用:

(1)、存储隐含对象的引用。pageContext对象是作为管理所有在JSp页面中使用的其他对象的一个地方,包括用户定义的和隐含的对象,并且它提供了一个访问方法来检索他们。session、application、config、out这些隐含变量都是调用pageContext对象的相应方法得到的。

(2)、提供了在不同作用域内返回或设置属性的方便的方法。

(3)、提供了forward()方法和include()方法实现将请求转发到另一个资源和将一个资源的输出包含到当前页面中的功能,它们的格式如下:

1)、public void include(String relativeURL)将另一个资源的输出包含在当前页面的输出中,与RequestDispatcher()接口的include()方法功能类似。

2)、public void forward(String relativeURL)将请求转发到参数指定的资源,与RequestDispatcher接口中的forward()方法功能相同。

例如:

RequestDispatcher view = request.getRequestDispatcher("index.html");

view.forward(request,response);

或者

pageContext.forward("index.html");

6、page变量

page变量是java.lang.Object类型的对象,申明如下:

Object page = this;

它指生成的servlet实例,该变量较少适用。

7、config变量

config是javax.servlet.ServletConfig类型的银行变量。可以在JSp页面传递一组初始化参数,这些参数可以在JSp页面中使用config隐含变量来检索。

例如:

<html><body>

Servlet Name = <%= config.getServletName() %><br>

Email Address = <%=config.getInitParameter("email") %>

</body></html>

8、exception变量

exception是java.lang.Throwable类型的隐含变量,它被用来作为其他页面的错误处理器。为使页面能够使用exception变量,必须在页面的page指令中将isErrorPage的属性值为true。

例如:

<%@ page isErrorPage='true' %>

<html><body>

页面发生了下面的错误:<%= exception.toString() %>

</body></html>

出处:http://write.blog.csdn.net/postedit/9624413 作者:伫望碧落

JSP技术模型(五)JSP隐含变量的更多相关文章

  1. 学生信息管理系统--基于jsp技术和MySQL的简单增删改查

    web实现增删改查的方式有很多啊,对于初学者来说当然是要先了解各部分的传值的方式.本篇博客从jsp技术的最基础方面进行说明. 一.什么是jsp技术 首先,我们要了解什么是jsp技术. jsp技术是基于 ...

  2. JSP运行过程 JSP脚本 静态动态包含 jsp指令 jsp内置对象jsp四大作用域 jsp动作元素 EL表达式 JSTL 设计模式 JSP开发模式 EL内置对象

    Day38 JSP JSP的运行过程具体如下: (1)客户端发出请求,请求访问JSP文件. (2)JSP容器先将JSP文件转换成一个Java源文件(Java Servlet源程序),在转换过程中,如果 ...

  3. JSP隐含变量和Spring中Model在EL表达式中的读取顺序

    偶然中存在着必然,必然中存在着偶然 偶然出现的bug,必然存是由代码的不合理甚至错误的 代码逻辑越长,越复杂,就越容易出现bug 之前项目里几次偶然出现了一个bug,简单的描述就是第一次新增了之后进行 ...

  4. java的JSP技术

    java的JSP技术 [toc] 1.JSP简介 Jsp技术是用来开发java web的页面显示的,所有MVC模型里面的视图层,所以视图层的开发 jsp不是编程语言,三个英文是java server ...

  5. Servlet,jsp,JSP技术 ,JSP编程

     一.Servlet 思考 1 浏览器可以直接打开JAVA/class文件吗? 不可以 2浏览器可以打开HTML.JS 文件吗? 可以 3 JAVA程序可以生成HTML文件吗?可以的,用IO流. 4 ...

  6. JavaWeb之JSP技术总结

    刚接触JSP技术的时候让我想起了在大学学的Asp+VBScript,记得当时我还用aspstudy做了一个小的新闻发布系统作为期末作品,也正是在那时候在卢哥卢老师的指导下走向编程的道路,对编程越来越感 ...

  7. Java Web(五) JSP详解(四大作用域九大内置对象等)

    前面讲解了Servlet,了解了Servlet的继承结构,生命周期等,并且在其中的ServletConfig和ServletContext对象有了一些比较详细的了解,但是我们会发现在Servlet中编 ...

  8. java语言体系的技术简介之JSP、Servlet、JDBC、JavaBean(Application)

    转自:https://zhangkunnan.iteye.com/blog/2040462 前言 Java语言 Java语言体系比较庞大,包括多个模块.从WEB项目应用角度讲有JSP.Servlet. ...

  9. web开发(五) JSP详解(四大作用域九大内置对象等)

    在网上看见一篇不错的文章,写的详细. 以下内容引用那篇博文.转载于<http://www.cnblogs.com/whgk/p/6427759.html>,在此仅供学习参考之用. 一.JS ...

随机推荐

  1. JMeter 怎么保存登录状态

    在Recording Controller中添加一个HTTP Cookie Manager Recording Controller右键-->add-->config element--& ...

  2. MAX2323E - 原理图系列

    在本实施例MAX2323E(3.3V)采用LPC1752驱动器. 一.截图 文件备份:sch20110723.7z 版权声明:本文博主原创文章.博客,未经同意不得转载.

  3. 三星Galaxy s4(i9505)得到完美root权限教程

    三星Galaxy s4(i9505)完美获取root权限教程 论坛上贴吧上关于三星s4 i9505 root的介绍有非常多,方法多种多样.今天小编来介绍一种使用root软件来实现三星i9505一键ro ...

  4. Intel 80x86 寻址模式

    随着进一步的研究,我们会逐渐接触到你的电脑配置模式的内在联系,和设计原则.在这些,解决计算机是一个非常重要的概念,我们需要很好地理解了什么. 一.预赛: (1)作数 在接触寻址方式之前,我们还要先了解 ...

  5. win7通过配置怎么样ODBC数据源

    我的系统是win7最终.找了半天也没有找到控制面板上的卷管理工具--数据源.后来在网上搜索后发现win7事实并非如此开放ODBC数据源管理,打开ODBC数据源管理方法是cmd输入命令框odbcad32 ...

  6. hdu 3460 Ancient Printer

    Problem Description The contest is beginning! While preparing the contest, iSea wanted to print the ...

  7. 读取xml文件"分析 EntityName 时出错"的解决方案

    在涉及到xml与xslt编程的过程中,经常会碰到"分析 EntityName 时出错"的提示,这个不是程序错误,是因为xml文件中使用了一些特殊符号导致的.    XML 节点中不 ...

  8. 从Ubuntu12.04升级到Ubuntu 14.04之后,系统将无法启动

    进入Ubuntu启动界面.通常有几个选项,Ubuntu,Ubuntu先进... 输入e键,进入grub的设置界面.将里面的ro改动为rw就可以. 以上能够启动,临时性的设置 可是为了永久保存这个设置, ...

  9. xdebug的安装和配置方法

    首先让php错误显示,仅仅须要改动php.ini其中的2条指令,把 displayerrors和htmlerrors都设置为On,例如以下所看到的 html_errors = On        di ...

  10. 大约HR升级版的设计为组汇总

    该公司刚刚完成HR系统升级,系统从单一公司实现使用更多的公司使用变更.在一个月的时间升级,虽然很苦,但他们自己的系统架构的感觉获益,有以下的详细的见解: 一.MVC还是非常重要 系统框架是五年前用de ...