在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. zoj 3823 Excavator Contest(结构体)

    题目链接:zoj 3823 Excavator Contest 题目大意:一个人开着挖掘机要在N*N的格子上面移动.要求走全然部的格子.而且转完次数要至少为n*(n-1) - 1次, 而且终点和起点必 ...

  2. Sicily 1299 Academy Awards (map + vector)集装箱

    链接:http://soj.me/show_problem.php?pid=1299&cid= Description Selected from 3,850 teams from 1,329 ...

  3. Qt Quick 组件和动态创建的对象具体的解释

    在<Qt Quick 事件处理之信号与槽>一文中介绍自己定义信号时,举了一个简单的样例.定义了一个颜色选择组件,当用户在组建内点击鼠标时,该组件会发出一个携带颜色值的信号,当时我使用 Co ...

  4. Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用

    原文:Eval().XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用 “/vs2005”应用程序中的服务器错误.--------------------------- ...

  5. C语言学习_查找三分之二

    查找三分之二: #include <stdio.h> #define M 10 int main(void) { int front, near, mid1, mid2; int n; i ...

  6. NYoj 部分和问题(深搜经典)

    题目链接: http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=1058 #include <stdio.h> ], vis[], co ...

  7. SQL字符串转换为数组

    /*一.按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果. -----rtrim(@str)去掉 @str右边的字符 ltrim(@ ...

  8. 【github课程】创建github仓库和库创建一个版本号,并添加到存储库文件的版本号

    首先,需要登录github注册一个帐号:https://github.com/ 注册帐号登录后,.在右上角,"新仓库": 然后会出现例如以下的界面: 仅仅须要输入仓库的名称,描写叙 ...

  9. Android &quot;QR二维码扫描&quot;

    支持灯 扫描结果 支持 抄.分享.浏览打开(超链接) 自己主动保存扫描记录 划删除 和源代码 git: http://git.oschina.net/892642257/QRCode csdn(0分) ...

  10. HDU 4793 2013 Changsha Regional Collision[简单的平面几何]

    圆形奖章给定半径的半径和圆形区域.另一个硬币的半径,然后在桌面上平稳.给定硬币的速(的大小和方向,vx,vy)和坐标(奖牌同心圆形区域,圆和心脏为源),Q币在一个圆形区域和多少下滑(不管是什么圆形区域 ...