使用标签控制页面逻辑案例:
1、 防止盗链<c:referer site=”” page=””>
Jsp页面的内容:<c:referer site=”http://localhost”page=”index.jsp”>
Tld文件的描述:<tag>
<name>referer</name>
<tag-class>com.hbsi.web.tag.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>
标签处理器: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 {
// 获取request对象
JspContext jc = this.getJspContext();
PageContext pc = (PageContext) jc;
HttpServletRequest request = (HttpServletRequest) pc.getRequest();
HttpServletResponse response = (HttpServletResponse) pc.getResponse();
String referer = request.getHeader("referer");
if (referer == null || !referer.startsWith("http://localhost")) {
// 跳转到首页
//获取地址的完整路径
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();
}
}
}
2、条件选择<c:if test=””>
Jsp的页面:<%session.setAttribute("user","蛋蛋");%>
<c:if test="${user!=null}">
该回家了,蛋蛋!
</c:if>
Tld文件的描述:<tag>
<name>if</name>
<tag-class>com.hbsi.web.tag.IfTag</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>test</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
标签处理器:public class IfTag extends SimpleTagSupport {
private boolean test;
public void setTest(boolean test) {
this.test = test;
}
@Override
public void doTag() throws JspException, IOException {
if(test){
JspFragment jf=this.getJspBody();
jf.invoke(null);
}
}
}