在JSP中使用标签构造防盗链

标签的好处就是能够让JSP界面不出现Java脚本代码,然后加上属性这个东西就大大增强了标签的可复用性,下面我们使用标签技术来开发一个防盗链标签。

首先还是写一个类实现SimpleTagSupport

package com.bird.web.tag.example; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspException; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.SkipPageException; import javax.servlet.jsp.tagext.SimpleTagSupport; public class RefererTag extends SimpleTagSupport{ private String site; private String page; public void setSite(String site) { this.site = site; } public void setPage(String page) { this.page = page; } @Override public void doTag() throws JspException, IOException { PageContext pageContext = (PageContext) this.getJspContext(); HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); HttpServletResponse response = (HttpServletResponse) pageContext.getResponse(); //1.首先的到来访者的网址 String referer = request.getHeader("referer"); if(referer == null || !referer.startsWith(site)){ if(page.startsWith(request.getContextPath())){ response.sendRedirect(page); }else if(page.startsWith("/")){ response.sendRedirect(request.getContextPath() + page); }else{ response.sendRedirect(request.getContextPath() + "/" + page); } throw new SkipPageException(); }else{ } //2.判断是否是来自防盗链的网站 } } 这个标签带两个属性,一个是site也就是这个防盗链需要来自什么地方的连接才能够访问,第二个page的意思是如果是其他位置访问本页面需要跳转到哪里去。

JspContext必须转型为pageContext才能获得需要的几个对象,然后根据浏览器带过来的referer头就可以知道访问位置,然后对于标签的友好型,还可以自己设置输入格式,下面需要在tld文件中描述一下这个标签

<?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <description>A tag library exercising SimpleTag handlers.</description> <tlib-version>1.0</tlib-version> <short-name>Bird</short-name> <uri>/example</uri> <tag> <name>referer</name> <tag-class>com.bird.web.tag.example.RefererTag</tag-class> <body-content>empty</body-content> <attribute> <name>site</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>page</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib>
然后使用这个标签就可以了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JSP使用自定义标签可以让我们更加方便地重用一些功能组件,提高代码的可维护性和重用性。下面是使用自定义标签的步骤: 1. 创建一个标签处理器类,该类必须继承 javax.servlet.jsp.tagext.SimpleTagSupport 类,并且实现 doTag() 方法。doTag() 方法是自定义标签的核心处理方法,它会被 JSP 引擎在页面解析时自动调用。 2. 在 WEB-INF 目录下创建 tld 文件,该文件是自定义标签的描述文件,用于告诉 JSP 引擎如何使用自定义标签。tld 文件必须符合标准的 TLD(Tag Library Descriptor)格式。 3. 在 JSP 页面引入自定义标签库。例如,如果我们的标签库名为 mytaglib,那么可以在 JSP 页面使用以下代码引入标签库: <%@ taglib prefix="my" uri="/WEB-INF/mytaglib.tld" %> 4. 在 JSP 页面使用自定义标签。例如,如果我们的标签名为 mytag,那么可以在 JSP 页面使用以下代码调用自定义标签: <my:mytag /> 需要注意的是,使用自定义标签前需要先编译标签处理器类,并且将编译后的 class 文件放在 WEB-INF/classes 目录下。 下面是一个简单的例子,演示如何在 JSP 使用自定义标签: 1. 创建标签处理器类 MyTagHandler.java: ``` package com.example; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.SimpleTagSupport; public class MyTagHandler extends SimpleTagSupport { @Override public void doTag() throws JspException, IOException { getJspContext().getOut().write("Hello, world!"); } } ``` 2. 创建标签描述文件 mytaglib.tld: ``` <?xml version="1.0" encoding="UTF-8"?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <tlib-version>1.0</tlib-version> <short-name>mytaglib</short-name> <uri>/WEB-INF/mytaglib.tld</uri> <tag> <name>mytag</name> <tag-class>com.example.MyTagHandler</tag-class> </tag> </taglib> ``` 3. 在 JSP 页面引入标签库并使用自定义标签: ``` <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="my" uri="/WEB-INF/mytaglib.tld" %> <html> <head> <title>MyTag Test</title> </head> <body> <my:mytag /> </body> </html> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值