Java jsp MasterPages实现母版页,实现统一风格的页面布局
2015-12-23 17:16
531 查看
http://outofmemory.cn/code-snippet/964/Java-jsp-MasterPages-achieve-muban-page-achieve-tongyi-fengge-page-layout
更多0
jsp
模板
java利用Tag实现类似.Net的母版页功能。
MasterPageTag.java
ContentPlaceHolderTag.java
ContentPageTag.java
ContentTag.java
CustomResponse.java
master.jsp
index.jsp
[Java]代码
Java jsp MasterPages实现母版页,实现统一风格的页面布局
更多0jsp
模板
java利用Tag实现类似.Net的母版页功能。
MasterPageTag.java
/** * */ package org.lhp.core.tag; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.BodyContent; import javax.servlet.jsp.tagext.BodyTagSupport; /** * TODO * * @Title : MasterPageTag.java * @author liheping 2012-5-14 下午03:59:03 * @version : V1.0 2012-5-14 * @Copyright : Copyright ( c ) dev.liheping.org ,2012 */ public class MasterPageTag extends BodyTagSupport { private static final long serialVersionUID = 1L; @Override public int doAfterBody() throws JspException { return SKIP_BODY; } @Override public int doStartTag() throws JspException { // 执行子标签 return EVAL_BODY_BUFFERED; } @Override public int doEndTag() throws JspException { JspWriter out = pageContext.getOut(); if (bodyContent != null) { if (out instanceof BodyContent) { out = ((BodyContent) out).getEnclosingWriter(); } } String content = this.bodyContent.getString(); try { this.bodyContent.clear(); out.write(content); } catch (IOException e) { e.printStackTrace(); } return SKIP_PAGE; // 不执行标签之后的内容 } }
ContentPlaceHolderTag.java
/** * */ package org.lhp.core.tag; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; /** * TODO * @Title : ContentPlaceHolderTag.java * @author liheping 2012-5-14 下午03:33:01 * @version : V1.0 2012-5-14 * @Copyright : Copyright ( c ) dev.liheping.org ,2012 */ public class ContentPlaceHolderTag extends TagSupport { private static final long serialVersionUID = 1L; @Override public int doEndTag() throws JspException { JspWriter out = pageContext.getOut(); Object obj = this.pageContext.getRequest().getAttribute(this.getId()); try { if(obj!=null) out.write(obj.toString()); } catch (IOException e) { e.printStackTrace(); } return EVAL_PAGE; } }
ContentPageTag.java
/** * */ package org.lhp.core.tag; import java.io.IOException; import java.io.UnsupportedEncodingException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.BodyTagSupport; import org.lhp.core.response.CustomResponse; /** * TODO * * @Title : ContentPageTag.java * @author liheping 2012-5-14 下午04:00:47 * @version : V1.0 2012-5-14 * @Copyright : Copyright ( c ) dev.liheping.org ,2012 */ public class ContentPageTag extends BodyTagSupport { private final String masterFolderPath = "/WEB-INF/master/"; private final String masterPageSuffix = ".jsp"; private static final long serialVersionUID = 1L; @Override public void doInitBody() throws JspException { try { this.pageContext.getRequest().setCharacterEncoding("UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } super.doInitBody(); } @Override public int doAfterBody() throws JspException { return SKIP_BODY; } @Override public int doStartTag() throws JspException { //执行子标签 return EVAL_BODY_BUFFERED; } @Override public int doEndTag() throws JspException { JspWriter out = pageContext.getOut(); CustomResponse bufferedResponse = new CustomResponse((HttpServletResponse) this.pageContext.getResponse()); try { System.out.println("master url :"+this.getMasterPageUrl()); //渲染页面 this.pageContext.getServletContext().getRequestDispatcher(this.getMasterPageUrl()).include(this.pageContext.getRequest(), bufferedResponse); System.out.println("master page content : " + bufferedResponse.getContent()); //out.clearBuffer(); out.write(bufferedResponse.getContent()); } catch (ServletException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return SKIP_PAGE; } /** * TODO 获取母版 * @Title: getMasterPageUrl * @return * @return String * @author liheping 2012-5-15 下午02:16:13 */ private String getMasterPageUrl(){ return this.masterFolderPath+this.materPageId+this.masterPageSuffix; } private String materPageId; public String getMaterPageId() { return materPageId; } public void setMaterPageId(String materPageId) { this.materPageId = materPageId; } }
ContentTag.java
/** * */ package org.lhp.core.tag; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.BodyTagSupport; /** * TODO * @Title : ContentTag.java * @author liheping 2012-5-14 下午04:01:16 * @version : V1.0 2012-5-14 * @Copyright : Copyright ( c ) dev.liheping.org ,2012 */ public class ContentTag extends BodyTagSupport { private static final long serialVersionUID = 1L; @Override public int doAfterBody() throws JspException { return SKIP_BODY; } @Override public int doStartTag() throws JspException { return EVAL_BODY_BUFFERED; } @Override public int doEndTag() throws JspException { String content = this.bodyContent.getString(); try { this.pageContext.getRequest().setAttribute(this.getContentPlaceHolderId(), content); this.bodyContent.clear(); } catch (IOException e) { e.printStackTrace(); } return EVAL_PAGE;//default } private String contentPlaceHolderId; public String getContentPlaceHolderId() { return contentPlaceHolderId; } public void setContentPlaceHolderId(String contentPlaceHolderId) { this.contentPlaceHolderId = contentPlaceHolderId; } }
CustomResponse.java
package org.lhp.core.response; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; public final class CustomResponse extends HttpServletResponseWrapper { private StringWriter strWriter = new StringWriter(); private PrintWriter out = new PrintWriter(strWriter) ; public CustomResponse(HttpServletResponse response) { super(response); } @Override public PrintWriter getWriter() throws IOException { return out; } public String getContent() { return strWriter.toString(); } }
master.jsp
<%@ taglib uri="org.lhp.masterpage" prefix="fms" %> <fms:MasterPage id="master"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title><fms:ContentPlaceHolder id="title"/></title> </head> <body> <hr/> <h1>母版页内容.............</h1> <fms:ContentPlaceHolder id="nav"/> <hr/> <fms:ContentPlaceHolder id="main"/> <h2>母版页文字</h2> <br/> <br/> <br/> ........................... </body> </html> </fms:MasterPage>
index.jsp
<%@ taglib uri="org.lhp.masterpage" prefix="fms" %> <fms:ContentPage materPageId="master"> <fms:Content contentPlaceHolderId="title"> 子页,标题 </fms:Content> <fms:Content contentPlaceHolderId="nav"> <h5>子页导航</h5> </fms:Content> <fms:Content contentPlaceHolderId="main"> <h3>子页主内容</h3> </fms:Content> </fms:ContentPage>
[Java]代码
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"> <taglib> <tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion> <shortname>bean</shortname> <uri>org.lhp.masterpage</uri> <tag> <name>Content</name> <tagclass>org.lhp.core.tag.ContentTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>contentPlaceHolderId</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>ContentPlaceHolder</name> <tagclass>org.lhp.core.tag.ContentPlaceHolderTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>id</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>MasterPage</name> <tagclass>org.lhp.core.tag.MasterPageTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>id</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>ContentPage</name> <tagclass>org.lhp.core.tag.ContentPageTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>materPageId</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib>
相关文章推荐
- Java笔记 第四章(2)Java面向对象编程基础 第二部分(类的成员变量和方法)
- Java 基础 - 强引用、弱引用、软引用、虚引用
- myeclipse中,项目上有个叉报错,文件没有错误
- Java下利用Jackson进行JSON解析和序列化
- JAVA两个数组间元素的比较(找出相同或者不同元素)
- java数据类型易错点简单总结,欢迎大神前辈补充!谢谢
- Android Eclipse 注释模板的使用(图文说明)
- Java输入输出流2
- java数据类型易错点简单总结,欢迎大神前辈补充!谢谢
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
- JAVA接口练习(含返回值)
- Java异常使用心得
- 【Java】聊聊常用的非对称加密算法之一RSA的使用(Java)
- java输入输出流1
- 网上某位大神写的仿小米卸载动画eclipse版
- spring 无法读取properties中的值
- Spring Boot学习笔记—日志
- Java NIO 随笔(二)
- Java反射机制模拟Spring IOC容器
- Java时间戳转化为今天、昨天、明天(字符串格式)