Java Web快速开发框架 ---- JSPX
现在的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相关推荐
- Java Web快速开发框架 ---- JSPX (一)
现在的Java Web应用程序框架都需要进行大量的配置.投入大量的时间精力后才能投入生产,而且给人比较繁琐的感觉,如Struts.Tapestry等.今天在Sourceforge上寻到一开源框架--J ...
- 推荐一个 Java 接口快速开发框架
欢迎关注方志朋的博客,回复"666"获面试宝典 今天给小伙伴们介绍一个Java接口快速开发框架-magic-api 简介 magic-api 是一个基于 Java 的接口快速开发框 ...
- Portal-Basic Java Web 应用开发框架:应用篇(十三) —— REST Convention
Portal-Basic Java Web应用开发框架(简称 Portal-Basic)是一套功能完备的高性能Full-Stack Web应用开发框架,内置稳定高效的MVC基础架构和DAO框架(已内置 ...
- Portal-Basic Java Web 应用开发框架:应用篇(十四) —— 异步 Action
Portal-Basic Java Web应用开发框架(简称 Portal-Basic)是一套功能完备的高性能Full-Stack Web应用开发框架,内置稳定高效的MVC基础架构和DAO框架(已内置 ...
- Portal-Basic Java Web 应用开发框架:应用篇(八) —— 整合 Freemarker
Portal-Basic Java Web应用开发框架(简称 Portal-Basic)是一套功能完备的高性能Full-Stack Web应用开发框架,内置稳定高效的MVC基础架构和DAO框架(已内置 ...
- Portal-Basic Java Web 应用开发框架:应用篇(十一) —— 整合 Spring
Portal-Basic Java Web应用开发框架(简称 Portal-Basic)是一套功能完备的高性能Full-Stack Web应用开发框架,内置稳定高效的MVC基础架构和DAO框架(已内置 ...
- 推荐一个 Java 接口快速开发框架,超级nice!
点击关注公众号,实用技术文章及时了解 今天给小伙伴们介绍一个Java接口快速开发框架-magic-api 简介 magic-api 是一个基于 Java 的接口快速开发框架,编写接口将通过 magic ...
- Portal-Basic Java Web应用开发框架V3.0正式发布(源码、实例及文档)
Portal-Basic Java Web应用开发框架(简称 Portal-Basic)是一套功能完备的高性能Full-Stack Web应用开发框架,内置稳定高效的MVC基础架构和DAO框架(已内置 ...
- .net快速开发平台—web快速开发框架
力软web快速开发框架 力软web是基于ASP.NET MVC的敏捷开发系统,他是一款具有代码生成功能的智能快速开发平台.力软web的主架构是基于.Net MVC的b/s架构,后台ORM支 ...
最新文章
- Kafka代码走读-LogCleaner
- 数据库期末复习样卷,临时抱佛脚高分通过考试
- 继往开来:Google I/O 21 Android Gradle Plugin 更新总结
- 天津计算机考研901,2013年天津大学901计算机考研真题
- Spring Security——SessionManagement中InvalidSessionStrategy自定义——简单跳过Fitter过滤刷新Session
- 第十周软件工程作业-每周例行报告
- 所有子序列的逆序对总和_一个数字的所有子串的总和
- 在视觉任务上大幅超越ReLU的新型激活函数
- UE4 Packaging and Cooking Games
- 【javascript笔记】js基本数据类型
- 7、matplotlib条形图的绘制
- 在线考试系统软件测试总结,基于智慧校园平台的在线考试系统应用研究
- mysql导出表数据到文件_MySQL导出数据到文件中的方法
- win10代理服务器没有响应解决方案
- 微信小程序——章节自测七
- php画五角星,H5怎样用绘制五角星
- vue 全局/局部组件
- Sqoop同步任务‘ can not be represented as java.sql.Date
- javaScript搜索框
- android remoteViews