JSP三大编译指令之page指令

时间:2021-03-16 13:36:53
JSP的编译指令是通知JSP引擎的消息,它不直接生成输出。编译指令都有默认值,因此开发人员无须为每个指令设置值。
常见的编译指令有如下三个:
① page:该指令是针对当前页面的指令。
② include: 用于指定包含另一个页面。
③ taglib: 用于定义和访问自定义标签。

使用编译指令的语法格式如下:

<%@ 编译指令名 属性名=“属性值”...%>

page指令

page指令通常位于JSP页面的顶端,一个JSP页面可以使用多条page指令。下面介绍page指令各属性的含义:
language:声明当前JSP页面使用的脚本语言的种类。目前该属性的值只能为java,默认值也为java,所以通常无须设置。
import
:用来导入包。下面几个包是默认自动导入的,默认导入的包有:java.lang.*, javax.servlet.*, javax.servlet.http.*, javax,.servlet.jsp.*.
contentType:用于告知客户端,服务器对此次请求所发回的响应的正文格式(MIME类型)和编码字符集。默认的MIME类型为text/html,默认的字符集为ISO-8859-1,国内开发一般将字符集设置为UTF-8或者GBK。所以常见这一项为:contentType="text/html;charset=UTF-8",这就是说,告诉客户端,服务器的响应的正文文件格式为text/html,这样客户端就会选择以它自己的默认的浏览器打开文件,而不是别的应用程序。 charset=UTF-8可以告知客户端浏览器,服务器返回的文件的编码格式为UTF-8,这样浏览器就按照UTF-8格式进行解码并且以UTF-8字符集进行显示页面。contentType的作用本质上相当于模拟了一个Http协议的消息头。contentType虽然写在JSP文件中,但是因为JSP文件其实并不能直接响应客户端请求,它必须编译成对应的Servlet以后才能响应请求。所以本质上这个contentType是针对Servlet的设置,即Servlet告诉客户端,我返回的文件(以流的形式,response.getWriter())的MIME类型为text/html,文件的编码字符集为UTF-8。
pageEncoding :设定JSP源文件保存时所使用的编码(MyEclipse中右击文件->Properties->Resource->Text file encoding,对于MyEclipse,pageEncoding的值设置为哪种字符集,保存时自动采用这种字符集保存)。因为JSP文件要想响应客户端的请求,它就必须先被编译成一个Servlet,而Servlet是一个Java类,Java类在内存中是以Unicode进行编码的,如果JSP引擎(将JSP翻译成对应的Servlet)不知道JSP的编码格式,就无法进行解码,然后将其转换成内存中的Unicode编码。注意区分contentType的charset和pageEncoding, charset是响应时Servlet(JSP已经编译成了Servlet)告诉客户端浏览器”我“是以这种字符编码的,”你“也要以这种字符解码并显示,整个过程涉及服务器和客户端两方面,而 pageEncoding是服务器端JSP文件告诉JSP引擎要以何种编码进行解码,即此时JSP还没被编译成Servlet,它是被编译成Servlet的前提准备工作,整个过程都发生在服务器端,与客户端无关。
session:设定这个JSP页面是否支持session机制,默认为true,所以一般不需要设置,保持默认值即可。
errorPage:指定错误处理页面的地址。如果本页面产生了异常或者错误,而该JSP页面没有对应的处理代码,此时就会自动调用该属性所指向的JSP页面。
isErrorPage:和errorPage属性配合使用。设置本JSP页面是否为错误处理页面。
info:设置该JSP程序(不要忘记本质上是个Servlet)的信息,也可以看做其说明。可以通过Servlet.getServletInfo()方法获取该值。在JSP页面中,可以直接调用getServletInfo()方法获取该值如:<%=getServletInfo()%>.因为JSP是Servlet,而任何一个Servlet都实现了Servlet接口,Servlet接口中含有getServletInfo()方法。亲,还记得大明湖畔的Servlet接口中的五个方法吗!
extends
:指定JSP编译生成的Servlet所继承的父类或所实现的接口,一般很少用。
buffer
:指定输出缓冲区的大小。JSP的隐含对象out(JSP有九大隐含对象或者说内置对象)用于缓存JSP(其实是Servlet)对客户端浏览器的输出,默认值为8KB,可以设置为none,也可以设置为其他的值,单位为KB。
autoFlush:当输出缓冲区即将溢出时,是否需要强制输出缓冲区的内容。设置为true时可以正常输出,设置为false时,则会在buffer溢出时产生一个异常。

上面11个属性中最常用的还是import,contentType,pageEncoding,所以最常见的最简单的JSP模版为:
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<title>Insert title here</title>
</head>
<body>

</body>
</html>