- 授权协议: BSD
- 开发语言: Java
- 操作系统: 跨平台
- 软件首页: http://git.oschina.net/drinkjava2/jWebBox
- 软件文档: http://git.oschina.net/drinkjava2/jWebBox
软件介绍
这是一个JSP页面布局工具,功能和 Tiles, Sitemesh 类似(还有最近的轻量级JSP Layout和Stripes布局工具等),用于JSP页面的布局,其特点是无须XML配置,用纯Java类代替XML(与jBeanBox项目类似), 用一个三百行的Java类实现了Tiles的全部功能,功能与Tiles类似,但是在灵活性、无侵入性、简单性和可定制化方面要强于Tiles。使用方式 上与Tiles类似,会Tiles的可以很快上手。jWebBox2.0.0采用开源BSD-3协议。
目前一些JSP页面布局工具的缺点:
Tiles: 功能强大但过于臃肿,版本依赖强,源码与struts联系太密,第三方库引用多,XML配置和标签不够灵活,运行期动态生成配置能力差。
Sitemesh: 采用装饰器模式,不如Tiles强大灵活。
JSP Layout:功能太简单,布局无继承关系,不能复用。
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="http://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.java
public 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.java
public 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层显示。
Don't Make Me Think
Steve Krug / New Riders Press / 18 August, 2005 / $35.00
Five years and more than 100,000 copies after it was first published, it's hard to imagine anyone working in Web design who hasn't read Steve Krug's "instant classic" on Web usability, but people are ......一起来看看 《Don't Make Me Think》 这本书的介绍吧!
RGB转16进制工具
RGB HEX 互转工具
URL 编码/解码
URL 编码/解码
