博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jsp的自定义标签
阅读量:7301 次
发布时间:2019-06-30

本文共 2819 字,大约阅读时间需要 9 分钟。

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文件声明信息
Atguigu 1.0 core library
Atguigu core
1.0
atguigu
http://www.atguigu.com/survey/tag

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

showTime
com.atguigu.myTag.TagShowTime
empty
③在页面上使用:和使用JSTL等第三方标签库没有区别
 
4.创建一个带属性的自定义标签
①创建自定义标签处理器类
②属性传入方式
[1]处理器类中提供和属性名对应的setXxx()方法
[2]在tld文件中注册这个属性名
format
true
true
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;    }}

 

 

转载于:https://www.cnblogs.com/limingxian537423/p/7511021.html

你可能感兴趣的文章
java中的几种对象(PO,VO,DAO,BO,POJO)
查看>>
HDOJ--4786--Fibonacci Tree【生成树】
查看>>
功能超级丰富的彩色贪吃蛇,有道具,有等级!
查看>>
angularjs之browserTrigger
查看>>
.net程序员面试考试题目
查看>>
1.3. redis-cli - Command-line client to redis-server
查看>>
两个平板打天下-将中国看做一个城市圈,漉战移动互联网、高铁时代
查看>>
Android 部分机型GridView四周默认间距
查看>>
在Html中使用Requirejs进行模块化开发
查看>>
7.7. 其他证书工具
查看>>
[Erlang 0014]Erlang垃圾回收机制
查看>>
Hibernate用Mysql数据库时链接关闭异常的解决
查看>>
Android 中文 API (19) —— TwoLineListItem
查看>>
EF架构~单表一对多集合的插入(树型结构)
查看>>
Linux Shell脚本实现根据进程名杀死进程
查看>>
[logstash-input-file]插件使用详解
查看>>
Codeforces 839D Winter is here【数学:容斥原理】
查看>>
FPGA在各行业的应用分析
查看>>
PostgreSQL 实时位置跟踪+轨迹分析系统实践 - 单机顶千亿轨迹/天
查看>>
js template实现方法
查看>>