在原来的JSP 1.2中,有page、include与taglib三种Directive Elements(指令元素),在JSP 2.0之后,新增Tag File,它自身拥有tag、attrivute和variable三个指令元素。 指令元素的语法使用<%@ 与 %>包括,因为每个元素的使用场合各不相同,在这边不直接介绍所有的用法,先要介绍page的用法,以实例来说明:
<%@page info="JSP指令元素示范"%> 在例子中介绍了page的三个属性设定:info、contentType与import。
用于设定目前JSP页面的基本信息,这个信息最后会转换为Servlet程序中使用getServletInf()所取得的信息,在例子中使用JSP中的隐含对象(Implicit object)page,page对象对应的Java对象类型是Object,简单的说代表目前这个JSP转换过后的Servlet对象本身,也就相当于 this,HttpJspPage是该Servlet对象实现的一个接口,我们转型至HttpJspPage类型,如此就可以使用 getServletInfo()方法取得JSP的页面信息,而这个信息在例子中被用于设定网页标题。
用于设定MIME类型及网页编码方式,在这边设定的是text/html,而编码方式则设定Big5码,这个部份的设定是给浏览器判断该以什么样的方式显示网页文件,在Servlet中,这个部份是对应于 HttpServletResponse对象的setContentType()方法:
response.setContentType("text/html;charset=Big5");
使用Big5码编码网页时,有些中文字的显示会有问题(例如碁),这时候可以尝试改为MS950编码看看是否能正确显示。
相当于Java语法中的import,可以用这个属性来缩短一些类的名称指定,例如 java.util.Date在使用import属性设定后,就可以直接在撰写程序时直接使用Date名称。
page元素除了以上三个属性设定之外,还有其它的属性,我们介绍如下:
用于设定至客户端的输出串流是否要自动出清,默认是true,如果设定为false,而缓冲区满了却还没将数据送出至客户端,将会产生异常。
用于设定至客户端的输出串流缓冲区大小,默认是8KB。
用于设定当JSP执行错误而产生异常时,该由哪一个页面处理这个异常。
可以用来指定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
用以设定JSP页面是否为处理异常的页面,这个属性要与errorPage配合使用,将在之后介绍。
用来指定Container使用哪一种语言的语法来编译JSP网页,言下之意是JSP可以使用其它的语言来撰写,不过这是就将来而言,目前只能使用Java的语法且是默认。
可设定是否使用session对象,默认是true。
用于指定JSP网页转为Servlet编译时采取的编码方式,如此在编译时才能正确的转换程序码中设定的字节,例如如果JSP网页中包括Big5中文字的话,必须设定<%@ page pageEncoding="Big5"%>,默认是作业系统的语系设定。
用以设定JSP网页中是否忽略Expression
Language,默认是false,如果设定为true,则Expression
Language被会被转译,这个设定会推翻web.xml中的<el-ignored>设定,Expression
Language在JSP 2.0成为标准规格之一,将在之后介绍。
决定转译之后的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> |