jWebBox JSP 页面布局工具开源项目

我要开发同款
匿名用户2016年08月19日
29阅读
开发技术Java
所属分类程序开发、常用工具包
授权协议BSD

作品详情

这是一个JSP页面布局工具,功能和Tiles,Sitemesh类似(还有最近的轻量级JSPLayout和Stripes布局工具等),用于JSP页面的布局,其特点是无须XML配置,用纯Java类代替XML(与jBeanBox项目类似),用一个三百行的Java类实现了Tiles的全部功能,功能与Tiles类似,但是在灵活性、无侵入性、简单性和可定制化方面要强于Tiles。使用方式上与Tiles类似,会Tiles的可以很快上手。jWebBox2.0.0采用开源BSD-3协议。

目前一些JSP页面布局工具的缺点:Tiles:功能强大但过于臃肿,版本依赖强,源码与struts联系太密,第三方库引用多,XML配置和标签不够灵活,运行期动态生成配置能力差。Sitemesh:采用装饰器模式,不如Tiles强大灵活。JSPLayout:功能太简单,布局无继承关系,不能复用。Stripes:是一个mvc框架,布局功能是其子功能,只有三个标签,功能太弱。

JWebBox2.0.0版主要特点:1)简单,只有一个很小的Box.java源文件是必须的,拷贝到项目源码目录下即可使用,目前没有打成.jar包供下载,只提供源码,以方便查看和更改源码。2)与jBeanBox项目类似,用JAVA类代替XML配置(实际上jBeanBox项目也是受此项目启发,利用Box类来代替XML可以成为一种编程模式),利用到了JAVA的始初化块来进行配置以达到最精简效果。JAVA类是每个程序员都能看懂的,无需学习。如果布局复杂甚至可以考虑利用UML工具绘出布局继承和引用关系图。3)无侵入性,可以和其它页面布局及MVC框架共用而无冲突,可用于整个网站的架构,也可以用于编写局部页面零件。4)没有引入任何第三方类库(但需要在Web服务器如Tomcat下使用),也没有使用任何标签,纯Java方法调用,无学习负担。5)布局(Box类)是动态生成,在运行期可以创建和修改,比Tiles的XML配置方式更灵活且强大。6)支持静态方法、实例方法、URL引用三种数据预处理方式。方法签名采用约定而不是接口,减小侵入性。

使用方法:JWebBox2.0.0示例文件已打包成jwebbox2.war文件,可直接扔到Tomcat或jBoss的Webapps目录下运行,示例演示了几种布局用法,本来打算做个分页组件演示的,因时间关系就不做了,如果有用过Tiles做分页或列表组件的,可以很快移植过来。也可直接将jwebbox2.war作为一个web项目导入到Eclipse查看和学习。对于新项目,将其中的Box.java文件,拷到项目源码目录中即可。因为这是只有一个文件300行源码的微型项目,目前暂不考虑用Maven来管理。

一个典型的使用JWebBox2.0布局的项目,由模板页面、布局类、数据预处理类(可选)组成,例如:1.JSP模板文件,示例模板文件template.jsp:

<html xmlns="https://www.w3.org/1999/xhtml"><%@page import="com.jwebbox.Box"%><%Box box = Box.getBox(pageContext);%><head><style type="text/css">...</style><title>JWebBox2.0.0 Demo</title></head>    <body>        <div id="temp_content">            <div id="temp_top">                <div align="center">                <% box.showAttribute("menu");%>                </div>            </div>                <% box.showAttribute("body");%>            <div id="temp_bottom">                <div align="center">                <% box.showAttribute("footer");%>                </div>            </div>           </div>    </body></html>

2.布局Java类,如

DemoBox1.javapublic class DemoBox1 extends Box {    {        this.setPage("/template/template.jsp");        this.setAttribute("menu", new Box("/template/menu.jsp").setAttribute("msg", "Demo1 - A basic layout"));        this.setAttribute("body", new BodyLeftRight());        this.setAttribute("footer", "/template/footer.jsp");    }}DemoBox2.javapublic class DemoBox2 extends DemoBox1 {    {        this.setAttribute("menu", ((Box) this.getAttribute("menu")).setAttribute("msg", "Demo2 - Change body layout"));        this.setAttribute("body", new BodyTopDown());    }}

其中BodyLeftRight和BodyTopDown也是布局类,一个是左右布局,一个是上下布局,源码因篇幅原因略过,可详见下载示例包。

3.Logic类(可选)用于访问数据库以对页面提供数据,也可以在运行期更改或创建新布局。

public class DemoLogic {    ...略一段代码...    public static void prepareStaticMethod1(PageContext pageContext, Box callerBox) throws IOException {        pageContext.getOut().write("  This is inserted by prepareStaticMethod1 method<br/>");    }    public void preparerBeanMethod1(PageContext pageContext, Box callerBox) throws IOException {        ((Box) callerBox.getAttribute("menu")).setAttribute("msg", "Demo3 - Show how prepare methods be called");        callerBox.setAttribute("footer", "/template/page3.jsp");    }    public static DemoLogic getInstance(PageContext pageContext) {        return SingletonInstance.INSTANCE;        // If use Spring, get bean instance from pageContext:    }}

4.最后在需要显示的JSP页面调用布局显示即可:

index.jsp:<%    String demono = request.getParameter("demono");    if ("2".equals(demono))        new DemoBox2().show(pageContext);    else if ("1".equals(demono))        new DemoBox1().show(pageContext);%>

因为布局配置是动态生成的,完全可以在Action层中动态创建布局并返回View层显示。

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论