`

jsp指示元素

阅读更多

指示元素

指示元素的作用是:指示容器在将JSP翻译成servlet的过程中,应该加入什么样的附加内容
举例来说,我们在写servlet时,可以用import语句导入一个类或一个包,但是,在JSP页面中是不能在脚本元素中使用import语句的。这是 因为所有的脚本元素在翻译成servlet后都被放到了JSP实现类的类体中(即不能放在类定义之外),而import语句是不能被包含在类体中的。因 此,要想在JSP页面中导入一个类,就必须要想其它的办法。指示元素的意义就在于此


指示元素一共有3个,即page、include、taglib
所有指示元素都采用如下的基本语法:
<%@ directive attribute1=“value1”
                            attribute2=“value2”
                            attributeN=“valueN”
%>

 

page指示元素     page指示元素     page指示元素     page指示元素     page指示元素     page指示元素     page指示元素    

 

page指示元素包含了与整个JSP页面有关的一些属性(一共13个属性)
在一个JSP翻译单元(翻译单元是指JSP源文件及其它通过include指示包含进来的JSP文件)中,可以包含多个独立的page指示。但是,在整个 翻译单元中,page指示中的属性只能被设置一次。也就是说,如果在一个page指示中已经设置了某一属性,则在其它的page指示中就不能再设置它了。 这里有两个例外,一个是import属性,一个是pageEncoding属性

 


虽然page指示是位置无关的(即无论page指示出现在页面的什么地方,对整个页面都是有效的),但建议在JSP页面的开头就写上它
语法形式:
<%@ page   属性列表 %>
属性列表采用“名字/值”对形式

1

 

language属性
设置JSP页面中脚本元素使用的脚本语言
默认值为java(只能是java)
没必要设置这个属性

2

extends属性
设置由JSP翻译成的servlet类要扩展的父类
属性值必须是一个完整的类名
默认值由容器进行设置。一般情况下用户不要设置这个属性

3


import属性
用来向JSP页面servlet中导入一个类或者一个包
属性值是一个合法的完整类名或包名
import属性可以被指定多次,也可以在一个import属性中加入多个值(用逗号分隔)。指定了该属性后会在翻译生成的servlet类中加入相应的import语句。示例:
<%@ page import=“java.util.*, java.sql.*” %>
不设置这个属性,JSP页面servlet也会默认导入以下包:java.lang.*、javax.servlet.*、javax.servlet.jsp.*、javax.servlet.http.*

4


session属性
用于指示当前JSP页面中会话是否有效
默认值为true
示例:
<%@ page session=“true” %>
JSP中会话的概念和servlet中的会话是一样的。当session=“true”时,在该页面中JSP的隐含对象session是有效的;当session=“false”时,在该页面中JSP的隐含对象session是无效的
设置这个属性实际上是在控制在页面servlet类中是否要定义一个HttpSession的实例

5


buffer属性
用来设置输出的缓冲区的最小值
属性值:
None:表示不使用缓冲
整数:表示缓冲区的大小,单位是KB
示例:
<%@ page buffer=“32” %>
默认值为8KB
缓存是重要的,因为即使在页面开始生成输出以后,缓冲也允许添加或者更改响应的标题。另外,缓存可以取消一个页面的输出,以及把请求转发给另外的页面

6


autoFlush属性
用来指示如何处理缓冲溢出问题,是自动刷新,还是抛出一个异常
默认值为true(自动刷新)
示例:
<%@ page autoFlush=“true” %>
如果一个缓冲区被写满,通常就说这个缓冲区溢出了。当缓冲区溢出时,有两种处理办法:一种是自动将缓冲区中的内容写到客户端,然后将缓冲区清空,这样就可以继续使用缓冲区了;另一种办法就是停止缓冲区的使用,并抛出一个异常

 

注意:当buffer=“none”时,不能设置autoFlush=“false”。因为:如果没有缓冲区,设置autoFlush=“false”使得每次页面被请求时都会产生一个异常。如果没有缓冲区的话,对客户端页面的输出必须总是立即刷新

7

isThreadSafe属性
用来指示这个页面在线程不安全的情况下是否可并行处理请求。默认值为true
示例:
<%@ page isThreadSafe=“true” %>
当isThreadSafe=“true” 时,JSP页面可以对多个客户请求同时进行处理,这时jsp页面实现类不实现SingleThreadModel接口;而当 isThreadSafe=“false” 时,JSP页面在处理多个客户请求时,会将所有的请求排队,一个一个地进行处理,这时, jsp页面实现类实现SingleThreadModel接口
注意,JSP2.0规范不推荐使用这个属性


8

info属性
用来设置JSP的作者、版权等内容
通过getServletInfo()方法来取得这个属性的值
示例:
<%@ page info=“王大,版权所有” %>

9

isErrorPage属性
用来指定当前的JSP页面是不是一个错误处理页面
默认值为false
示例:
<%@ page isErrorPage=“true” %>
所谓错误处理页面就是当其它JSP页面出错时可以导向的页面。页面出错时,往往会抛出一个异常,错误页面能够接收到其它页面抛出的异常,程序员就可以对异常进行分析处理
当isErrorPage=“true”时,在该页面中exception隐含对象有效,表明当前页面是错误处理页面,可以作为其它页面的errorPage属性的URL

10

errorPage属性
用来指定当当前页面发生不可捕获的异常时,客户被转发的错误处理页面的URL地址
属性值:错误处理页面的URL地址
示例:
<%@ page errorPage=“invalid_login.jsp”%>
<%@ page errorPage=“/error/ invalid_login.jsp”%>
URL地址只能是相对URL。以“/”开始的相对URL相对于Web应用程序的文档根目录被解释;不以“/”开始的相对URL相对于JSP页面的当前目录被解释
错误页面必须和被请求的JSP页面位于同一个服务器上


errorPage属性必须和输出缓冲一起使用。如果没有使用缓冲,当不能捕获到的异常发生时,JSP容器将不能把请求转发给错误处理页面。同样,当缓冲区充满时,如果页面被刷新, JSP容器也不能把请求转发给错误处理页面
默认的错误处理页面是和容器相关的,不同的容器设置的错误处理页面是不同的

11

contentType属性
用来指明JSP页面生成的响应的MIME类型和字符编码
属性值:
格式为:“TYPE; charset=CHARSET”
其中,TYPE=text/html或其它,CHARSET代表字符集的名字,一般是GBK或gb2312
默认值:
TYPE的默认值是text/html,而CHARSET的默认值由pageEncoding属性的值给出

12
pageEncoding属性
用来指定JSP页面的字符编码集
属性值:字符集的名字
默认值:iso-8859-1

13
isELIgnored属性
用来设置JSP页面和整个翻译单元中的EL表达式是被忽略,还是把它们计算出来
属性值:true/false
不同的web.xml版本有不同的默认值。Servlet 2.4版本的web.xml默认值是true

 

include指示元素     include指示元素     include指示元素     include指示元素     include指示元素     include指示元素    


在把JSP页面翻译成servlet之前,使用include指示元素将指定的文件加入到当前的JSP页面中
语法:
<%@ include file=“local_url” %>
属性值local_url代表要加入到JSP页面中的文件的相对URL。和page指示的errorPage属性相似,可以使用两种类型的URL。例如:
<%@ include file=“includes/footer.jsp” %>
<%@ include file=“/includes/footer.jsp” %>
include标记实质上是用引用的文件的内容替换掉标记本身


被引用的文件可以是文本文件、HTML文件、JSP文件或者XML文件。所有被引用的文件都会在当前JSP文件中被展开,同当前JSP文件一起组成一个编译单元同时进行翻译
特别注意,JSP容器不能感知到被包含文件的变化。如果被包含的文件的内容发生了变化,则必须要重新编译当前的JSP页面
示例程序include.JSP,它使用include指示引用了两个JSP文件header.jsp和footer.jsp


taglib指示元素   taglib指示元素   taglib指示元素   taglib指示元素   taglib指示元素   taglib指示元素   taglib指示元素  


taglib指示元素用来指示JSP页面引用一个定制的标记库。一个定制标记库是定制标记的一个集合
什么是定制标记库?
在JSP中,标记可以分成两种类型,一种就是JSP中已经定义好的标记,如脚本元素标记、page指示标记等,这类标记称为标准标记。但是用户在开发 JSP页面时,还是希望能够定义一些个些化的标记,以实现一些特殊的功能。为此,JSP规范中就为用户自定义标记提供了一套完整的方法来生成具有定制功能 的标记。在这套方法中,将用户自定义的标记统一存放到一个用户指定的库中,这个库就是定制标记库


如何使用自定义标记?
如果用户想要在JSP页面中使用自定义标记,就必须要向容器声明将要使用的自定义标记是在哪个标记库中,它的前缀是什么。这时就要用到taglib指示元素
示例:
<%@ taglib uri=“http://www.mycorp/supertags” prefix=“super” %>
它的意思是:JSP页面将用到一个自定义标记,这个标记所用到的标记库描述文件(Tag Library Descriptor ,TLD)位于http://www.mycorp/supertags ,标记前缀名是super


标记库描述文件是用来说明一个标记库具体情况的XML文件,文件的扩展名是.tld。标记前缀名则是将要用在自定义标记前面的名字,标记名和前缀名用冒号(:)分开。例如,<super:doMagic>
实际上,用户自定义标记在容器看来是一种行为元素,它与JSP标准行为一样都会对输出流产生影响
语法:
<%@ taglib uri=“taglib_uri”          prefix=“tag_prefix” %>


属性说明:
uri属性:可以是绝对的,也可以是相对的,它的作用是指定标记库描述文件的位置。JSP规范规定,uri属性必须解析为本地的TLD文件。因此,对于一个绝对的URI,必须在web.xml文件中把它映射到一个本地资源
JSP容器分析taglib指示元素的时候,会首先在web.xml文件中查找映射。如果映射不存在并且使用了绝对URI,将会出错;如果映射不存在并且使用了相对URI,JSP容器就会在本地查找TLD文件:
如果相对URI以“/”开始,它的位置被解析为是相对于Web应用程序的文档根目录
如果相对URI不以“/”开始,它的位置被解析为是相对于JSP页面当前目录

 

prefix属性:用来指定标记的前缀名。前缀名的用法是<前缀名:标记名>。例如,前缀名为myPrefix,在使用标记myTag时,则要写成<myPrefix:myTag>
前缀名jsp、jspx、java、javax、servlet、sun、sunw是JSP规范中定义的保留字,不能用于用户自定义的前缀名
在一个JSP页面中可以多次使用taglib指示元素.

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics