洗心革面 重新学习JSP! ----之四:定制标记(1)

在编写定制标记之前,先说说标记文件。

在JSP2.0之前,部署被包含文件没有标准可依,可以把所包含的部分放在Web应用的任何位置,如果JSP中有一大堆<jsp:include><c:import>标记,这样的JSP读起来很费劲。 在JSP2.0以后,我们可以用标记文件来直接表明要引入的是什么,如<my:nav> <my:header>等,这样你就直到这些JSP片段被放在哪里,使JSP页面一目了然。

标记文件,很像include,但比include更好!可以把标记文件看做一种轻型的定制标记。

如何写标记文件:

1.取一个被包含的文件,如Header.jsp,把后缀改成.tag

2.把该tag文件放在WEB-INF目录一个名为tags的文件夹下。

3.在JSP中放入一个taglib指令,并调用这个标记。

部分代码:

======== Header.tag===========:

< img  src ="images/logo.jpg" > Welcome to chayatou's blog < br >

======== index.jsp===========:

<% @ page language="java" pageEncoding="ISO-8859-1" %>
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
<!--声明标记文件库位置 -->
<% @ taglib prefix="my" tagdir="/WEB-INF/tags" %>
< html >
  
< head >
  
< title > chayatou's blog  </ title >
  
</ head >
  
  
< body >  
<!--调用标记文件-->
   
< my:Header  />
<!--调用结束 -->
   Sorry, the main content of this blog is now rebuilding..
< br >
   Thank you for visiting,Bye~~
   
</ body >
</ html >

 

以上是最简单的标记文件,不需要TLD,不需要任何说明,就可以在页面调用。

下面是带有参数的标记文件写法:

1. 编写tag文件,把需要传入的标记属性用<%@ attribute%>指令声明出来。

2.在JSP文件中使用该TAG,属性的传入方法与JSTL一样:

   < uri : tagname attribute1=" " attribute2=" " ... />

对Header.tag的修改:

======== Header.tag===========:

<!--  声明该tag有一个名为slogn的属性,且必须指定属性值  -->
<% @ attribute name="slogn" required="true" rtexprvalue="true" %>
< img  src ="images/logo.jpg" >
${slogn}

======== index.jsp===========:

<% @ page language="java" pageEncoding="ISO-8859-1" %>
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
<!--声明标记文件位置 -->
<% @ taglib prefix="my" tagdir="/WEB-INF/tags" %>
< html >
  
< head >
  
< title > chayatou's blog  </ title >
  
</ head >
  
  
< body >  
<!--调用标记文件-->
   
<my:Header slogn="Welcome to chayatou's blog"/>
<!--调用结束 -->
   Sorry, the main content of this blog is now rebuilding..
< br >
   Thank you for visiting,Bye~~
   
</ body >
</ html >

 

如果require=true,但是在用的时候没有指定属性值,页面会报错哦~~

rtexprvalue是标记该属性是否可以是表达式。当为true时,如果我这样调用:

  <my:Header slogn="${2*3}"/>

那么页面上显示的是6

如果属性值很大,比如是一段文字,把这段文字放在属性值中就太丑陋了。。所以,可以把这些内容放在标记的体中(也就是<tag>与</tag>之间),然后作为一个属性使用:

======== Header.tag===========:

<%@ tag body-content="tagdependent" %>
   < img  src ="images/logo.jpg" >
< jsp:doBody  />

======== index.jsp===========:

  < my:Header >
     Welcome to chayatou's blog
   
</ my:Header >

<jsp:doBody />是指,如果有页面调用该标记,则取出标记的内容(也就是标记“体”)放在这里。

 标记体也可以有多种类型,用body-content指定。在上面的例子中,标记体被处理成纯文本(<%@ tag body-content="tagdependent"%>)。标记体还可以被处理成scriptless和empty。scriptless表示该标记体绝对不能出现脚本(是指<%%>,<%=%>,<%!%>)。而empty表示该标记体必须为空,不然会报500错误。

实际上,标记文件体中绝对不能有脚本(但是可以有EL),用于简单替代include还可以.,如果要更复杂的标记(如调用某个JAVA类提供的方法...),只有自己定制咯。定制标记的详细内容见下一篇《洗心革面 重新学习JSP! ----之四:定制标记(2)》.

-----------未完

                                            待续------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值