使用标签控制页面逻辑案例:
-
开发防盗链标签
这里要是实现的是:只有从index.jsp跳转的界面才能查看我的界面信息,否则退回到主页。
/**
* 防止 盗链
*/
public class RefererTag extends SimpleTagSupport {
private String site;// 规定上个界面的url 必须从这个url 挑转来
private String page;//跳转到指定的 url
public void setSite(String site) {
this.site = site;
}
public void setPage(String page) {
this.page = page;
}
@Override
public void doTag() throws JspException, IOException {
//得到 jspContext
PageContext jsp=(PageContext) this.getJspContext();
HttpServletRequest request=(HttpServletRequest) jsp.getRequest();
HttpServletResponse response=(HttpServletResponse) jsp.getResponse();
//得到 上个界面的url
String referer=request.getHeader("referer");
if (referer==null||!referer.startsWith(site)) {
//表明不是从index.jsp中挑战来的。
String webroot = request.getContextPath(); //TldDemo2
if (page.startsWith(webroot)) {
response.sendRedirect(page);
}else{
response.sendRedirect(webroot+page);
}
//重定向后,控制保护的页面不要执行
throw new SkipPageException();
}
}
}
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@taglib uri="/jeno" prefix="jeno"%>
<html>
<head>
<title>我的私密文件</title>
</head>
<body>
<jeno:referer site="http://localhost:8080/" page="/index.jsp"/>
我的照片哦
</body>
</html>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<html>
<head>
<title>首页</title>
</head>
<body>
我的私密信息如下:<br/>
<a href="${pageContext.request.contextPath}/1.jsp">点击进入</a>
</body>
</html>
-
开发<c:if>标签
自己开发 标签 实现 if(){}的功能
/**
*模拟 If 标签
*/
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) {
this.getJspBody().invoke(null);
}
}
}
-
开发<c:if><c:else>标签
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@taglib uri="/jeno" prefix="jeno"%>
<html>
<head>
<title>If()else{}自定义标签的使用</title>
</head>
<body>
<jeno:choose>
<jeno:when test="${user!=null}">
这个是 if进入的方法
</jeno:when>
<jeno:otherwise>
这个是 else进入的方法
</jeno:otherwise>
</jeno:choose>
</body>
</html>
/**
* if()else{} 的实现
*
* Choose是父标签 里面记录状态 子标签用来根据父标签状态
*/
public class ChooseTag extends SimpleTagSupport {
private boolean isOk;
public boolean isOk() {
return isOk;
}
public void setOk(boolean isOk) {
this.isOk = isOk;
}
@Override
public void doTag() throws JspException, IOException {
this.getJspBody().invoke(null);
}
}
/**
* if()else{}中 if()里面的 内容
*
*/
public class WhenTag extends SimpleTagSupport{
private boolean test;
public void setTest(boolean test) {
this.test = test;
}
@Override
public void doTag() throws JspException, IOException {
ChooseTag chooseTag=(ChooseTag) this.getParent();
if (test&&!chooseTag.isOk()) {
this.getJspBody().invoke(null);
chooseTag.setOk(true);
}
}
}
/**
* if()else{}中 else中的内容
*/
public class OtherwiseTag extends SimpleTagSupport{
@Override
public void doTag() throws JspException, IOException {
ChooseTag chooseTag=(ChooseTag) this.getParent();
if (!chooseTag.isOk()) {
this.getJspBody().invoke(null);
chooseTag.setOk(false);
}
}
}
-
开发迭代标签
-
开发html转义标签
-
打包标签库