ITEEDU

JSP/Servlet: page Directive Element

在原来的JSP 1.2中,有page、include与taglib三种Directive Elements(指令元素),在JSP 2.0之后,新增Tag File,它自身拥有tag、attrivute和variable三个指令元素。

指令元素的语法使用<%@ 与 %>包括,因为每个元素的使用场合各不相同,在这边不直接介绍所有的用法,先要介绍page的用法,以实例来说明:

nowTime.jsp
<%@page info="JSP指令元素示范"%>
<%@page contentType="text/html;charset=Big5"%>
<%@page import="javax.servlet.jsp.HttpJspPage,java.util.Date"%>
<html>
<head>
    <title><%= ((HttpJspPage)page).getServletInfo() %></title>
</head>
<body> 
   现在时间: <b><%= new Date() %>
</body>
</html> 

在例子中介绍了page的三个属性设定:info、contentType与import。

info

用于设定目前JSP页面的基本信息,这个信息最后会转换为Servlet程序中使用getServletInf()所取得的信息,在例子中使用JSP中的隐含对象(Implicit object)page,page对象对应的Java对象型态是Object,简单的说代表目前这个JSP转换过后的Servlet对象本身,也就相当于 this,HttpJspPage是该Servlet对象实作的一个接口,我们转型至HttpJspPage型态,如此就可以使用 getServletInfo()方法取得JSP的页面信息,而这个信息在例子中被用于设定网页标题。

contentType

用于设定MIME型态及网页编码方式,在这边设定的是text/html,而编码方式则设定Big5码,这个部份的设定是给浏览器判断该以什么样的方式显示网页文件,在Servlet中,这个部份是对应于 HttpServletResponse对象的setContentType()方法:

response.setContentType("text/html;charset=Big5");

使用Big5码编码网页时,有些中文字的显示会有问题(例如碁),这时候可以尝试改为MS950编码看看是否能正确显示。

import

相当于Java语法中的import,可以用这个属性来缩短一些类别的名称指定,例如 java.util.Date在使用import属性设定后,就可以直接在撰写程序时直接使用Date名称。

page元素除了以上三个属性设定之外,还有其它的属性,我们介绍如下:

autoFlush

用于设定至客户端的输出串流是否要自动出清,预设是true,如果设定为false,而缓冲区满了却还没将数据送出至客户端,将会产生例外。

buffer

用于设定至客户端的输出串流缓冲区大小,预设是8KB。

errorPage

用于设定当JSP执行错误而产生例外时,该由哪一个页面处理这个例外。

extends

可以用来指定JSP网页转译为Servlet程序之后,该继承哪一个类别,以Tomcat 5.5.4为例,预设是继承自org.apache.jasper.runtime.HttpJspBase,而HttpJspBase又继承自 HttpServlet,这个类别的继承架构则如下:

java.lang.Object
  javax.servlet.GenericServlet
   javax.servlet.http.HttpServlet
     org.apache.jasper.runtime.HttpJspBase

isErrorPage

用以设定JSP页面是否为处理例外的页面,这个属性要与errorPage配合使用,将在之后介绍。

language

用来指定Container使用哪一种语言的语法来编译JSP网页,言下之意是JSP可以使用其它的语言来撰写,不过这是就将来而言,目前只能使用Java的语法且是预设。

session

可设定是否使用session对象,预设是true。

pageEncoding

用于指定JSP网页转为Servlet编译时采取的编码方式,如此在编译时才能正确的转换程序代码中设定的字符,例如如果JSP网页中包括Big5中文字的话,必须设定<%@ page pageEncoding="Big5"%>,预设是操作系统的语系设定。

isELIgnored

用以设定JSP网页中是否忽略Expression Language,预设是false,如果设定为true,则Expression Language被会被转译,这个设定会推翻web.xml中的<el-ignored>设定,Expression Language在JSP 2.0成为标准规格之一,将在之后介绍。

isThreadSafe

决定转译之后的Servlet是否为执行绪安全的,默认值是true,如果设定为false,则转译之后的Servlet会实作SingleThreadModel界面,相当不建议这么作。

您可以在使用page元素时一行一行撰写,也可以撰写在同一个 <%@ 与 %>之间,例如:

< %@page contentType="text/html;charset=Big5" 
import="javax.servlet.jsp.HttpJspPage,java.util.Date"%>

当然如果内容太长,仍是分开撰写来得明了;最后列出范例所传回的HTML内容:

<html> 
<head> <title>JSP指令元素示范</title></head>
<body> 现在时间: Wed May 05 20:27:02 CST 2004
</body> </html>