`

JSP-编译指令page、include、taglib

    博客分类:
  • JSP
 
阅读更多

编译指令

    JSP 的编译指令是通知 JSP 引擎的消息,它不直接生成输出。编译指令都有默认值,因此开发人员无须为每个指令设置值。

    常见的编译指令有三个。
        page: 该指令是针对当前页面的指令。
        include: 用于指定如何包含另一个页面。
        tablib: 用于定义和访问自定义标签。

    编译指令的格式如下:
        <%@ 编译指令名 属性名="属性值"…%>

1 page 指令

page指令通常位于JSP页面的顶端,一个JSP页面可以使用多条page指令。

page指令属性:
language:声明当前JSP页面使用的脚本语言的种类。目前该属性的值只能为java,默认值也为java,所以通常无须设置。
import
:用来导入包。默认导入的包有:java.lang.*, javax.servlet.*, javax.servlet.http.*, javax,.servlet.jsp.*.
contentType:告知客户端,服务器对此次请求响应的正文格式(MIME类型)和编码字符集。默认为contentType="text/html;charset=UTF-8ISO-8859-1"。如设置为: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源文件保存时所使用的编码。因为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()方法。
extends
:指定JSP编译生成的Servlet所继承的父类或所实现的接口,一般很少用。
buffer
:指定输出缓冲区的大小。JSP的隐含对象out(JSP有九大隐含对象或者说内置对象)用于缓存JSP(其实是Servlet)对客户端浏览器的输出,默认值为8KB,可以设置为none,也可以设置为其他的值,单位为KB。
autoFlush:当输出缓冲区即将溢出时,是否需要强制输出缓冲区的内容。设置为true时可以正常输出,设置为false时,则会在buffer溢出时产生一个异常。默认为true。

 最常用的是import,contentType,pageEncoding,最常见的最简单的JSP模版为:
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>

isELIgnored:如果设定为真,那么JSP中的表达式被当成字符串处理。比如下面这个表达式<p>${2000/20}</p>在isELIgnored="true"时输出为${2000/20},而isELIgnored="false"时输出为100.0。默认为false。

isThreadSafe:用来指定该JSP文件是否支持多线程使用。如果设置为true,则表示该JSP文件支持多线程的使用,也就是表示该JSP文件能够同时处理多个用户的请求;如果设置为false,则表示该JSP文件不支持多线程的使用,也就是表示该JSP文件只能一次处理一个用户的请求。isThreadSafe属性的默认值为true

trimDirectiveWhitespaces:可以使jsp输出的html时去除多余的空行(jsp上使用EL和tag会产生大量的空格和空行)。

deferredSyntaxAllowedAsLiteral:该属性指示在JSP页面的模板文本中是否允许出现字符序列#{。如果该属性的值为false(默认值),当模板文本中出现字符序列#{时,将引发页面转换错误。
    该属性是在JSP 2.1规范中引入的,字符序列#{被保留给表达式语言使用,你不能在模板本中使用字符序列#{。如果在模板文本中需要出现字符序列#{,那么可以将该属性设置为true。

 

2 include指令

 include指令用于在JSP页面中静态包含一个文件,该文件可以是JSP页面、HTML网页、文本文件或一段Java代码。使用了include指令的JSP页面在转换时,JSP容器会在其中插入所包含文件的文本或代码。
include指令的语法如下:
<%@ include file="relativeURLspec" %>

 

3 taglib指令

taglib指令允许页面使用用户定制的标签。
taglib指令的语法如下:
<%@ taglib (uri="tagLibraryURI" | tagdir="tagDir") prefix="tagPrefix" %>

taglib指令有三个属性:
uri:该属性唯一地标识和前缀(prefix)相关的标签库描述符,可以是绝对或者相对的URI。这个URI被用于定位标签库描述符的位置。
tagdir:该属性指示前缀(prefix)将被用于标识安装在/WEB-INF/tags/目录或其子目录下的标签文件。一个隐含的标签库描述符被使用。
    下面三种情况将发生转换(translation)错误:
        属性的值不是以/WEB-INF/tags/开始。
        属性的值没有指向一个已经存在的目录。
        该属性与uri属性一起使用。
prefix:定义一个prefix:tagname形式的字符串前缀,用于区分多个自定义标签。以jsp:,jspx:,java:,javax:,servlet:,sun:和sunw:开始的前缀被保留。前缀的命名必须遵循XML名称空间的命名约定。在JSP 2.0规范中,空前缀是非法的。

 

 

分享到:
评论

相关推荐

    JSP常见的三个编译指令page、include、taglib

    jsp中include指令静态导入和动态导入的区别详解JSP编译指令page、include详解JSP中动态include与静态include的区别介绍JSP指令元素(page指令/include指令/taglib指令)复习整理基于jsp:included的使用与jsp:param乱码...

    JSP中的编译指令和动作指令的两点区别

    您可能感兴趣的文章:JSP常见的三个编译指令page、include、taglibJSP编译指令page、include详解JSP指令元素(page指令/include指令/taglib指令)复习整理JSP语法Page指令JSP页面pageEncoding和contentType属性JSP ...

    JSP指令元素(page指令/include指令/taglib指令)复习整理

    今天复习了JSP指令元素部分,整理了下,跟大家一起分享: 一、page指令:设定JSP页面的全局属性,该配置作用于整个JSP页面,设置包括静态包含的文件。 &lt;&#37;@ page 属性1=”属性值1“ 属性2=”属性值2“ %&gt; 1、...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    2.8.3 在JSP页面中使用Include指令后,JSP不能编译 2.9 精彩回顾 第3章前人栽树后人乘凉 ——、JSP内置对象 3.1 本章学习任务 3.1.1 本章知识体系 3.1.2 实例开发任务 3.2 简化开发JSP内置对象概述 3.2.1 为什么...

    java初学者必看

    17.4.3 Taglib 指令 17.5 JSP动作元素 17.5.1 (jsp:forward) 17.5.2 (jsp:useBean) 17.5.3 (jsp:setProperty) 17.5.4 (jsp:getProperty) 17.5.5 (jsp:include) 17.5.6 (jsp:plugin) 17.6 内置对象 17.6.1 ...

    计算机二级Web程序设计模拟卷(二).doc

    A.page B.taglib C.include D.forward 正确答案:A 您的答案: 本题解析: 暂无解析 15.JSP页面经过编译之后,将创建一个()。 A.applet B.servlet C.application D.exe文件 正确答案:B 您的答案: 本题解析: 暂无...

    java 面试题 总结

    动态INCLUDE用jsp:include动作实现 &lt;jsp:include page="included.jsp" flush="true" /&gt;它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。 静态INCLUDE用include伪码实现,定不会检查所含文件的...

    Java开发技术大全 电子版

    1.2.3编译命令的使用8 1.2.4解释执行命令的使用10 1.2.5UltraEdit的使用11 1.3一个简单的Java应用程序14 1.4一个简单的Java小程序16 1.5本章小结18 第2章Java语言基础19 2.1Java语言的特点19 2.2Java程序的...

    超级有影响力霸气的Java面试题大全文档

     动态INCLUDE用jsp:include动作实现 &lt;jsp:include page="included.jsp" flush="true" /&gt;它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。 静态INCLUDE用include伪码实现,定不会检查所含文件...

Global site tag (gtag.js) - Google Analytics