JSP页面布局工具jWebBox升级到到2.0版

涓涓溪流 2016-02-08

这是一个JSP页面布局工具,作用和Tiles,Sitemesh类似(还有最近的轻量级JSPLayout和Stripes布局工具等),用于JSP页面的布局,最早版本是在08年写的,有不少问题,现在升级到2.0.0版,源码全部重构了一遍。其特点是只有一个纯Java类,无须XML配置(实际上是用布局Java类代替XML),用一个三百行的Java类实现了Tiles的全部功能,功能与Tiles类似,但是在灵活性、无侵入性、简单性和可定制化方面要优于Tiles。使用方式上与Tiles类似,会Tiles的可以很快上手。

JWebBox2.0.0发布在:http://sourceforge.net/projects/jwebbox/,采用开源BSD协议。

目前一些JSP页面布局工具的缺点:

Tiles:功能强大但过于臃肿,版本依赖强,源码与struts联系太密,第三方库引用多,XML配置和标签不够灵活。

Sitemesh:采用装饰器模式,不够强大灵活。

JSPLayout:功能过于简单,布局之间无继承关系,不能复用。

Stripes:是一个mvc框架,布局功能是其子功能,只有三个标签,功能太弱。

JWebBox2.0.0版主要特点:

1)用JAVA类代替XML配置,利用到了JAVA的继承和变量覆盖等特点,JAVA类是每个程序员都能看懂的,无需学习。

如果布局太复杂可以考虑利用UML工具绘出布局继承和引用关系图。

2)无侵入性,可以和其它页面布局及MVC框架共用而无冲突,可用于整个网站的架构,也可以用于编写局部页面零件。

3)没有引入任何第三方类库(连Log4j都没用),也没有使用标签,纯Java方法调用,无学习负担。

4)布局(Box类)是动态生成,在运行期创建和修改非常方便。

5)支持静态方法、实例方法、URL引用三种数据预处理方式。方法签名采用约定而不是接口,减小侵入性。

6)只有一个很小的Box.java文件是必须的,拷贝到项目源码目录下即可使用,方便查看代码和更改源码(采用BSD开源协议)。

使用方法:

JWebBox2.0.0示例文件已打包成jwebbox2.war文件,可直接扔到Webapps目录下运行,示例演示了几种布局用法。

源码也在.war包里,解压后可见。也可直接将jwebbox2.war导入到Eclipse作为一个项目查看。对于新项目,将其

中的Box.java文件,拷到项目源码目录中即可。

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

1.JSP模板文件,

如一个模板文件template.jsp内容如下:

<htmlxmlns="http://www.w3.org/1999/xhtml">

<%@pageimport="com.jwebbox.Box"%>

<%Boxbox=Box.getBox(pageContext);%>

<head>

<styletype="text/css">...</style>

<title>JWebBox2.0.0Demo</title>

</head>

<body>

<divid="temp_content">

<divid="temp_top">

<divalign="center">

<%box.showAttribute("menu");%>

</div>

</div>

<%box.showAttribute("body");%>

<divid="temp_bottom">

<divalign="center">

<%box.showAttribute("footer");%>

</div>

</div>

</div>

</body>

</html>

2.布局Java类

如DemoBox1.java

publicclassDemoBox1extendsBox{

{

this.setPage("/template/template.jsp");

this.setAttribute("menu",newBox("/template/menu.jsp").setAttribute("msg","Demo1-Abasiclayout"));

this.setAttribute("body",newBodyLeftRight());

this.setAttribute("footer","/template/footer.jsp");

}

}

和DemoBox2.java

publicclassDemoBox2extendsDemoBox1{

{

this.setAttribute("menu",((Box)this.getAttribute("menu")).setAttribute("msg","Demo2-Changebodylayout"));

this.setAttribute("body",newBodyTopDown());

}

}

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

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

publicclassDemoLogic{

...略一段代码...

publicstaticvoidprepareStaticMethod1(PageContextpageContext,BoxcallerBox)throwsIOException{

pageContext.getOut().write("ThisisinsertedbyprepareStaticMethod1method<br/>");

}

publicvoidpreparerBeanMethod1(PageContextpageContext,BoxcallerBox)throwsIOException{

((Box)callerBox.getAttribute("menu")).setAttribute("msg","Demo3-Showhowpreparemethodsbecalled");

callerBox.setAttribute("footer","/template/page3.jsp");

}

publicstaticDemoLogicgetInstance(PageContextpageContext){

returnSingletonInstance.INSTANCE;

//IfuseSpring,getbeaninstancefrompageContext:

}

}

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

index.jsp:

<%

Stringdemono=request.getParameter("demono");

if("2".equals(demono))

newDemoBox2().show(pageContext);

elseif("1".equals(demono))

newDemoBox1().show(pageContext);

%>

相关推荐