12.3 实例:脚本元素和指令的应用 下面是一个使用JSP表达式、Scriptlet、声明、指令的简单例子。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE>JavaServer Pages</TITLE> </HEAD>
<BODY BGCOLOR="#FDF5E6" TEXT="#000000" LINK="#0000EE" VLINK="#551A8B" ALINK="#FF0000"> <CENTER> <TABLE BORDER=5 BGCOLOR="#EF8429"> <TR><TH CLASS="TITLE"> JSP应用实例</TABLE> </CENTER> <P> 下面是一些利用各种JSP功能生成的动态内容: <UL> <LI><B>表达式.</B><BR> 你的主机名: <%= request.getRemoteHost() %>. <LI><B>JSP Scriptlet.</B><BR> <% out.println("查询字符串: " + request.getQueryString()); %> <LI><B>声明(和表达式).</B><BR> <%! private int accessCount = 0; %> 服务器启动以来访问次数: <%= ++accessCount %> <LI><B>指令(和表达式).</B><BR> <%@ page import = "java.util.*" %> 当前日期: <%= new Date() %> </UL>
</BODY> </HTML> |
12.4 JSP预定义变量 为了简化JSP表达式和Scriptlet的代码,JSP提供了8个预先定义的变量(或称为隐含对象)。这些变量是request、response、out、session、application、config、pageContext和page。
12.4.1 request 这是和请求关联的HttpServletRequest,通过它可以查看请求参数(调用getParameter),请求类型(GET,POST,HEAD,等),以及请求的HTTP头(Cookie,Referer,等)。严格说来,如果请求所用的是HTTP之外的其他协议,request可以是ServletRequest的子类(而不是HttpServletRequest),但在实践中几乎不会用到。
12.4.2 response 这是和应答关联的HttpServletResponse。注意,由于输出流(参见下面的out)是带缓冲的,因此,如果已经向客户端发送了输出内容,普通Servlet不允许再设置HTTP状态代码,但在JSP中却是合法的。
12.4.3 out 这是用来向客户端发送内容的PrintWriter。然而,为了让response对象更为实用,out是带缓存功能的PrintWriter,即JspWriter。JSP允许通过page指令的buffer属性调整缓存的大小,甚至允许关闭缓存。
out一般只在Scriptlet内使用,这是因为JSP表达式是自动发送到输出流的,很少需要显式地引用out。
12.4.4 session 这是和请求关联的HttpSession对象。前面我们已经介绍过会话的自动创建,我们知道,即使不存在session引用,这个对象也是自动绑定的。但有一个例外,这就是如果你用page指令的session属性关闭了会话,此时对session变量的引用将导致JSP页面转换成Servlet时出错。
12.4.5 application 这是一个ServletContext,也可以通过getServletConfig().getContext()获得。
12.4.6 config 这是当前页面的ServletConfig对象。
12.4.7 pageContext 主要用来管理页面的属性。
12.4.8 page 它是this的同义词,当前用处不大。它是为了Java不再是唯一的JSP编程语言而准备的占位符。