JSP 9大隐含对象

来源:互联网 发布:上传文件linux服务器 编辑:程序博客网 时间:2024/05/22 05:17
JSP中9大隐含对象

每个JSP页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet),然后按照servlet的调用方式进行调用。由于JSP第一次访问时会翻译成servlet,所以第一次访问通常会比较慢,但第二次访问,JSP引擎如果发现JSP没有变化,就不再翻译,而是直接调用,所以程序的执行效率不会受到影响。JSP引擎在调用JSP对应的jspService时,会传递或创建9个与web开发相关的对象供_jspService使用。JSP技术的设计者为便于开发人员在编写JSP页面时获得这些web对象的引用,特意定义了9个相应的变量,开发人员在JSP页面中通过这些变量就可以快速获得这9大对象的引用。内置对象的特点是

由JSP规范提供,不用编写者实例化。通过Web容器实现和管理所有JSP页面均可使用(excption只有在 errorPage中才能使用)只有在脚本元素的表达式或代码段中才可使用(<%=使用内置对象%>或<%使用内置对象%>),即:在JSP声明中不能访问和使用,因为隐含对象作用域只在_jspService方法中。


结构图:






request 对象

request对象是javax.servlet.http.HttpServletRequest 类的实例。每当客户端请求一个JSP页面时,JSP引擎就会制造一个新的request对象来代表这个请求。
request对象提供了一系列方法来获取HTTP头信息,cookies,HTTP方法等等。
与Servlet的javax.servlet.http.HttpServletRequest使用方式一致。

response对象

response对象是javax.servlet.http.HttpServletResponse类的实例。当服务器创建request对象时会同时创建用于响应这个客户端的response对象。
response对象也定义了处理HTTP头模块的接口。通过这个对象,开发者们可以添加新的cookies,时间戳,HTTP状态码等等。
与Servlet的javax.servlet.http.HttpServletResponse 使用方式一致。


page 对象

page对象类似于Java编程中的this,就是指当前JSP页面本身。而且page是java.lang.Object类型的引用。


config 对象


config 对象里存放着一些Servlet 初始的数据结构。
在web.xml配置Jsp页面

<servlet>    <servlet-name>TestJsp</servlet-name>    <jsp-file>/index.jsp</jsp-file>    <init-param>        <param-name>abc</param-name>        <param-value>123</param-value>    </init-param></servlet> <!-- JSP与URL的映射,可以在浏览器地址栏输入url-pattern配置的值访问页面 --><servlet-mapping>    <servlet-name>TestJsp</servlet-name>    <url-pattern>/test</url-pattern></servlet-mapping>

上面在web.xml中配置了JSP页面,并配置了1个初始化参数,现在我们就可以通过JSP内置的config参数来获取初始化参数值。
  <%= config.getInitParameter("abc") %>
 

out 对象

out对象是jspWriter的内置实例,主要是用来向客户端输出内容。

常用方法:

void println() 向客户端打印字符串。默认会自动刷新缓冲区
void flush() 将缓冲区的内容输出到客户端
void clear( )清除输出缓冲区的内容,如果在flush之后调用会抛出异常
void clearBuffer( )清除输出缓冲区的内容,在flush之后调用不会抛出异常
int getBufferSize( )取得目前缓冲区的大小(KB)
int getRemaining( )取得目前使用后还剩下的缓冲区大小(KB)
boolean isAutoFlush( ),缓冲区满时,是否自动清空缓冲区;false表示不会自动清空并且产生异常。
void close( )关闭输出流,清除所有的内容

session 对象

session对象表示目前个别用户的会话(session)状况。
session对象实现javax.servlet.http.HttpSession接口,HttpSession接口所提供的方法

long getCreationTime()取得session产生的时间,单位是毫秒
String getId()取得session 的ID
long getLastAccessedTime()取得用户最后通过这个session送出请求的时间
long getMaxInactiveInterval()取得最大session不活动的时间,若超过这时间,session 将会失效
void invalidate()取消session 对象,并将对象存放的内容完全抛弃
boolean isNew()判断session 是否为"新"的
void setMaxInactiveInterval(int interval)设定最大session不活动的时间,若超过这时间,session 将会失效

application对象


application对象直接包装了servlet的ServletContext类的对象,是javax.servlet.ServletContext 类的实例。
这个对象在JSP页面的整个生命周期中都代表着这个JSP页面。这个对象在JSP页面初始化时被创建,随着jspDestroy()方法的调用而被移除。通过向application中添加属性,则所有组成您web应用的JSP文件都能访问到这些属性。application对象最常被使用在存取环境的信息。因为环境的信息通常都储存在ServletContext中,所以常利用application对象来存取ServletContext中的信息。使用方式与 ServletContext一致。
常用方法有:

application.setAttribute("name","value");
application.getAttribute("name");
application.removeAttribute("name");
application.getRealPath("/a.txt");


pageContext对象


pageContext是jsp页面的上下文对象,pageContext对象能够存取jsp其他隐含对象。
pageContext对象存取其他隐含对象属性的方法,此时需要指定范围的参数
Object getAttribute(String name, int scope)
Enumeration getAttributeNamesInScope(int scope)
void removeAttribute(String name, int scope)
void setAttribute(String name, Object value, int scope)
注意:范围参数有四个,分别代表四种范围:
PageContext.PAGE_SCOPE:从当前页面的 PageContext中取属性
PageContext.REQUEST_SCOPE:从ServletRequest中取属性
PageContext.SESSION_SCOPE:从HttpSession中取属性
PageContext.APPLICATION_SCOPE:从ServletContext中取属性


pageContext对象取得其他隐含对象的方法
Exception getException( )回传目前网页的异常,不过此网页要为error page,
JspWriter getOut( )回传目前网页的输出流,例如:out
Object getPage( )回传目前网页的Servlet 实体(instance),例如:page
ServletRequest getRequest( )回传目前网页的请求,例如:request
ServletResponse getResponse( )回传目前网页的响应,例如:response
ServletConfig getServletConfig( )回传目前此网页的ServletConfig 对象,例如:config
ServletContext getServletContext( ) 回传目前此网页的执行环境(context),例如:application
HttpSession getSession( )回传和目前网页有联系的会话(session),例如:session


exception对象


被调用的错误页面的结果,只有在错误页面中才可使用,
即在页面指令中设置:<%@page isErrorPage=“true”%>
常用方法:
getMessage( )
getLocalizedMessage( )
printStackTrace(new java.io.PrintWriter(out))

原创粉丝点击