1.相对于JSTL或Spring等第三方标签库而言的,用来实现项目中特定的功能需求。
2.自定义标签基本的组成部分
①页面上看得见的部分
[1]通过taglib引入标签库
[2]标签本身
②xxx.tld文件:用来注册标签处理器类
③标签处理器类
3.创建一个没有属性没有标签体的自定义标签
①创建自定义标签的处理器类
[1]标准要求:实现接口javax.servlet.jsp.tagext.SimpleTag
[2]实际操作:继承javax.servlet.jsp.tagext.SimpleTagSupport
[3]细节实现:重写doTag()方法
②在xxx.tld文件中注册这个标签处理器类
[1]xxx.tld文件需要放在WEB-INF目录下
[2]编写tld文件声明信息
<description>Atguigu 1.0 core library</description>
<display-name>Atguigu core</display-name>
<tlib-version>1.0</tlib-version>
<short-name>atguigu</short-name>
<uri>http://www.atguigu.com/survey/tag</uri>

[3]注册自定义标签处理器类

<tag>
<!-- 标签名 -->
<name>showTime</name> <!-- 标签全类名 -->
<tag-class>com.atguigu.myTag.TagShowTime</tag-class> <!-- 设置标签体为空 -->
<body-content>empty</body-content>
</tag>
③在页面上使用:和使用JSTL等第三方标签库没有区别
 
4.创建一个带属性的自定义标签
①创建自定义标签处理器类
②属性传入方式
[1]处理器类中提供和属性名对应的setXxx()方法
[2]在tld文件中注册这个属性名
<!-- 声明标签的属性 -->
<attribute>
<!-- 属性名 -->
<name>format</name> <!-- 属性是否必须 -->
<required>true</required> <!-- 属性是否支持EL表达式 -->
<rtexprvalue>true</rtexprvalue>
</attribute>
5.创建一个带有标签体的自定义标签

①标签体需要执行<!-- EL表达式→Java代码→编译→执行→页面上可以显示的结果 -->

<!-- 其他动态标签→Java代码→编译→执行→页面上可以显示的结果 -->

<!-- HTML标签或普通文本→out.print(xxx)→执行→页面上可以显示的结果 -->

②执行标签体的代码
 
 
public class AuthTag extends SimpleTagSupport {
private String servletPath;
@Override
public void doTag() throws JspException, IOException {
//获取页面的上下文对象
PageContext context = (PageContext) getJspContext();
HttpSession session = context.getSession();
Admin admin = (Admin)session.getAttribute(GlobalNames.LOGIN_ADMIN);
if(admin!=null){
//判断是否有权限访问
String adminName = admin.getAdminName();
if("admin".equals(adminName)){
//显示内容体
getJspBody().invoke(null);
return ;
} ServletContext servletContext = context.getServletContext();
WebApplicationContext ioc = WebApplicationContextUtils.getWebApplicationContext(servletContext);
//用servletPath查询资源数据
ResMapper resMapper = (ResMapper) ioc.getBean(ResMapper.class);
Res res = resMapper.getResByServletPath(servletPath);
System.out.println("servletPath.......... "+servletPath);
String codeArr= admin.getCodeArr();
Integer resCode =res.getResCode();
Integer resPos=res.getResPos();
//计算验证资源是否可以访问
boolean authority = DataprocessUtils.checkAuthority(resCode, resPos, codeArr);
if(authority){
//显示内容体
getJspBody().invoke(null);
return ;
}
}
//上面的条件如果有任何一个不满足,那么就不执行标签体,页面上将不显示标签体
}
public void setServletPath(String servletPath) {
//为了保持与数据库一致,需要加上“/”
this.servletPath = "/"+servletPath;
}
}
 

jsp的自定义标签的更多相关文章

  1. [Java] JSP笔记 - 自定义标签

    自定义标签的创建步骤: 自定义标签的四大功能: 自定义标签的类结构: 在 1.0 中呢, 可以将 <body-content> 的值设置为 JSP, 2.0中则不允许在自定义标签体中出现j ...

  2. 【JSP】自定义标签开发入门

    JSP 自定义标签 自定义标签是用户定义的JSP语言元素.当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对被 称为tag handler的对象的操作,即当servlet执行时We ...

  3. 12、Jsp加强/自定义标签/JavaBean

    1 Jsp加强回顾 Jsp加强 1)Jsp的9大内置对象 request       HttpServletRequet response     HttpServletResponse config ...

  4. Jsp开发自定义标签,自定义标签将字符串转成指定的时间格式显示

    本例以将 字符串格式的时间转成指定的时间格式显示. 第一步.定义一个标签处理程序类,需要集成javax.servlet.jsp.tagext.TagSupport,代码如下: import java. ...

  5. JavaWeb之 JSP:自定义标签

    当jsp的内置标签和jstl标签库内的标签都满足不了需求,这时候就需要开发者自定义标签. 自定义标签 下面我们先来开发一个自定义标签,然后再说它的原理吧! 自定义标签的开发步骤 步骤一 编写一个普通的 ...

  6. JavaWeb之 JSP:自定义标签的创建和使用

    当jsp的内置标签和jstl标签库内的标签都满足不了需求,这时候就需要开发者自定义标签. 下面我们先来开发一个自定义标签,然后再说它的原理吧! 自定义标签的开发步骤 步骤一 编写一个普通的java类, ...

  7. Servlet和JSP之自定义标签学习

      此文章会讲述简单标签处理器,因为经典自定义标签处理器没有简单标签处理器方便使用,故在此不进行描述. 参考:慕课网的<JSP自定义标签>视频; <Servlet.JSP和Sprin ...

  8. jsp的自定义标签 控制jsp内容显示

    引入方式示例 <%@ taglib prefix="fns" uri="/WEB-INF/tlds/fns.tld" %> tld文件 <?x ...

  9. jsp里面自定义标签常量详解

    标签中静态常量: EVAL_BODY_INCLUDE:告诉服务器正文的内容,并把这些内容送入输出流 SKIP_BODY:告诉服务器不要处理正文内容 EVAL_PAGE:让服务器继续执行页面 SKIP_ ...

随机推荐

  1. tomcat7的catalina.sh配置说明

    捞财宝项目8G内存tomcat7的配置JAVA_OPTS="-Xms1024m -Xmx2048m -XX:PermSize=128M -XX:MaxNewSize=2048M  -XX:M ...

  2. darknet优化经验-AlexeyAB大神经验

    目录 darknet优化经验 1. AlexeyAB改进项 2. Linux下编译选项 3. 训练经验 4. 提升检测效果 5. 总结 6. AlexeyAB大神改进 darknet优化经验 主要来自 ...

  3. Http接口安全整理

    1.Http接口安全概述: 1.1.Http接口是互联网各系统之间对接的重要方式之一,使用http接口,开发和调用都很方便,也是被大量采用的方式,它可以让不同系统之间实现数据的交换和共享,但由于htt ...

  4. mysql-修改字段类型和修改字段名称

    文章转自:https://blog.csdn.net/u010002184/article/details/79354136 mysql修改字段类型: --能修改字段类型.类型长度.默认值.注释 -- ...

  5. heap堆算法的使用分析

    新生代  --复制算法 老年代 --标记压缩清除算法 分代 分区思想 垃圾回收的任务是识别和回收垃圾对象进行内存清理,为了让垃圾回收器可以高效的执行,大部分情况下,会要求系统进入一个停顿的状态. 停顿 ...

  6. Photoshop 基础四 填充(渐变、油漆桶)

    一 渐变 二 油漆桶 一 渐变 技术点:选框工具(矩形.圆形.选区.反选).变换(透视).渐变 1)新建图层——>矩形选框工具,画一个矩形 2)渐变工具,定义渐变颜色 3)编辑——>变换— ...

  7. elasticsearch6.1 安装问题

    问题:Caused by: java.lang.RuntimeException: can not run elasticsearch as root [root@localhost logs]# a ...

  8. Android FragmentPagerAdapter翻译

    public abstract class FragmentPagerAdapter extends PagerAdapter java.lang.Object    ↳ android.suppor ...

  9. P4208 [JSOI2008]最小生成树计数

    现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的)输出方案数对31011 ...

  10. Windows 系统安装Docker Compose 步骤

    参考 Docker Compose official 官方安装指南: https://docs.docker.com/compose/install/ 实际上到目前为止还不能直接在Windows上安装 ...