JSP自定义标签实例
1、 防盗链
盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其他有利的最终用户界面(如广告)直接在自己的网站上向最终用户提供其他服务提供商的服务内容,片区追中用户的浏览和点击率。兽医站不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的利益。
(1)解决途径之一 ——限制引用页
这种防盗链原理是,服务器获取用户提交信息的网站地址,然后和真正的服务端的地址相比较,如果一致则表明是站内提交,或者为自己信任的站点提交,否则视为盗链。
目标:要开发的标签
<class3g:referrer site=http://drinkeye:8080 page=”/index.jsp”>
A、Site:受信任点,只允许次站点的请求
B、Page:正确的链接页面,发现盗链后将其自动转入此页面的步骤
C、源码为:
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;
}
public void doTag() throws JspException, IOException {
//还原处理
PageContext pc = (PageContext)this.getJspContext();
HttpServletRequest request = (HttpServletRequest)pc.getRequest();
String referer = request.getHeader("referer");
if(referer == null || !referer.startsWith(site)){
HttpServletResponse response = (HttpServletResponse)pc.getResponse();
String contextPath = request.getContextPath();
System.out.println(contextPath);
if(page.startsWith(contextPath)){
response.sendRedirect(page);
}else if(page.startsWith("/")){
response.sendRedirect(contextPath+page);
}else{
response.sendRedirect(contextPath+"/"+page);
}
throw new SkipPageException();
}
}
}
2、标签案例-<c:if>标签
标签功能:
<class3g:if exp="${psw==null }"> user == null <br> </class3g:if>
<% session.setAttribute("user","Tom"); %> <class3g:if exp="${user!=null }"> user != null <br> </class3g:if> |
处理类
public class MyIfTag extends SimpleTagSupport {
private boolean exp;
public void setExp(boolean exp) { this.exp = exp; }
public void doTag() throws JspException, IOException { if(exp){ JspFragment jf = this.getJspBody(); jf.invoke(null); } }
} |
3、标签案例if else 标签
<class3g:choose >
<class3g:when exp="${user!=null }">
aaaaaaaaaa
</class3g:when>
<class3g:otherwise>
bbbbbbbbbbbbbbb
</class3g:otherwise>
</class3g:choose>