1. 程式人生 > >JSP自定義標簽的使用簡化版

JSP自定義標簽的使用簡化版

stl XP inf 不想 ted java add 使用 contex

在jsp中 如果不想頁面中出現java代碼 這個時候就需要使用到jsp的自定義標簽庫技術了

自定義標簽庫 能夠有效的減少jsp中java代碼的出現 使其更加自然的像html頁面一樣

如果要使用jsp自定義標簽庫技術順著下列步驟做個demo就能理解個大概

首先在項目下WEB-INF下創建一個tld文件 用於說明這個自定義標簽庫

然後打開自己曾經導入過的jar包,並且保證該包在現行環境下能夠使用

找到包中的WEB-INF文件可以看到一個c.tld文件 打開此文件

可以看到列如

<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="
http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1"> <description>JSTL 1.2 core library</description> <display-name>JSTL core</display-name> <tlib-version>1.2
</tlib-version> <short-name>c</short-name> <uri>http://java.sun.com/jsp/jstl/core</uri>
</taglib>

這樣的內容 從頭選到uri的位置截取過來 然後在尾部加上</taglib>

申明 由於各個機子上環境可能不一致 此文件不建議直接從我這裏copy

然後可以看一個實例標簽

<tag>
    <description>
        Catches any Throwable that occurs in
its body and optionally exposes it. </description> <name>catch</name> <tag-class>org.apache.taglibs.standard.tag.common.core.CatchTag</tag-class> <body-content>JSP</body-content> <attribute> <description> Name of the exported scoped variable for the exception thrown from a nested action. The type of the scoped variable is the type of the exception thrown. </description> <name>var</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> </tag>

這是一個完整的標簽中可用的分析

<tag>
     <!-- 標簽描述-->
    <description></description>
     <!-- 標簽名稱-->
    <name>catch</name>
    <!-- -指向的類 也就是具體執行操作的類->
    <tag-class>org.apache.taglibs.standard.tag.common.core.CatchTag</tag-class>
    <!-- 是否具有標簽的格式-->
    <body-content>emty</body-content>
  </tag>

下面是我一個demo Tag.tld文件中的內容

<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
    version="2.1">
    
    <description>there are my tags of tag</description>  
    <tlib-version>1.2</tlib-version>  
  
      <!-- 標簽的短名稱 -->
    <short-name>Tag</short-name>  
    
    <!-- 綁定到這個uri上 在頁面上要使用 -->
    <uri>http://www.cnblogs.com</uri> 
    
       
    <tag>
        <description>view ip of client</description>  
        <name>ViewIP</name>  
        <tag-class>web.tag.ViewIpTag</tag-class>  
        <body-content>empty</body-content>  
     </tag>  
  
</taglib>  

然後是類中的代碼

package web.tag;

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

public class ViewIpTag extends TagSupport {

    @Override
    public int doStartTag() throws JspException {
        
        HttpServletRequest request =(HttpServletRequest) this.pageContext.getRequest();
        
        JspWriter out=this.pageContext.getOut();
        
        String ip = request.getRemoteAddr();
        
        try {
            out.write(ip);
        } catch (IOException e){
            throw new RuntimeException(e);
        }
        
        
        return super.doStartTag();
    }

}

最後是在jsp頁面的使用

<%@ taglib uri="http://www.cnblogs.com" prefix="Tag" %>
 你的ip是:<Tag:ViewIP/>

加入這兩行代碼 然後訪問所在頁面 就能看的本機Ip

JSP自定義標簽的使用簡化版