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自定义标签开发与打包相关推荐
- 转载:javaweb学习总结(二十三)——jsp自定义标签开发入门
javaweb学习总结(二十三)--jsp自定义标签开发入门 转自:http://www.cnblogs.com/xdp-gacl/p/3916734.html 一.自定义标签的作用 自定义标签主要用 ...
- javaweb学习总结(二十三)——jsp自定义标签开发入门
一.自定义标签的作用 自定义标签主要用于移除Jsp页面中的java代码. 二.自定义标签开发和使用 2.1.自定义标签开发步骤 1.编写一个实现Tag接口的Java类(标签处理器类) 1 packag ...
- JSP自定义标签开发入门
一般情况下开发jsp自定义标签需要引用以下两个包 import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; 首先我们需要大致了解开发 ...
- javaweb学习总结(二十三):jsp自定义标签开发入门
一.自定义标签的作用 自定义标签主要用于移除Jsp页面中的java代码. 二.自定义标签开发和使用 2.1.自定义标签开发步骤 1.编写一个实现Tag接口的Java类(标签处理器类) 1 packag ...
- JSP自定义标签开发(五)——标签类获取 request 、 session
标签类中要是能够取到 request 和 session 这样的对象,对于一个web开发员来说,那是一件多么幸福的事情啊!懂得了这个知识,标签开发与servlet结合的开发将变得随心所欲. 实例: p ...
- 如何使用jsp自定义标签 JspTag 使用入门
java开发中,sturts标签和c标签就是我们常用的两种标签,本文主要教大家如何定义自己的标签,已达到代码整合,公共化的目的.通过jsp自定义标签,可以将一个元素,或者一个表格,一个div甚至整个页 ...
- javaweb学习总结(二十四)——jsp传统标签开发
一.标签技术的API 1.1.标签技术的API类继承关系 二.标签API简单介绍 2.1.JspTag接口 JspTag接口是所有自定义标签的父接口,它是JSP2.0中新定义的一个标记接口,没有任何属 ...
- JSP自定义标签学习笔记
http://blog.csdn.net/liangbinny/article/details/6309893 本文是本人学习<JavaWeb学习>书籍所记下的学习笔记 一.概述 JSP ...
- javaweb学习总结(二十四):jsp传统标签开发
一.标签技术的API 1.1.标签技术的API类继承关系 二.标签API简单介绍 2.1.JspTag接口 JspTag接口是所有自定义标签的父接口,它是JSP2.0中新定义的一个标记接口,没有任何属 ...
最新文章
- x-pack watch邮件报警配置
- DOM节点删除方法小结
- 10-20国际电极标准系统
- java流方式接收pdf_java – 在Itext 7中,如何获取范围流来签署pdf?
- Java技术之掌握数据库连接工具DBUtils的应用
- php重定向页面位置,php - PHP重定向到基于页面版本的用户位置(IPAPI),并在会话中记住 - SO中文参考 - www.soinside.com...
- asp.net core AuthenticationMiddleware 在WebApi中的的使用
- 一个学中医女生的保养身体法
- 远程重启h3c路由器_梅林路由怎么开启远程访问
- RHEL 5服务篇—LAMP平台的部署及应用
- linux5.4获取root权限,gcc++漏洞 普通用户获取root权限
- Mobileye/博世/大陆智驾份额「持续下滑」,本土供应商「起势」
- 问卷及量表统计与SPSS实战
- 蓝牙的原理,蓝牙耳机怎么连接手机
- 马尔可夫------马尔可夫不等式
- 机器学习核心概念完全解析(建议收藏)
- thinkphp使用migration/Seeder
- macOS 虚拟摄像头:CamTwist for Mac
- 计算机考研院校录取人数,2010年计算机考研34所自主划线院校复试成绩及录取人数等详细情况汇总...
- 2021-12-13 云计算平台基础架构 swift