JSP系列二:JSP指令元素:page指令,include指令,taglib指令


JSP指令元素:page指令,include指令,taglib指令

一,指令元素(directive elements):控制所生成的servlet结构。

 JSP指令用于“转换阶段”提供整个JSP页面的相关信息,影响由JSP页面生成的Servlet的整体结构。
 指令不会产生任何的输出到当前的输出流中。
 
 1,指令元素语法:
  <%@ directive {attr="value"}* %>
   说明:
  <和% 以及和@,%和>之间不能有任何的空格。
  属性值两边的双引号可以替换为单引号。引号标记不能完全省略。
  在属性中使用引号使用/进行转义。
 2,指令的xml语法:
  <jsp:directive.directiveType attr="value1" attr="value2" ... />
 
  在编写XML兼容的jsp页面时,只要不在同一页面中混用xml语法和标准语法,就可以使用指令的xml兼容模式。
 
 3,指令的三种类型:
  page,include,taglib。

二,page指令 : 用于设置JSP页面的属性,这些属性将用于和JSP容器通信,控制所生成的servlet结构。

 page指令作用整个JSP页面,可以将怕个指令放在文档中任何地方。
 
     a,page指令的语法:
  <%@ page attr="value1" attr="value2" ... %>
  
  xml语法格式的page指令:
   <jsp:directive.page attr="value1" attr="value2" ... />
 
     b,page指令的13个属性
 
 1,import属性:page指令中唯一容许在同一文档出现多次的属性。属性的值可以以逗号隔开。
  指定jsp页面转换成servlet应该输入的包。对于没有明确指定包的类,将根据jsp页面所在的包(生成的servlet的目录)决定类的包的位置。
  这意味着,将在jsp页面所在的包来寻找该类。

  一定要将实用工具类和bean包放在指定的包中。不要依赖于自动导入。

 2,language属性:
  用于指定在脚本元素中使用的脚本语言,默认java。在jsp2.0规范中,只能是java。 
 
 3,contentType和pageEncodeing属性:
  contentType属性设置发送到客户端文档的响应报头的MIME类型和字符编码。多个使用;号分开。
  pageEncodeing属性只用于更改字符编码。
  
  servlet默认MIME是text/plain,jsp默认MIME是text/html。
  
 3,session属性:控制页面是否参与会话

  默认true。如果存在已有会话,则预定义session变量,绑定到已有会话中。否则创建新会话将其绑定到session。
  对于高流量网站,设置false可以节省大量服务器内存。
  设置false表示不自动创建新会话,在jsp页面转换为servlet时,这时对变量session的访问导致错误。
  设置为false并不是禁用会话跟踪,它只是阻止jsp页面为不拥有会话的用户创建新会话。

  * 对于不需要会话跟踪的页面那就设置为false;当设置为false时session对象是不可访问的。

 4,isELlgnored属性: 
  定义在jsp页面中是否执行或忽略EL表达式。true表示忽略,false表示执行。
  默认值依赖于web.xml的版本。servlet2.3之前默认true,servlet2.4默认false。
  用于JSP版本不一致造成使用EL表达式出现的问题。使用:isELlgnored="true";

 5,buffer和autoFlush属性:
  buffer属性指定out对象(JspWriter)使用的缓冲区大小,以kb为单位,默认8kb。
  none表示不使用缓冲区。这样要求设置报头或状态代码的jsp元素要出现在文件的顶部,任何HTML内容之前。

  autoFlush属性控制当缓冲区满了后,是自动清空输出缓冲区(默认true),还是在缓冲区溢出后抛出异常(false)。
  在buffer=none的时候,autoFlush=false是错误的。
  
 6,info属性:
  定义一个可以在servlet中通过getServletInfo方法获取的字符串。

  jsp容器做的是在servlet中生成getServletInfo方法返回info属性指定的String。

 7,errorPage和isErrorPage属性:指定页面专用的错误页面。
  errorPage属性用来指定一个jsp页面,由该页面来处理当前页面中抛出但没有捕获的任何异常。指定的页面可以通过exception变量访问异常信息。
  isErrorPage属性表示当前页是否可以作为其他jsp页面的错误页面。true或false。
  错误页面应该放在WEB-INF目录下面,只让服务器访问,也不会生成转发的调用,客户端只能看到最初的请求页面URL,看不到错误页面的URL。
  
  如果为整个web应用程序指定错误页面,或为应用中不同类型的错误指定错误处理页面,使用web.xml中的error-page元素。

  如果一个页面通过该属性定义了专有的错误页面,那么在web.XML文件中定义的任何错误页面不会被使用。
  
  只能够在错误处理页面中使用错误对象exception。

 8,isThreadSafe属性:采用显式的同步来代替该方法。
  控制由jsp页面生成的servlet是否允许并发访问(默认true允许)。
  这种阻止并发访问的实现是基于SingleThreadModel接口。所以,避免使用isThreadSafe属性。
  
 9,extends属性:避免使用。这是服务器提供商该做的事情。父类必须是对HttJspPage接口的实现类。而HttJspPage是应用于HTTP协议的请求和响应的JspPage扩展接口。
  指定JSP页面生成的servlet的超类。

三,include指令:在页面转换期间将文件包含到jsp页面。

 include指令用于在jsp页面中静态包含一个文件,该文件可以是jsp页面,html页面,文本文件或一段Java代码。
      在主页面“转换为servlet前”将jsp代码插入。被包含的页面发生更改的时候,主页面也要更新(转译)。
 对于文件包含,使用jsp:include。仅在所包含的文件中定义了主页面需要的字段和方法,或者所包含的文件设置了主页面的响应报头时,才使用include指令。
 
 1,include语法:
  <%@ include file="url"%>
  file的属性值被解释为相对于当前jsp文件的URL.

 2,在被包含的文件中不要使用和主页重复的HTML标签。这样会影响原jsp文件中同样的标签导致错误。
    因为原文件和被包含文件可以互相访问彼此定义的变量和方法,所以要避免变量和方法在命名上的问题。 
   
 3,在jsp中,只要有3种功能可以将外部内容包含到JSP文档中。
  a,jsp:include动作
   
  b,include指令
   
  c,jsp:plugin动作

 4,include指令:
  服务器将被包含文件内容每字节插入到主页面中,然后将产生的页面作为单个JSP页面进行处理。
    
 5,jsp:include动作:在“请求”期间将其他页面的“输出”包含进来。这样的行为和RequestDispatcher类的include方法完全相同。
   
   优点:包含页面被更改,无需对主页面做修改。
   缺点:被包含页面不能使用任何有可能影响主页面的jsp构造。
    也就是不能将完整的HTML文档作为被包含页面,只能含有适合于出现在文件插入点的HTML标签。
   
   参数(使用jsp:param动作元素增加请求参数):
    在被包含页面与主页面使用相同的请求对象。可以在被包含页面“看到”主页面的参数,而在主页面“看不到”被包含页面的参数。

  a,page属性:指定所包含的页面,应该是指向某种资源的相对URL.
   相对URL不以/开头,则表示为相对于主页面的位置。以/开头表示相对于WEB应用的根目录。
   如果由服务器来处理该资源,按相对于当前web应用进行解释;只有浏览器处理该资源时,按相对于服务器的根目录来解释。
   
   对于/开头的URL,服务器总是相对于当前web应用对它进行解释,浏览器总是相对于服务器的根目录来对它进行解释。 

   可以将要包含的页面放在WEB-INF目录下面,对客户端隐藏。
  
  b,flush属性:指定将页面包含进来之前是否应该清空主页面的输入流(默认false)。


 6,include指令和jsp:include动作的区别:
  调用的时间:
   jsp:include动作在“请求期间”被包含。
   include指令在“转换期间”被包含。
  包含的内容:
   jsp:include动作是包含jsp页面或servlet的“输出”和HTML文本。
   include指令是文件的实际内容。

  最终转换的servle个数:
   jsp:include动作在请求期间,会将被请求页面转译为独立的servlet。和主页面的servlet对应。
   include指令在转换期间将被包含页面的内容插入到主页面中,得到主页面转译成的servlet。
  
  可否设置影响主页面的响应报头和参数:
   jsp:incurred动作不可以,include指令可以。
  更新:
   jsp:include动作是在请求期间被插入所以他的更改不需要更新主页面。
   include指令的更新意味着主页面servlet的更新。
 

四,taglib指令:声明用户使用的自定义标签。

 声明用户使用自定义的标签,将标签库描述符文件导入到jsp页面。

 taglib指令语法:
  <%@ taglib (uri="tigLibURL" 或 tagDir="tagDir") prefix="tagPrefix" %>

  uri属性:定位标签库描述符的位置。唯一标识和前缀相关的标签库描述符,可以使用绝对或相对URL。
  tagDir属性:指示前缀将被用于标识在WEV-INF/tags目录下的标签文件。

  prefix属性:标签的前缀,区分多个自定义标签。不可以使用保留前缀和空前缀,遵循XML命名空间的命名约定。
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值