JSP的编译指令是通知JSP引擎的消息,他不直接生成输出。编译指令都有默认值,因此开发人员不用为每个指令都设置值。常见的编译指令有三个。
- Page:该指令是针对当前页面的指令。
- Include:用于指定包含另一个界面
- Taglib:用于定义和访问自定义标签。
编译指令的格式:<%@ 编译指令名 属性名=”属性值” ···%>
page指令
page指令通常位于JSP页面的顶部,一个JSP页面可以有多条page指令,以下只列举常用的几个:
<%@page
[session=”true|false”]
[autoFlush=” true|false”]
[isThreadSafe=” true|false”]
[isErrorPage=” true|false”]
[errorPage=”relativeURL”]
[pageEncoding=”ISO-8859-1”]
[contentType=”mimeType[;charset=characterSet]”|”text/html;charset=ISO-8859-1”]
import=”java.util.*”
%>
其中page指令各个属性的含义
- Session:设定这个JSP页面是够需要HTTPSession。
- autoFlush:当输出缓冲区即将溢出时,是否强行输出缓冲区的内容,设置为true是正常输出,设置为false,则会在buffer溢出时产生一个异常。
- isThreadSafe属性用来指定该JSP文件是否支持多线程使用。如果设置为true,则表示该JSP文件支持多线程的使用,也就是表示该JSP文 件能够同时处理多个用户的请求;如果设置为false,则表示该JSP文件不支持多线程的使用,也就是表示该JSP文件只能一次处理一个用户的请求。 isThreadSafe属性的默认值为true。
- isErrorPage:设置本JSP是否错误处理程序。如果该页面已是错误处理页面,通常无需指定errorPage属性。
- errorPage:指定错误处理页面。如果本页面产生了异常或者错误,而该JSP页面没有对应的处理代码,则会自动调用该属性指定的JSP页面。
- PageEncoding:指定生产网页的编码字符集。
- contentType:用于设定生成网页文件的文件格式和编码字符集,即MIME类型和页面字符集类型,默认的MIME类型是text/html;默认的字符集类型是ISO-8859-1。具体的MIME类型可到Tomcat下conf路径下的web.xml中查询,例如<mine-mapping>
<extension>doc</extension>
<mine-type>application/msword</mine-type>
</mine-mapping>
这个就是用Word形式下载的MIME参数。
- import:用于导入本页面中使用的类,如果没有导入这些类,则需在脚本中使用全限定名。可见,此处的import属性类似于Java程序中的import关键字的作用。
Include指令
使用include指令,可以讲一个外部文件嵌入到当前的JSP文件中。它分为动态包含和静态包含两种。格式如下:
静态包含:<%@ include file="被包含页面"%>
动态包含:<jsp:include page="被包含页面" flush="true">
下面就仔细谈谈他们两个的区别
1. 静态包含会将包含的页面加入到本页面,融合成一个页面,因此没包含的页面甚至不需要是一个完整的页面,实际上包含页面在编译时将完全包含了被包含页面的代码。静态包含发生在JSP—>.java文件阶段,最后只有一个可执行的.class文件。需要指出的是,静态包含还会将包含页面的编译指令包含进来,如果两个页面冲突的话,页面就会出错。动态包含是在执行时,把web请求和响应对象传过去,对请求和相应对象进一步处理。动态包含发生在执行class文件阶段,动态加入,会生成一个或多个.class文件。
2. <%@ include file>是直接包含源代码,<jsp:include>包含请求的HTML代码,并且支持JSP表达式和Struts应用中的请求模式。
3. 通过<jsp:include>包含一个JSP页面,在包含的页面中相关的response操作都被忽略,也就是说当前操作不能通过response对象重定向到其他页面。如果用<%@include>包含的JSP页面,在该页面中所有的response操作都会正常运行。
4. <jsp:include>元素请求代码时,可以带参数,而<%@include>就不可以带参数。
5. 从执行速度角度上讲,<%@include>比<jsp:include>请求速度快,因为<%@include>仅处理一个请求,而<jsp:include>处理两个请求。
6. 从实际应用角度上讲,<%@include>用于检测用户是否登录、网站标识或网站的一些静态不变的信息;而<jsp:include>用于发送一个请求,并接收返回的HTML,并可以加入参数。
这些区别我认为是总结最全的了,先后总结了我所学的课件,李刚老师的著作,以及网上许多大神的博客。