在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. SICP 习题 (1.37)解题总结

    SICP 习题 1.37是一条非常长的题目,主要讲的是无穷连分式.无穷连分式对我来说又是一个陌生的概念,于是又去百度了一番,发现无穷连分式也是一个非常有意思的话题,涉及到无理数的表达.只是我建议大家还 ...

  2. web富客户端应用下,前端架构问题。

    前言: 以前的工作大部分都是,前端做页面 稍微写几个js效果就算是 有复杂的效果 也没有涉及到 需要去调用后端数据的层面.总体来说,以前的页面逻辑会相对简单后端会做更多的事. 而现在,这些任务都抛给前 ...

  3. hibernate 管理 Session(单独使用session,不spring)

    Hibernate 本身提供了三个管理 Session 对象的方法 Session 对象的生命周期与本地线程绑定 Session 对象的生命周期与 JTA 事务绑定 Hibernate 托付程序管理 ...

  4. Stopwatch计时器、秒表 C#

    .NET2.0也提供了这样一个秒表:Stopwatch类,它可以比较精确地测量时间. 速度测试: 软件的性能和可测性是一个复杂的主题.要确保应用程序能够满足用户的期望,就需要在开发周期内考虑它的性能和 ...

  5. windows下系统移植到linux下出现的问题

    今天遇到了一个之前没有遇到的问题,记录一下. 我们是在windows下进行开发的,最终系统是部署在linux服务器上. 在windows一切正常,但是部署到linux下时,有些功能不能用了.通过log ...

  6. 使用CNN(convolutional neural nets)关键的一点是检测到的面部教程(四):学习率,学习潜能,dropout

    第七部分 让 学习率 和 学习潜能 随时间的变化 光训练就花了一个小时的时间.等结果并非一个令人心情愉快的事情.这一部分.我们将讨论将两个技巧结合让网络训练的更快! 直觉上的解决的方法是,開始训练时取 ...

  7. Nuget介绍及使用技巧

    一.介绍 什么是Nuget? 引用自Nuget网站的原话“NuGet is the package manager for the Microsoft development platform inc ...

  8. java_linux_shell_定时kill 启动java程序

    #!/bin/bash #while truedo Process_ID=`ps -ef |grep 'LoginSinaWeiboCookie.jar' |grep -v grep |awk '{p ...

  9. 基于Servlet、JSP、JDBC、MySQL登录模块(包括使用的过滤器和配置)

    遇见前文的注冊模块,本篇是登录模块.主要包含登录主界面,和登录相关编写的LoginAction.LoginDao和LoginService.以及配置的Filter.以下按逻辑顺序记录具体过程和代码: ...

  10. 信号量机制DOWN操作和UP操作的详细说明

    DOWN操作:linux内核.信号DOWN例如,下面的操作: void down(struct semaphore *sem); //不间断 int down_interruptible(struct ...