JSP自定义标签实战解析:防盗链标签实现
44 浏览量
更新于2024-08-30
收藏 49KB PDF 举报
"JSP自定义标签案例分析,包括如何实现一个基本的防盗链标签,涉及JSP自定义标签的创建、处理类与描述文件的编写。"
在Java服务器页面(JSP)中,自定义标签是扩展JSP功能的重要手段,它们允许开发者创建可复用的、具有特定功能的标签库,从而提高代码的可读性和可维护性。本篇内容将深入讲解两个JSP自定义标签的案例,以帮助开发者理解和应用这一技术。
案例一:实现一个基础的防盗链标签
1. 标签处理类(Tag Handler Class)
这个案例中的自定义标签用于检查用户的来源(referer)是否符合设定的网站,若不符合则进行重定向。首先,我们创建一个名为`MyReferer`的类,继承自`BodyTagSupport`。这个类中包含两个属性`site`(预期的来源站点)和`back`(当来源不符合时重定向的目标URL),并提供了对应的getter和setter方法。在`doEndTag`方法中,我们获取`PageContext`,通过它获取`HttpServletRequest`对象,然后检查请求头中的`referer`是否符合设定的`site`。如果符合,返回`Tag.EVAL_PAGE`让JSP继续执行;否则,使用`HttpServletResponse`进行重定向,并返回`Tag.SKIP_PAGE`以跳过剩余的标签处理。
```java
public class MyReferer extends BodyTagSupport {
// ...
public int doEndTag() throws JspException {
// ...
String header = request.getHeader("referer");
if (header != null && header.startsWith(getSite())) {
return Tag.EVAL_PAGE;
} else {
// ...
response.sendRedirect(getBack());
return Tag.SKIP_PAGE;
}
}
// ...
}
```
2. 描述文件(TLD File)
为了使JSP容器识别自定义标签,我们需要创建一个标签库描述文件(TLD)。在这个XML文件中,我们将定义标签的名称、关联的处理类以及任何其他元数据。例如:
```xml
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<tlib-version>1.0</tlib-version>
<jsp-version>2.0</jsp-version>
<short-name>mytags</short-name>
<uri>http://example.com/mytags</uri>
<tag>
<name>防盗链</name>
<tag-class>com.example.MyReferer</tag-class>
<body-content>empty</body-content>
<info>防止非指定站点引用的标签</info>
<attribute>
<name>site</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<description>预期的来源站点</description>
</attribute>
<attribute>
<name>back</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<description>重定向的目标URL</description>
</attribute>
</tag>
</taglib>
```
在这个描述文件中,我们定义了标签库的版本、简短名称和URI,以及一个名为`防盗链`的自定义标签,指定了其处理类、允许的体内内容、属性等信息。
通过这两个步骤,我们完成了JSP自定义标签的创建。在JSP页面中,我们可以像使用标准标签一样使用这个自定义标签,例如:
```jsp
<%@ taglib prefix="my" uri="http://example.com/mytags" %>
<my:防盗链 site="http://example.com" back="/error.jsp" />
```
这样的自定义标签使得页面逻辑更加清晰,且可以方便地在整个项目中重复使用。对于更复杂的业务需求,开发者还可以创建包含多个标签的方法,或者扩展其他类型的标签支持类,如`SimpleTagSupport`,来实现不同的功能。
2019-03-05 上传
2013-04-11 上传
2008-01-17 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
2010-06-04 上传
2010-12-05 上传
2012-09-21 上传
weixin_38692162
- 粉丝: 4
- 资源: 904
最新资源
- StopSwitchDelay:Xposed模块可消除5秒钟的延迟,防止您在按下主屏幕按钮后无法打开应用程序(不是从启动器中打开)
- PointCheck:根据积分排名计算团队所占积分的程序
- StatsPoint:Kivy KivyMD上的网球追踪器应用程序,适用于我的Travail deMaturité
- gsendyk.github.io:我的简历网站
- 无刷电机的绕制和接线方法及实物图解-综合文档
- autowireble-http:受Retrofit for Spring IoC Container启发的HTTP客户端库
- homebridge-sony-audio:适用于Sony Audio产品的HomeKit集成
- 基于智能化的机械设备电气自动化技术应用研究.rar
- AnimeTake Watcher-crx插件
- hamsandwich:该微库提供了对Hamcrest库的Java扩展,从而提供了一种声明和组合实体匹配器的简便方法,该方法可用于测试或生产代码中
- BP神经网络的基本原理+很清楚-综合文档
- python-random-quote:用Python编写的基于文件的报价机器人
- android下载器功能
- PLMapping
- 手肘法matlab源码-caffe-heatmap:具有热图回归和空间融合图层的Caffe。对于任何CNN图像位置回归任务都很有用
- cocoritest:法语中用于单元测试声明的API