JSP隐式对象
public void _jspService(HttpServletRequest request,
HttpServletResponseresponse)
throwsjava.io.IOException, ServletException
{
JspFactory_jspxFactory = null;
PageContextpageContext = null;
HttpSession session = null;
ServletContextapplication = null;
ServletConfigconfig = null;
JspWriterout=null;
Objectpage = this;
...
...
Throwable exception =
org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);
if(exception != null) {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
九大隐式对象
requestresponse pageContext sessionapplication config outpage exception
out隐式对象
lout隐式对象用于向客户端发送文本数据。
lout对象是通过调用pageContext对象的getOut方法返回的,其作用和用法与ServletResponse.getWriter方法返回的PrintWriter对象非常相似。
lJSP页面中的out隐式对象的类型为JspWriter,JspWriter相当于一种带缓存功能的PrintWriter,设置JSP页面的page指令的buffer属性可以调整它的缓存大小,甚至关闭它的缓存。
l只有向out对象中写入了内容,且满足如下任何一个条件时,out对象才去调用ServletResponse.getWriter方法,并通过该方法返回的PrintWriter对象将out对象的缓冲区中的内容真正写入到Servlet引擎提供的缓冲区中:
ü设置page指令的buffer属性关闭了out对象的缓存功能
üout对象的缓冲区已满
ü整个JSP页面结束
out隐式对象工作原理
JSP指令
lJSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。在JSP2.0规范中共定义了三个指令:
•page指令
•Include指令
•taglib指令
JSP指令简介
lJSP指令的基本语法格式:
<%@指令 属性名="值" %>
举例:<%@ pagecontentType="text/html;charset=gb2312"%>
l如果一个指令有多个属性,这多个属性可以写在一个指令中,也可以分开写。
例如:
<%@page contentType="text/html;charset=gb2312"%>
<%@page import="java.util.Date"%>
也可以写作:
<%@page contentType="text/html;charset=gb2312"import="java.util.Date"%>
Page指令
lpage指令用于定义JSP页面的各种属性,无论page指令出现在JSP页面中的什么地方,它作用的都是整个JSP页面,为了保持程序的可读性和遵循良好的编程习惯,page指令最好是放在整个JSP页面的起始位置。
lJSP 2.0规范中定义的page指令的完整语法:
<%@ page
[language="java" ]
[extends="package.class" ]
[import="{package.class | package.*},..." ]
[session="true | false" ]
[buffer="none | 8kb | sizekb" ]
[autoFlush="true | false" ]
[isThreadSafe="true | false" ]
[info="text" ]
[errorPage="relative_url" ]
[isErrorPage="true | false" ]
[contentType="mimeType [ ;charset=characterSet ]"| "text/html ; charset=ISO-8859-1" ]
[pageEncoding="characterSet | ISO-8859-1" ]
[isELIgnored="true | false" ]
%>
include指令
linclude指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。所以include指令引入通常也称之为静态引入。
l语法:
<%@include file="relativeURL"%>
其中的file属性用于指定被引入文件的路径。路径以“/”开头,表示代表当前web应用。
l细节:
ü被引入的文件必须遵循JSP语法。
ü被引入的文件可以使用任意的扩展名,即使其扩展名是html,JSP引擎也会按照处理jsp页面的方式处理它里面的内容,为了见明知意,JSP规范建议使用.jspf(JSP fragments)作为静态引入文件的扩展名。
ü由于使用include指令将会涉及到2个JSP页面,并会把2个JSP翻译成一个servlet,所以这2个JSP页面的指令不能冲突(除了pageEncoding和导包除外)。