java web标签

    一:国庆结束了,回来上班,结果老大说过两天才出差,因此这两天就用来补本身不太懂的知识或者之前没有熟悉的知识,jsp的标签就是,由于在项目中本身封装了一些标签,可是我本身只是会用,真正的原理性的东西我仍是不是很明白,因此今天一天的时间基本上都是在网上找资料来熟悉jsp标签的知识。javascript

    二:标签中tld中的属性rtexprvalue的用处html

      rtexprvalue的全称是 Run-time Expression Value,网上说是否能够利用jsp表达式。java

      rtexprvalue表示标签中的值是否能够直接指定或者能够动态(使用脚本或者el表达式)指定;linux

      reruired表示是不是必须的;web

下面说一说具体的用法,先给出tld中的定义以下:浏览器

<?xml version="1.0" encoding="UTF-8"?<taglib xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance" version="2.0" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">
    <description><![CDATA[自定义标签]]]]></description>
    <display-name>my Tags</display-name>
    <tlib-version>0.1</tlib-version>
    <short-name>my</short-name>
    <uri>/mytag</uri>
   <tag>
<!--此处是有些内容咱们不想让xml的解析引擎解析执行,而是当作原始内容处理,此时咱们能够把该部分xml的内容放在CDATA区域的内容中,xml解析程序不会处理,而是原封不动的输出,这里咱们就是想在jsp页面在给该属性赋值时把鼠标放在该该属性上时显示该提示内容--> 
        <description><![CDATA[显示我的姓名]]></description>
      <!-- 标签的名称--> <name>wh</name> <tag-class>org.wh.gsh.web.tag.PersonTag</tag-class> <body-content>JSP</body-content> <attribute>   <description><![CDATA[显示我的姓名]]></description>
          <!--属性名称-->          <name>personbh</name>
          <!--是不是必须的属性-->          <required>true</required>
          <!--见上面-->          <rtexprvalue>true</rtexprvalue>      </attribute>      <attribute>          <description><![CDATA[所属部门]]</description>          <name>departmen</name>           <required>false</required>          <rtexprvalue>false</rtexprvalue>      </attribute> </tag>

 <body-content>元素能够设置的内容有3种。less

<body-content>jsp

jsp页面的用法以下:元素主要的功能是指定标签体的类型,可能的取值有如下4种。学习

(1)empty:没有标签体测试

(2)JSP:标签体能够包含文本、EL、表达式或者JSP标签,但对于简单标签无效。

(3)scriptless:标签体能够包含文本、EL表达式、JSP标签,但不能包含JSP的脚本元素。

(4)tagdependent:表示标签体交由标签自己去解析处理。若指定tagdependent,在标签体中的全部代码都会原封不动的交给标签处理器,而不是将执行结果传递给标签处理器。

上面所说的标签体是这么个意思:若是标签写成这样<my:wh/>---->表示没有标签体,若是写成这样<my:wh></my:wh>则有标签体

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="my" uri="/mytag" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>我的信息页面</title>
<body>
    <my:wh  personbh="${p.bh}"  department='1'></my:wh>
<!-- 这里的personbh的值能够用直接指定或者是动态的绑定(由于<rtexprvalue>true</rtexpvalue>的值为true)-->
<!-- 而department的值却只能直接指定,不能动态绑定若是写成这样的话就是错误的
 <my:wh  personbh="${p.bh}"  department='"${p.depid}"></my:wh>--> ---->false 
</body>

三:标签返回值的效果及意义:

在TagSupport类中,有以下4个方法最重要:doStartTag(),doEndTag(),doAfterTag(),release()

(1)doStartTag():此方法是开始执行标签,有以下两种返回值:
    SKIP_BODY:表示忽略标签体的内容,而将执行权交给doEndTag()方法,

    EVAL_BODY_INCLUDE:表示执行标签体的内容。

 

(2)doAfterTag():此方法是IterationTag接口与Tag接口的差异所在,用来重复执行标签体的内容,有以下两种返回值

    SKIP_BODY:表示忽略标签体的内容,而且将执行权交给doEndTag()方法;

    EVAL_BODY_AGAIN:表示重复执行标签体内容,会重复调用doAfterBody()方法,一直循环执行下去,直到doAfterBody()方法但会SKIP_BODY为止。

(3)doEndTag():此方法在标签结束时执行,有以下两种返回值

    SKIP_PAGE:在JSP页面应该马上中止执行(便是不执行下面的jsp代码),并将全部的输出马上回传到浏览器上。

    EVAL_PAGE:表示jsp正常的运行

 

四:TagSupport和BodyTagSupport的区别

  TagSupport和BodyTagSupport的区别主要是标签处理类是否须要与标签体交互,若是不须要交互的就用TagSupport,不然若是须要交互就用BodyTagSupport。

    交互的意思大概能够理解成标签处理类是否要读取标签体的内容和改变标签体返回的内容。再说明白点就是若是要更改或者处理标签体中的内容则必须实现BodyTagSupport类。(标签里面均可以有内容,可是要更改内容或做其余处理就必须实现BodyTagSupport类);

下面说说BodyTagSupport新增了的方法

public static final int EVAL_BODY_BUFFERED :表示该标签体的内容应该被出俩,全部的处理都应该保存到BodyContent类中;

protected  BodyContent bodyContent  :存放处理结果

public JspWriter getPreviousOut() :取得JspWriter的输出流对象

好比下面的代码就是把标签体中的截取一部分进行显示,代码以下

MyTag.java

package org.wh.demo.Tag;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTag;
import javax.servlet.jsp.tagext.BodyTagSupport;
import javax.servlet.jsp.tagext.Tag;

public class MyTag extends BodyTagSupport {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    
    public int doStartTag() throws JspException{
        return BodyTag.EVAL_BODY_BUFFERED;
    }
    
    public int doEndTag() throws JspException{
        BodyContent bc=this.getBodyContent();//获取标签体的内容
        String ct=bc.getString();//转换为字符串
        String rt=ct.substring(5,10);
        try{
            this.pageContext.getOut().write(rt);
        }catch(Exception e){
            throw new RuntimeException(e);
        }
        
        return Tag.EVAL_PAGE;
    }
    

}
mytag.tld

<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    version="2.0"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">
    <description>标签的测试</description>
    <display-name>my tags</display-name>
    <tlib-version>0.0</tlib-version>
    <short-name>my</short-name>
    <uri>/mytags</uri>
    <tag>
        <description><![CDATA[本身定义的标签]]></description>
        <name>wh</name>
        <tag-class>org.wh.demo.Tag.MyTag</tag-class>
        <body-content>scriptless</body-content><!--这里用JSP或者scriptless都行,具体的在上年已经作了说明-->
    </tag>
</taglib>
HelloTag.jsp:

<%@ page language="java" contentType="text/html; charset=GBk" pageEncoding="GBK"%> <%@taglib uri="/mytags" prefix="my" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> <h1>Hello Tag!!!</h1> <h2>本身定义的标签使用以下效果</h2> <my:wh>这是我写的第一个标签</my:wh> </body> </html>

结果以下:

我如今就是知道怎么用了,之前本身只是只看不作的人,如今本身在边看边实践,即便是最简单的东西,只是仍是极少成多的。如今就补下基础薄弱的地方。本身作一遍比看几百遍都强的。本身仍是得花时间来学习下源码,最忌就再次温习下java和java web 和linux,好多东西要学,这几天没事情干就总结了这两个月实习学到的东西和补知识点。任重而道远啊。努力,今天看小说看到了一句话”匹夫而为百世师,一言二为天下法“,这气概,没得说啊,收到短信要交一篇3000字的论文,坑爹啊,我还得去找论文凑一篇交上去。努力吧,boys!!!

相关文章
相关标签/搜索