现在的Java Web应用程序框架都需要进行大量的配置、投入大量的时间精力后才能投入生产,而且给人比较繁琐的感觉,如Struts、Tapestry等。今天在Sourceforge上寻到一开源框架--JSPX,在它的官方网站上将JSPX描述为:“

JSPX is a pure java opensource free web RAD framework that easier and faster than most of the existing frameworks (JSP-Servlets-Struts-JSF-Clay), with a lot of features that improve productivity. You just need to know HTML and JAVA to master JSPX. ”

  从上面最后一句可以看出,使用JSPX只需要知道HTML和Java POJOs即可。

  我测试了下,写个最简单的登录页面,使用JSPX只需要5分钟时间,呵呵,很短吧,让我们来看下是如何的简洁与快速。

  1.在Eclipse中创建Dynamic Web Project.

  

  2.修改web.xml,加入以下Servlet.

<servlet><display-name>JspxHandler</display-name><servlet-name>JspxHandler</servlet-name><servlet-class>eg.java.net.web.jspx.engine.RequestHandler</servlet-class></servlet><servlet><display-name>ResourceHandler</display-name><servlet-name>ResourceHandler</servlet-name><servlet-class>eg.java.net.web.jspx.engine.ResourceHandler</servlet-class></servlet><servlet-mapping><servlet-name>JspxHandler</servlet-name><url-pattern>*.jspx</url-pattern></servlet-mapping><servlet-mapping><servlet-name>ResourceHandler</servlet-name><url-pattern>/jspxEmbededResources/*</url-pattern></servlet-mapping>
</servlet>

  3. 创建HTML页面

  以.jspx方式创建Login.jspx页面,代码如下:

<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="http://jspx-bay.sourceforge.net/jspx.xsd"controller="com.demo.reg.web.controller.LoginPage">
<html>
<head>
<title>Login System</title>
</head>
<body>
<center>
<h1>Welcome to the System</h1>
<h3>Please login in</h3>
<form method="post" enctype="multipart/form-data">
<table><tr><td>Username:</td><td><input type="text" id="username" value="" style="font-size: 11px" mce_style="font-size: 11px" /> <validator type="required" control_to_validate="username" group="loginGroup"message="Username cannot be EMPTY" indicator="*"indicator_style="color:red; font-style:italic;" /></td></tr><tr><td>Password:</td><td><input type="password" id="password" value="" style="font-size: 11px" mce_style="font-size: 11px" /><validator type="required" control_to_validate="password" group="loginGroup"message="Password cannot be EMPTY" indicator="*"indicator_style="color:red; font-style:italic;" /></td></tr><tr><td colspan="2" align="center"><input type="button" onserverclick="loginClick" value="LOGIN" id="loginButton" group="loginGroup" /></td></tr><tr><td colspan="2"><label id="loginResult" /></td></tr>
</table>
</form>
</center>
</body>
</html>
</page>

  4. 创建Java Class

  创建的Java Class必须与页面上page标签中controller属性指定的值一致,故此处需要在com.demo.reg.web.controller包中创建名为LoginPage的Class.

package com.demo.reg.web.controller;import eg.java.net.web.jspx.ui.controls.WebControl;
import eg.java.net.web.jspx.ui.controls.html.elements.Label;
import eg.java.net.web.jspx.ui.controls.html.elements.inputs.Button;
import eg.java.net.web.jspx.ui.controls.html.elements.inputs.TextBox;
import eg.java.net.web.jspx.ui.pages.Page;/**** The logic of Login.jspx* @author YU Zhipeng* @version 1.0**/
public class LoginPage extends Page {private TextBox username = new TextBox();private TextBox password = new TextBox();private Button loginButton = new Button();private Label loginResult = new Label();public TextBox getUsername() {return username;}public void setUsername(TextBox username) {this.username = username;}public TextBox getPassword() {return password;}public Label getLoginResult() {return loginResult;}public void setLoginResult(Label loginResult) {this.loginResult = loginResult;}public void setPassword(TextBox password) {this.password = password;}public Button getLoginButton() {return loginButton;}public void setLoginButton(Button loginButton) {this.loginButton = loginButton;}public void loginClick(WebControl sender, String args){if (username.getValue().equals(password.getValue())){request.getSession().setAttribute("user", username.getValue());this.dispatch("index.jspx");}}}

OK,至此开发已经全部完成,你可以启动服务器来运行了。下图为运行的实际效果:

  大家看到了,页面上还加入了Validation验证,想像一样如果要在Struts中做到这样效果,没有半小时是不可能的。在整修JSPX中没有什么的配置文件,JSPX也不需要任何配置文件,所以可以将JSPX描述为"Zero Configurations Framework".

  JSPX中的HTML与普通的HTML到底有什么不同呢?其它大家可以看到,除了根元素<page>外,其它还都是标准的HTML标签,这可以说是JSPX的特征之一,将一个已经设计好的HTML页面包装成JSPX页面仅仅可以只使用<page>标签。但同时,如果遇到比较复杂的逻辑,像显示查询数据等,可以使用JSPX自带的标签,如DataTable, ListTable等来操作,会非常简单。

  控制器Controller其实是一个简单的POJO类,在这个类中你可以定义其它的Web组件,然后在JSPX页面上添加相应的标签,令其id与Controller中的变量名一致即可。

  

上次通过一个简单的例子介绍了JSPX Web框架的基本使用,这次让我们来看看JSPX Web框架提供的特殊标签--DataTable.

  JSPX提供DataTable是一个集查询、分页、显示等为一身的标签,使用起来非常简单,但也有它不足的地方,好了,废话少话,先来看代码:

<datatable id="datatable" datasource="java:comp/env/jdbc/DemoDS" table ="Users" sql="select * from Users where userid>MYID order by userid asc" showrowindex="true"style="border-style: solid;   border-width: 1px;  border-color: black;"headerstyle="color: #FFFFFF;   font-family: tahoma,arial;  font-size: 12px;    font-weight: bold;  background-color: gray;"rowstyle="background-color:#C9F1C9" selectedrowstyle="background-color:#59eeee"   ><dataparam name="MYID" control="userId" expression="userid>MYID"></dataparam><datapk name="userid" sequence="myseq" /><datacolumn text="User Id" fieldname="USERID" type="number" /><datacolumn text="Username" fieldname="USERNAME" type="string"  required="true"/><datacolumn  text="Email" fieldname="EMAIL" type="string"  required="true"/><datacolumnCommand text="select"   type="select" action="rowSelected"/><datacolumnCommand text="check All "   type="check" /><datacolumnCommand text="modify"   type="edit"/><datacolumnCommand text="remove" confirm="Are you sure you want to remove this user?" type="delete"/>            <footer newCommandText="Add New Item" message="total search results {0}, page{1}/{2}" /></datatable>

  其中datasource表示数据源,需要在相应的应用服务器配置,以下是在Tomcat 6.0中配置Datasource的代码:

<Resource driverClassName="com.mysql.jdbc.Driver" maxActive="4" maxIdle="2" maxWait="5000" name="jdbc/DemoDS" password="root" type="javax.sql.DataSource" url="jdbc:mysql://localhost:3306/demo?autoReconnect=true" username="root"/>

table属性:是你需要查询的数据库表名;

sql属性:查询的SQL语句;

showrowindex属性:表示需要显示序号;

<dataparam>元素用来定义传入sql语句的参数,name属性用于指定传入SQL的变量名称,此处为MYID,而control指定变量从哪个属性取值,此例中为userId,表明是从userId中取得值,并赋值给MYID,expression为定义的表达式.

<datapk>元素定义主键,name为要作为主键的属性,sequence为Oralce中table所对应的sequence的名称。

<datacolumn>元素用于定义显示的数据列,其中text属性表示显示的列名称,fieldname表示从哪个属性中取值,type表示该列的数据类型,required表示该列是必须的。

<datacolumnCommand>元素表示定义列操作,JSPX默认提供了几个列操作,如select表示选择该条记录,并会返回该条记录的PK;check类型会显示为checkbox,并可对所有记录进行选择;edit类型表示对记录进行修改,JSPX对自动提供对记录的更新操作;remove类型表示删除记录;

<footer>用于指定页脚内容。

  我在测试时使用的是MySQL数据库,在运行此页面时有Exception抛出,通过查看源代码以及与JSPX的作者联系,确认目前JSPX只支持Oracle数据库,因此,如果你使用的是Oracle的话,JSPX将不会有任何的错误,除此之外,你需要修改JSPX的DAO类的源代码并编译打包后使用。

  关于这个Bug,JSPX的作者Amr告知将在JSPX的下一版本1.0.3中修复,大家期待吧,呵呵,不过此外还有一个关于生成PK的Bug不知会不会解决:)

Java Web快速开发框架 ---- JSPX相关推荐

  1. Java Web快速开发框架 ---- JSPX (一)

    现在的Java Web应用程序框架都需要进行大量的配置.投入大量的时间精力后才能投入生产,而且给人比较繁琐的感觉,如Struts.Tapestry等.今天在Sourceforge上寻到一开源框架--J ...

  2. 推荐一个 Java 接口快速开发框架

    欢迎关注方志朋的博客,回复"666"获面试宝典 今天给小伙伴们介绍一个Java接口快速开发框架-magic-api 简介 magic-api 是一个基于 Java 的接口快速开发框 ...

  3. Portal-Basic Java Web 应用开发框架:应用篇(十三) —— REST Convention

    Portal-Basic Java Web应用开发框架(简称 Portal-Basic)是一套功能完备的高性能Full-Stack Web应用开发框架,内置稳定高效的MVC基础架构和DAO框架(已内置 ...

  4. Portal-Basic Java Web 应用开发框架:应用篇(十四) —— 异步 Action

    Portal-Basic Java Web应用开发框架(简称 Portal-Basic)是一套功能完备的高性能Full-Stack Web应用开发框架,内置稳定高效的MVC基础架构和DAO框架(已内置 ...

  5. Portal-Basic Java Web 应用开发框架:应用篇(八) —— 整合 Freemarker

    Portal-Basic Java Web应用开发框架(简称 Portal-Basic)是一套功能完备的高性能Full-Stack Web应用开发框架,内置稳定高效的MVC基础架构和DAO框架(已内置 ...

  6. Portal-Basic Java Web 应用开发框架:应用篇(十一) —— 整合 Spring

    Portal-Basic Java Web应用开发框架(简称 Portal-Basic)是一套功能完备的高性能Full-Stack Web应用开发框架,内置稳定高效的MVC基础架构和DAO框架(已内置 ...

  7. 推荐一个 Java 接口快速开发框架,超级nice!

    点击关注公众号,实用技术文章及时了解 今天给小伙伴们介绍一个Java接口快速开发框架-magic-api 简介 magic-api 是一个基于 Java 的接口快速开发框架,编写接口将通过 magic ...

  8. Portal-Basic Java Web应用开发框架V3.0正式发布(源码、实例及文档)

    Portal-Basic Java Web应用开发框架(简称 Portal-Basic)是一套功能完备的高性能Full-Stack Web应用开发框架,内置稳定高效的MVC基础架构和DAO框架(已内置 ...

  9. .net快速开发平台—web快速开发框架

    力软web快速开发框架       力软web是基于ASP.NET MVC的敏捷开发系统,他是一款具有代码生成功能的智能快速开发平台.力软web的主架构是基于.Net MVC的b/s架构,后台ORM支 ...

最新文章

  1. Kafka代码走读-LogCleaner
  2. 数据库期末复习样卷,临时抱佛脚高分通过考试
  3. 继往开来:Google I/O 21 Android Gradle Plugin 更新总结
  4. 天津计算机考研901,2013年天津大学901计算机考研真题
  5. Spring Security——SessionManagement中InvalidSessionStrategy自定义——简单跳过Fitter过滤刷新Session
  6. 第十周软件工程作业-每周例行报告
  7. 所有子序列的逆序对总和_一个数字的所有子串的总和
  8. 在视觉任务上大幅超越ReLU的新型激活函数
  9. UE4 Packaging and Cooking Games
  10. 【javascript笔记】js基本数据类型
  11. 7、matplotlib条形图的绘制
  12. 在线考试系统软件测试总结,基于智慧校园平台的在线考试系统应用研究
  13. mysql导出表数据到文件_MySQL导出数据到文件中的方法
  14. win10代理服务器没有响应解决方案
  15. 微信小程序——章节自测七
  16. php画五角星,H5怎样用绘制五角星
  17. vue 全局/局部组件
  18. Sqoop同步任务‘ can not be represented as java.sql.Date
  19. javaScript搜索框
  20. android remoteViews

热门文章

  1. 计算机联锁控制系统技术是,铁路信号计算机联锁控制系统容错技术探析
  2. Boost.Interprocess.file_mapping内存映射文件
  3. EM算法的原理推导及解释
  4. poi解决excel 03 与 07不兼容的问题
  5. Android调用JNI的实现方法
  6. word文档中enter到下一页
  7. python计数器_【Python】计数器 Counter
  8. Python Selenium 抖音直播平台实现自动发送评论
  9. 怎么从手机上下载求职简历模板?如何在线下载个人简历表格?
  10. 《简明量子力学》课堂整理