博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分享一下实现jsp模板继承
阅读量:6567 次
发布时间:2019-06-24

本文共 2934 字,大约阅读时间需要 9 分钟。

hot3.png

初期学javaweb的时候动态输出网页就靠servlet和jsp完成了,后来简单了解了php和python可以通过渲染网页模板完成网页的继承,也在官网上了解了一下jsp模板的继承,在这里分享一下。

jsp继承网页模板只需要两个类就可以简单完成,依赖于rapid-framework-3.9.3.20100923.jar

第一次发表博文,还希望大家多多鼓励~

这个是BlockTag类,主要功能是定义jsp中的模板标签即<jsp:block />

package com.cheney.jspInheritance;

import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
/**   
 *    
 * Project: jspInheritance   
 * Class: BlockTag  
 * : Cheney   
 * @Date 2015年9月8日 下午9:06:36
 * 1.0
 *    
 */
public class BlockTag extends TagSupport{
    private static final long serialVersionUID = -8246166191638588615L;
    
    private String name;
    
    public void setName(String name) {
        this.name = name;
    }
    /**
     * EVAL_BODY_INCLUDE or EVAL_BODY_BUFFERED or SKIP_BODY
     */
    @Override
    public int doStartTag() throws JspException {
        return getOverriedContent() == null ? EVAL_BODY_INCLUDE : SKIP_BODY;
    }
    /**
     * @return EVAL_PAGE or SKIP_PAGE
     */
    @Override
    public int doEndTag() throws JspException {
        String overriedContent = getOverriedContent();
        if(overriedContent == null) {
            return EVAL_PAGE;
        }
        
        try {
            pageContext.getOut().write(overriedContent);
        } catch (IOException e) {
            throw new JspException("write overridedContent occer IOException,block name:"+name,e);
        }
        return EVAL_PAGE;
    }
    
    private String getOverriedContent() {
        String varName = Utils.getOverrideVariableName(name);
        return (String)pageContext.getRequest().getAttribute(varName);
    }
}

下面这个是OverwriteTag 类,主要功能是定义jsp中子页面的继承标签即<jsp:overwrite />

package com.cheney.jspInheritance;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;
import org.apache.commons.lang3.StringUtils;
/**   
 *    
 * Project: jspInheritance   
 * Class: OverwriteTag  
 * @author: Cheney   
 * @Date 2015年9月8日 下午9:12:04
 * @version 1.0
 *    
 */
public class OverwriteTag extends BodyTagSupport {
private static final long serialVersionUID = -8379959647039117369L;
    
    private String name;
    
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public int doStartTag() throws JspException {
        return isOverrided() ? SKIP_BODY : EVAL_BODY_BUFFERED;
    }
    @Override
    public int doEndTag() throws JspException {
        if(isOverrided()) {
            return EVAL_PAGE;
        }
        BodyContent b = getBodyContent();
//        System.out.println("Override.content:"+b.getString());
        String varName = Utils.getOverrideVariableName(name);
        pageContext.getRequest().setAttribute(varName, b.getString());
        return EVAL_PAGE;
    }
    private boolean isOverrided() {
        String varName = Utils.getOverrideVariableName(name);
        return pageContext.getRequest().getAttribute(varName) != null;
    }
}

下面这个是一个工具类,作用是定义标签的格式

package com.cheney.jspInheritance;

/**   
 *    
 * Project: jspInheritance   
 * Class: Utils  
 * @author: Cheney   
 * @Date 2015年9月10日 下午8:46:53
 * @version 1.0
 *    
 */
class Utils {
    
    public static String BLOCK = "__jsp_override__";
    
    static String getOverrideVariableName(String name) {
        return BLOCK + name;
    }
}

这样的话jsp的模板继承功能就实现了~

转载于:https://my.oschina.net/CheneyLee/blog/508523

你可能感兴趣的文章
jquery javascript获得网页的高度和宽度
查看>>
2019 -2-15 复习
查看>>
vim锁定屏幕
查看>>
实用的 JavaScript 调试小技巧
查看>>
027移除元素
查看>>
Linux下清理内存和Cache方法
查看>>
CodeVS 1018 单词接龙(DFS)
查看>>
我的博客园的CSS和html设置
查看>>
工作中简单的kettle使用
查看>>
spark shuffle:分区原理及相关的疑问
查看>>
C#匿名委托
查看>>
Laravel5.5 使用第三方Vendor添加注册验证码
查看>>
06- Linux下sublime下载与使用
查看>>
前端文摘:Web 开发模式演变历史和趋势
查看>>
将图片序列转化为视频文件
查看>>
jQuery的文档操作***
查看>>
CODING Pages 服务全面升级,更快更稳更可靠!
查看>>
js 小数取整,js 小数向上取整,js小数向下取整
查看>>
vue-cli3.0
查看>>
window.location.replace vs window.location.href
查看>>