日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JSP自定义标签开发与打包

發布時間:2025/6/17 javascript 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JSP自定义标签开发与打包 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:最近用到JSP的自定義標簽,于是到網上尋找資料,結果發現很多的網上教程要么不全要么就是步驟流程錯誤,尤其是將自定義標簽打jar包這一過程,按照網上的教程操作,結果被坑慘了,所以才有現在這一篇博文!

1.自定義標簽簡介

JSP標簽主要用于在JSP頁面中提供業務邏輯功能,比如控制JSP頁面是否執行、如何執行等,從而避免在JSP頁面中直接書寫Java代碼,造成頁面難維護,同時也給前端人員造成困擾。JSTL是JSP的標準標簽庫,可滿足許多常用的需求,但對于一些特殊的需求卻無能為力,但JSP給我們提供了開發自定義標簽的接口,方便我們根據特定的需求來開發自定義標簽。通常開發自定義標簽需要完成2個主要步驟:

1)編寫一個實現javax.servlet.jsp.tagext.Tag接口的java類(標簽處理器)。

2)編寫一個標簽描述文件(以 .tld作為后綴名,遵循XML語法),tld文件可包含多個標簽的描述,每個標簽的描述放在<tag>和</tag>標簽之間。

2.自定義標簽接口介紹

1)javax.servlet.jsp.tagext.Tag接口

該接口繼承了JspTag接口,JspTag是不包含屬性和方法的接口。Tag接口包含了6個方法,

int doEndTag()

int doStartTag()

Tag getParent()

void release()

void setPageContext(PageContext pc)

void setParent(Tag t)

除此之外,還包含了4個靜態屬性,static final int SKIP_BODY、static final int EVAL_BODY_INCLUDE、static final int SKIP_PAGE、static final int EVAL_PAGE

?

實例1:在瀏覽器中輸出HelloWorld

a. 在eclipse中新建一個Dynamic Web Project,名字叫做TestDemo1


b. 在Java Resources ——>src目錄下new一個Package,名字叫做com.tag.demo,在該包下new一個java類,名字叫做Test1

c. 編輯Test1.java文件

1 package com.tag.demo; 2 import javax.servlet.jsp.tagext.Tag; 3 import javax.servlet.jsp.PageContext; 4 import javax.servlet.jsp.JspException; 5 import javax.servlet.jsp.JspWriter; 6 import java.io.IOException; 7 public class Test1 implements Tag{ 8 private PageContext pageContext; 9 @Override 10 public int doStartTag() throws JspException { 11 JspWriter out = pageContext.getOut(); //獲取out</span> 12 String str="HelloWorld"; 13 try { 14 out.write(str); //寫到瀏覽器 15 } catch (IOException e) { 16 throw new RuntimeException(e); 17 } 18 return 0; 19 } 20 @Override 21 public int doEndTag() throws JspException { 22 return 0; 23 } 24 @Override 25 public Tag getParent() { 26 return null; 27 } 28 @Override 29 public void release() { 30 } 31 @Override 32 public void setPageContext(PageContext arg0) { 33 this.pageContext = arg0; 34 } 35 @Override 36 public void setParent(Tag arg0) { 37 } 38 39 }

d. 在WebContent目錄下,新建jsp目錄,用來存放jsp文件;在WEB-INF目錄下新建? f.tld 文件(new一個XML文件,然后把下面的f.tld內容復制進來即可)。

Test1.jsp文件內容如下:

1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@ taglib uri="http://sodu.lakala.com/urlCheck" prefix="f"%> <!--uri與tld文件中配的uri相同--> 3 4 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 5 <html> 6 <head> 7 <title>在瀏覽器輸出HelloWorld</title> 8 </head> 9 10 <body> 11 <f:out/> 12 </body> 13 14 </html>

f.tld文件內容如下:

1 <?xml version="1.0" encoding="UTF-8" ?> 2 <taglib xmlns="http://java.sun.com/xml/ns/javaee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" 5 version="2.1"> 6 <description>A tag library exercising SimpleTag handlers.</description> 7 <display-name>Test Tag</display-name> 8 <tlib-version>1.0</tlib-version> 9 <short-name>f</short-name> 10 <uri>http://sodu.lakala.com/urlCheck</uri> <!--為該標簽配一個uri--> 11 12 <tag> 13 <description> 14 output String to browser 15 </description> 16 <name>out</name> 17 <tag-class>com.tag.demo.Test1</tag-class> 18 <body-content>scriptless</body-content> 19 </tag> 20 </taglib>

e. 將整個項目部署到Tomcat,此時項目的根目錄為項目名稱,即TestDemo1,我們訪問jsp的時候需要用到。

f. 運行tomcat,在瀏覽器中輸入http://localhost:8080/TestDemo1/jsp/Test1.jsp?,可以看到頁面展示HelloWorld。

2)javax.servlet.jsp.tagext.SimpleTag接口

該接口也繼承了JspTag接口,包含了5個方法,

void doTag()

JspTag getParent()

void setJspBody(JspFragment jspBody)

void setJspContext(JspContext pc)

void setParent(JspTag parent)

javax.servlet.jsp.tagext.SimpleTagSupport是SimpleTag接口的實現類,通常開發自定義標簽的時候,我們只需要繼承SimpleTagSupport類并重寫doTag()方法即可。

實例2:寫一個帶有屬性的標簽,根據屬性來判斷標簽體是否執行

這里過程不再給出,直接上文件的代碼:

Checkuri.java文件內容如下:

1 package com.lakala.Taglib; 2 import javax.servlet.http.HttpSession; 3 import javax.servlet.jsp.JspException; 4 import javax.servlet.jsp.tagext.SimpleTagSupport; 5 import javax.servlet.jsp.tagext.JspFragment; 6 import java.util.Map; 7 import javax.servlet.jsp.PageContext; 8 import java.io.IOException; 9 public class Checkuri extends SimpleTagSupport{ 10 private static final String SSO_PARAM_ACCESS="ACCESS_MAP"; 11 private String url; 12 13 public String getUrl() { 14 return url; 15 } 16 17 public void setUrl(String url) { 18 this.url = url; 19 } 20 public Boolean check() throws Exception{ 21 if(url==null||"".equals(url)){ 22 return false; 23 } 24 PageContext pageContext = (PageContext)this.getJspContext(); //獲得pageContext 25 HttpSession session = pageContext.getSession(); 26 @SuppressWarnings("unchecked") 27 Map<String,String> map=(Map<String, String>) session.getAttribute(SSO_PARAM_ACCESS); 28 if(map!=null&&map.containsKey(url)){ 29 if(map.get(url)!=null||"".equals(map.get(url))){ 30 return true; 31 } 32 } 33 return false; 34 } 35 @Override 36 public void doTag() throws JspException, IOException{ 37 //得到代表標簽體的JspFragment 38 JspFragment jf = this.getJspBody(); 39 try{ 40 Boolean flag1=check(); 41 if(flag1){ 42 jf.invoke(null); 43 } 44 }catch(Exception e){ 45 e.printStackTrace(); 46 } 47 } 48 49 }

g.tld文件內容如下:

1 <?xml version="1.0" encoding="UTF-8" ?> 2 <taglib xmlns="http://java.sun.com/xml/ns/javaee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" 5 version="2.1"> 6 <description>A tag library exercising SimpleTag handlers.</description> 7 <display-name>urlCheck</display-name> 8 <tlib-version>1.0</tlib-version> 9 <short-name>g</short-name> 10 <uri>http://sodu.lakala.com/urlCheck/list</uri> <!--為該標簽配一個uri--> 11 12 <tag> 13 <description> 14 Catches any Throwable that occurs in its body and optionally 15 exposes it. 16 </description> 17 <name>check</name> 18 <tag-class>com.lakala.Taglib.Checkuri</tag-class> 19 <body-content>scriptless</body-content> 20 <attribute> 21 <description> 22 just do it 23 </description> 24 <name>url</name> 25 <required>false</required> 26 <rtexprvalue>true</rtexprvalue> 27 </attribute> 28 </tag> 29 30 </taglib>

將自定義標簽庫打jar包,然后就可以在其他web項目中用了。

打包流程:

a. 新建一個java project

b. 創建如下的目錄結構

c. 右鍵項目export——>Java——>JAR file,然后如圖,點擊finish完成打包

d. 在其他的項目中,導入自定義的該包,然后就直接可以在JSP頁面中通過<%@ taglib uri="http://sodu.lakala.com/urlCheck/list" prefix="g" %>指令引用我們的標簽庫。

轉載于:https://www.cnblogs.com/lilinjian/p/7760757.html

總結

以上是生活随笔為你收集整理的JSP自定义标签开发与打包的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。