SimpleTagSuPPort

SimlpeTagSuPPort类的生命周期:

1.jsp容器遇到自定义标签时。jsp容器会调用标签处理类的默认构造方法来建立一个标签处理类的实例。必须为每个标签都创建一个新的实例。

2.实例创建后,jsp容器会调用setJspContext()方法。并以一个JspContext实例提供上下文信息。如果是一个嵌套标签,还讲调用setParent()方法。

3.然后容器会调用该标签中所定义的每个属性的set方法,这样标签处理类实例就已经初始化完成了。

4.接着就由容器调用setJspBody()方法。将该标签的主题设置为JspFragment实例。如果标签主题是空的,则将null值传到setJspBody().JspFragment实例代表标签主题片段的引用。

5.接下来,由容器调用doTag()方法标签要实现的所有逻辑、循环、主体赋值等都在该方法中发生。

6.doTag()方法返回后,标签处理类中所有的变量都是同步的。

标签案例-开发防盗链标签:

盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益。

解决途径之一——限制引用页

这种防盗链原理是,服务器获取用户提交信息的网站地址,然后和真正的服务端的地址相比较,如果一致则表明是站内提交,或者为自己信任的站点提交,否则视为盗链。

目标:要开发的标签

<class3g:referer site="http://drinkeye:8080" page="/index.jsp"/>

site:受信任站点,只允许次站点的请求

page:正确的链接页面,发现盗链后将其自动转入此页面

步骤

  1. 标签处理类

public void doTag() throws JspException, IOException {

PageContext pageContext = (PageContext) this.getJspContext();

HttpServletRequest request =

(HttpServletRequest) pageContext.getRequest();

HttpServletResponse response =

(HttpServletResponse) pageContext.getResponse();


String referer = request.getHeader("referer");

System.out.println(request.getContextPath());

if(referer==null | !referer.startsWith(site)){

//判断是否盗链

//根据page属性值,讲链接重定向指访问被盗链内容的正确页面

String contextPath = request.getContextPath();

if(page.startsWith(contextPath)){

response.sendRedirect(page);

}else if(page.startsWith("/")){

response.sendRedirect(contextPath + page);

}else{

response.sendRedirect(contextPath + "/" + page);

}

throw new SkipPageException();

}

}


 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐