- 浏览: 116178 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
czqjay:
news/index/{pageNum}/{author} { ...
来谈谈REST、RBAC下的URL权限控制 -
csumck:
这也有一个在线时序图工具 http://echoma.git ...
推荐一个不错的在线“画”时序图的软件(通过文字生成图片) -
cpop:
...
如何将自己的jar包Release到Maven中央仓库中 -
yangzai911:
如果 accept-language中有值,那么也是默认取第一 ...
Play framework 国际化 -
wangyong8861850:
[color=darkred][/color][size=x- ...
EWeb4J 1.9.1 新版本发布 基于Servlet/JDBC的轻量级web开发框架
呼,写了个用户指南,只完成了MVC部分。好累的说。
不过,也总算框架开发基本完成了。
至少,终于让它RESTful了。
下载地址:http://code.google.com/p/eweb4j/downloads/list
给出一个简单的Controller吧,囧
PetService
对于我将Service去继承一个BaseDAO,大家有木有什么看法?因为我觉得我的这个程序木有什么业务逻辑,仅有的几个数据验证就让controller帮我做了,数据库访问逻辑让dao帮我做了,又没有什么事务性,所以干脆就让servcice继承一个BaseDAO来应对一些纯粹的数据库访问吧。其实很多的系统都这样吧,service层仅仅是简单的调用了DAO的方法而已。
PetDAO
PetDAOImpl
Pet
EWeb4J框架配置文件
ioc配置
dbInfo配置
eweb4j-satrt-config.xml
web.xml
ss没有具体看过。
其实我本来是参考struts2风格的,后来发现springMVC,Nutz的风格不错,很喜欢,于是就弄成现在这四不像了。
最新的版本已经改进了很多了,ORM也支持事务模板了。总之都在慢慢改进当中。谢谢你的关注。
不过,也总算框架开发基本完成了。
至少,终于让它RESTful了。
下载地址:http://code.google.com/p/eweb4j/downloads/list
给出一个简单的Controller吧,囧
package test.controller; import java.io.PrintWriter; import java.util.List; import javax.servlet.http.HttpServletRequest; import test.po.Pet; import test.service.PetService; import com.cfuture08.eweb4j.component.DivPageComp; import com.cfuture08.eweb4j.ioc.IOC; import com.cfuture08.eweb4j.mvc.annotation.Controller; import com.cfuture08.eweb4j.mvc.annotation.Param; import com.cfuture08.eweb4j.mvc.annotation.RequestMapping; import com.cfuture08.eweb4j.mvc.annotation.RequestMethod; import com.cfuture08.eweb4j.mvc.annotation.Result; import com.cfuture08.eweb4j.mvc.annotation.Singleton; import com.cfuture08.eweb4j.mvc.annotation.ValField; import com.cfuture08.eweb4j.mvc.annotation.ValParam; import com.cfuture08.eweb4j.mvc.annotation.Validator; import com.cfuture08.util.JsonConverter; @Singleton @Controller @RequestMapping("pets") public class PetController { private final PetService service = IOC.getBean("PetService"); @RequestMapping("/") @Result(location = { "showAll.jsp" }, name = { "success" }, type = { "" }, index = { "0" }) public String getAll(HttpServletRequest request) { List<Pet> pets = this.service.getAll(); request.setAttribute("pets", pets); return "success"; } @RequestMapping("/分页") @Result(location = { "showAll.jsp" }, name = { "success" }, type = { "" }, index = { "0" }) public String getList(HttpServletRequest request, @Param("p") int pageNum, @Param("n") int numPerPage) { List<Pet> pets = this.service.getPage(pageNum, numPerPage); if (pets != null && pets.size() > 0) { DivPageComp dpc = new DivPageComp(pageNum, numPerPage, this.service.countAll(), 4); dpc.setLocation(String.format("分页?p={pageNum}&n=%s", numPerPage)); dpc.doWork(); request.setAttribute("pets", pets); request.setAttribute("dpc", dpc); } return "success"; } @RequestMapping("/{id}") @Result(location = { "seeDetail.jsp" }, name = { "success" }, type = { "" }, index = { "0" }) public String get(HttpServletRequest request, PrintWriter out, @Param("id") Integer id, @Param("ext") String ext) { Pet pet = this.service.getOne(id); if ("json".equalsIgnoreCase(ext)) { out.print("<pre>" + JsonConverter.convert(pet) + "</pre>"); return "ajax"; } request.setAttribute("pet", pet); return "success"; } @RequestMapping("/{id}") @RequestMethod("DELETE") @Result(location = { "分页?p=1&n=10" }, name = { "success" }, type = { "redirect" }, index = { "0" }) public String deleteOne(PrintWriter out, @Param("id") Integer id) { String error = this.service.delete(new Integer[] { id }); if (error == null) { return "success"; } else { out.print(String.format( "<script>alert('%s');history.go(-1)</script>", error)); return "ajax"; } } @RequestMapping("/{id}") @RequestMethod("PUT") @Result(location = { "分页?p=1&n=10" }, name = { "success" }, type = { "redirect" }, index = { "0" }) @Validator(name = { "requried", "int", "int", "length" }, clazz = {}, index = {}, showErrorType = {}) @ValField(name = { "id", "id", "age", "type" }, index = { "0", "1", "2", "3" }, message = { "请选择要修改的记录", "id必须是数字", "年龄必须是数字", "类型长度不能超过10" }) @ValParam(index = { "3" }, name = { "maxLength" }, value = { "10" }) public String put(PrintWriter out, Pet aPet) { String error = this.service.update(aPet); if (error == null) { return "success"; } else { out.print(String.format( "<script>alert('%s');history.go(-1)</script>", error)); } return "ajax"; } @RequestMapping("/{id}/编辑") @Result(location = { "../edit.jsp" }, name = { "success" }, type = { "" }, index = { "0" }) public String edit(HttpServletRequest request, @Param("id") Integer id) { Pet tPet = this.service.getOne(id); request.setAttribute("pet", tPet); return "success"; } @RequestMapping("/添加") @Result(index = { "0" }, location = { "add.jsp" }, name = { "success" }, type = { "" }) public String addPet() { return "success"; } @RequestMapping("/") @RequestMethod("POST") @Result(location = { "分页?p=1&n=10" }, name = { "success" }, type = { "redirect" }, index = { "0" }) @Validator(clazz = {}, index = { "0" }, name = { "int", "length" }, showErrorType = { "", "" }) @ValField(index = { "0", "1" }, message = { "年龄必须是数字", "类型长度不能超过10" }, name = { "age", "type" }) @ValParam(index = { "1" }, name = { "maxLength" }, value = { "10" }) public String post(PrintWriter out, Pet aPet) { String error = this.service.create(aPet); if (error == null) { return "success"; } else { out.print(String.format( "<script>alert('%s');history.go(-1)</script>", error)); } return "ajax"; } }
PetService
package test.service; import test.dao.PetDAO; import test.po.Pet; import com.cfuture08.eweb4j.orm.dao.base.BaseDAOImpl; public class PetService extends BaseDAOImpl<Pet>{ private PetDAO petDAO; public PetService() { super(Pet.class); } public void setPetDAO(PetDAO aPetDAO){ this.petDAO = aPetDAO; } }
对于我将Service去继承一个BaseDAO,大家有木有什么看法?因为我觉得我的这个程序木有什么业务逻辑,仅有的几个数据验证就让controller帮我做了,数据库访问逻辑让dao帮我做了,又没有什么事务性,所以干脆就让servcice继承一个BaseDAO来应对一些纯粹的数据库访问吧。其实很多的系统都这样吧,service层仅仅是简单的调用了DAO的方法而已。
PetDAO
package test.dao; public interface PetDAO { }
PetDAOImpl
package test.dao; public class PetDAOImpl implements PetDAO { }
Pet
package test.po; /** * just a po * * @author weiwei * */ public class Pet { private Integer id = 0; private String name; private String type; private int age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getType() { return type; } public void setType(String type) { this.type = type; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String toString() { return "[Pet id:" + this.id + ",name:" + this.name + ",age:" + this.age + ",type:" + this.type + "]"; } }
EWeb4J框架配置文件
ioc配置
<?xml version="1.0" encoding="UTF-8"?> <beans> <bean id="PetService" scope="singleton" class="test.service.PetService" xmlBean="com.cfuture08.eweb4j.ioc.config.bean.IOCConfigBean"> <inject ref="PetDAO" name="petDAO" type="" value="" xmlBean="com.cfuture08.eweb4j.ioc.config.bean.Injection"/> </bean> <bean id="PetDAO" scope="singleton" class="test.dao.PetDAOImpl" xmlBean="com.cfuture08.eweb4j.ioc.config.bean.IOCConfigBean"> <inject ref="" name="" type="" value="" xmlBean="com.cfuture08.eweb4j.ioc.config.bean.Injection"/> </bean> </beans>
dbInfo配置
<?xml version="1.0" encoding="UTF-8"?> <beans> <bean name="myDBInfo" xmlBean="com.cfuture08.eweb4j.orm.dao.config.bean.DBInfoConfigBean"> <dataBaseType>MYSQL</dataBaseType> <jndiName></jndiName> <jdbcUtil></jdbcUtil> <driverClass>com.mysql.jdbc.Driver</driverClass> <jdbcUrl>jdbc:mysql://localhost:3306/test</jdbcUrl> <user>root</user> <password>root</password> <initialPoolSize>3</initialPoolSize> <maxPoolSize>50</maxPoolSize> <minPoolSize>1</minPoolSize> <acquireIncrement>3</acquireIncrement> <idleConnectionTestPeriod>60</idleConnectionTestPeriod> <maxIdleTime>25000</maxIdleTime> <autoCommitOnClose>true</autoCommitOnClose> <preferredTestQuery></preferredTestQuery> <testConnectionOnCheckout>false</testConnectionOnCheckout> <testConnectionOnCheckin>false</testConnectionOnCheckin> <acquireRetryAttempts>30</acquireRetryAttempts> <acquireRetryDelay>1000</acquireRetryDelay> <breakAfterAcquireFailure>false</breakAfterAcquireFailure> </bean> </beans>
eweb4j-satrt-config.xml
<?xml version="1.0" encoding="UTF-8"?> <beans> <bean xmlBean="com.cfuture08.eweb4j.config.bean.ConfigBean"> <debug>0</debug> <ioc xmlBean="com.cfuture08.eweb4j.config.bean.ConfigIOC"> <open>1</open> <debug>true</debug> <logFile>ioc.log</logFile> <logMaxSize>5</logMaxSize> <iocXmlFiles xmlBean="com.cfuture08.eweb4j.config.bean.IOCXmlFiles"> <path>eweb4j-ioc-config.xml</path> </iocXmlFiles> </ioc> <orm xmlBean="com.cfuture08.eweb4j.config.bean.ConfigORM"> <open>true</open> <debug>true</debug> <logFile>orm.log</logFile> <logMaxSize>5</logMaxSize> <ormXmlFiles xmlBean="com.cfuture08.eweb4j.config.bean.ORMXmlFiles"> <path></path> </ormXmlFiles> <dbInfoXmlFiles xmlBean="com.cfuture08.eweb4j.config.bean.DBInfoXmlFiles"> <path>eweb4j-dbinfo-config.xml</path> </dbInfoXmlFiles> </orm> <mvc xmlBean="com.cfuture08.eweb4j.config.bean.ConfigMVC"> <open>true</open> <debug>true</debug> <logFile>mvc.log</logFile> <logMaxSize>5</logMaxSize> <scanActionPackage>test.controller</scanActionPackage> <actionXmlFiles xmlBean="com.cfuture08.eweb4j.config.bean.ActionXmlFile"> <path></path> </actionXmlFiles> <interXmlFiles xmlBean="com.cfuture08.eweb4j.config.bean.InterXmlFile"> <path></path> </interXmlFiles> </mvc> </bean> </beans>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.html</welcome-file> </welcome-file-list> <filter> <filter-name>EWeb4JFilter</filter-name> <filter-class>com.cfuture08.eweb4j.mvc.EWeb4JFilter</filter-class> </filter> <filter-mapping> <filter-name>EWeb4JFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
评论
3 楼
liuxiang00435057
2012-10-18
能加我QQ吗 124180505,探讨关于springmvc rest url权限控制
2 楼
laiweiweihi
2011-08-13
KimHo 写道
Controller这块像struts2的风格,不像spring3mvc的风格
参考了springside3的实现么?
参考了springside3的实现么?
ss没有具体看过。
其实我本来是参考struts2风格的,后来发现springMVC,Nutz的风格不错,很喜欢,于是就弄成现在这四不像了。
最新的版本已经改进了很多了,ORM也支持事务模板了。总之都在慢慢改进当中。谢谢你的关注。
1 楼
KimHo
2011-08-13
Controller这块像struts2的风格,不像spring3mvc的风格
参考了springside3的实现么?
参考了springside3的实现么?
发表评论
-
EWeb4J 1.9.1 新版本发布 基于Servlet/JDBC的轻量级web开发框架
2012-11-28 22:08 2813EWeb4J 是一个基于 Servlet/Jdbc 构建的轻量 ... -
EWeb4J-SolidBase 发布新版本
2012-07-08 12:41 2124SolidBase项目是采用 DWZ + EWeb4J 开发的 ... -
EWeb4J 框架迁移到 GitHub
2012-07-05 10:02 1885EWeb4J 框架: https://github.com/ ... -
发布一个EWeb4J-1.9的Demo
2012-07-04 16:38 26EWeb4J-1.9框架发布在即,在此之前,发布一个小Demo ... -
EWeb4J-1.9-文件上传下载和生成建表脚本
2012-06-09 12:11 2299毕业了。高兴一下,哈。 一直以来,eweb4j framew ... -
SolidBase 二次开发 GIS 截图
2012-05-07 16:12 1907有位大哥哥使用 EWeb4J 的项目 SolidBase 作为 ... -
EWeb4J 国际化支持出炉啦(有源码看)
2012-05-06 15:31 2046很荣幸也很开心地公布,EWeb4J 支持国际化了。并且有着它独 ... -
eweb4j在线演示程序更新
2012-04-25 09:25 2092访问地址:SolidBase 增加菜单显示权限 ... -
EWeb4J-1.9-继续改善ActiveRecord支持【级联】操作
2012-04-17 20:58 1485老习惯:约定优于配置 ... -
EWeb4J-1.9-控制器更新
2012-04-13 16:56 1442主要增加以下更新: 验证器 声明式事务 7个默认Acti ... -
eweb4j-1.9-支持ActiveRecord模式
2012-04-06 20:46 1616@Entity @Table(name="t_ ... -
(不断更新)EWeb4J-1.9-SNAPSHOT最近进程
2012-03-28 23:33 1814经过奋战,终于有个稳定点的SNAPSHOT版本咯。 较之上个 ... -
eweb4j演示项目-SolidBase增加对菜单显隐的权限控制
2012-03-28 14:41 1898昨晚捣鼓到两点多才弄好,今天整理了下,大概把菜单权限控制做好了 ... -
(下篇)单例POJO实现CRUD+分页+搜索Demo
2012-03-23 23:14 2本篇程序特点: POJO式的控制器,无需继承、无需实 ... -
体验快速开发2:单例POJO实现CRUD+分页+搜索Demo
2012-03-23 22:54 29程序特点: POJO式的控制器,无需继承、无需实现接 ... -
体验快速开发:只有一个控制类实现的CRUD+分页+搜索Demo
2012-03-22 22:17 182╮(╯▽╰)╭,本来不想谈什么快速开发的,但是最近老是有人拿什 ... -
EWeb4J-1.8.6 发布,同时带来一个演示项目
2012-03-08 17:44 2986距离上次1.7的发布已经过去5个月了。首先值得高兴的是EW ... -
eweb4j加进到Maven中央仓库啦,先发个快照版
2012-02-25 23:54 1691挺开心的。 先是注册好了 eweb4j.org。 然后是sv ... -
eweb restful需要考虑的,谨记。
2012-02-20 19:25 1155框架是否遵守一条HTTP消息并非仅仅包含一个URI的原则?也 ... -
eweb demo war包+源码+db脚本 下载 (1.8.x-SNAPSHOT)
2011-12-27 17:12 2377看来,年内发布一个完整的新版本比较难了. 实在是要忙公司的项 ...
相关推荐
eweb4j是一个Java开发框架,它专注于提供高效、轻量级且易于使用的Web应用程序解决方案。这个框架的设计理念是简化开发流程,提高开发效率,同时保持代码的清晰性和可维护性。下面我们将深入探讨eweb4j框架的核心...
**eweb4j框架详解** `eweb4j`是一个基于Java开发的轻量级Web应用框架,旨在简化Web应用程序的开发过程,提高开发效率。它集成了许多实用功能,如MVC模式、数据访问、安全管理等,为开发者提供了一个高效、易用的...
EWeb4J ? = EWeb4J 是一个基于 Servlet/Jdbc 构建的轻量级 Java Web 开发框架。它可以代替 SSH 来开发一个完整的 Web 应用程序。 它专注于 少侵入、少配置、松耦合、RESTful架构风格的 Web 应用程序开发。 EWeb4J ...
Rockwell 1756-Eweb模块
EWeb4J是一款专为快速构建企业级Web应用而设计的开源框架。它提供了一种声明式的编程模型,允许开发者通过简单的XML配置文件来定义页面布局、数据绑定逻辑等,极大地简化了Web应用的开发过程。EWeb4J支持多种数据库...
1756-EWEB
四、参数说明 EWeb编辑器中,许多功能可以通过设置参数来定制。例如,你可以设置编辑器的主题、语言偏好、自动保存间隔等。实例文档会详细解释这些参数的含义和用途,帮助你根据项目需求调整编辑器配置。 五、文件...
在描述中提到的“eweb编辑器 要改下db中的后缀为asp”,这可能是指在使用eweb编辑器进行网站开发时,需要将数据库连接文件或动态页面文件的扩展名从原本的格式更改为ASP(Active Server Pages)格式。ASP是一种微软...
EWeb编辑器2.80版本包含大量的预设模板,涵盖多种网站类型,如企业官网、博客、电商等,用户可快速套用模板,进行个性化调整,快速搭建网站框架。 4. **图片和媒体管理**: 内置的图片和多媒体管理功能,让用户...
7. **模板与预设**:eweb内置多种预设模板,用户可以根据需要选择合适的网页布局,快速搭建网页框架。 8. **代码保存与预览**:编辑完成后,用户可以选择保存HTML代码,或者直接预览网页效果,确保内容符合预期。 ...
个人学习使用,简单的对接银行的接口,发现都是java版本的,写个.net的demo记录下,简单的对接了下招商银行,主要有付款和交易流水查询等基本的接口开发
《eWeb Editor客户端:在线文本编辑器的深度解析与应用》 eWeb Editor是一款功能强大的在线文本编辑器,尤其在Web开发领域中被广泛应用。它以其便捷的操作界面和丰富的编辑功能,为网络编程人员提供了极大的便利。...
在线编辑HTML,使用户方便使用编码在线编辑HTML,使用户方便使用编码
让 AsciiDoc 成为您的文学编程工具集的一部分。 使用 eWEB,您可以使用嵌入的 WEB 代码片段编织和缠结作为 AsciiDoc 文档编写的文字程序。
ASP常用的后台编辑器,带图片上传功能 调用方法如下例子: <textarea name="nr" ROWS="20" COLS="70">%=Server.HTMLEncode(rs("nr"))%></textarea> <iframe ID="eWebEditor1" src="../...</iframe>
ruffle-demo是如何在您的网站中包含Ruffle的示例。 对于开发人员来说,它也是一个不错的本地测试,可以在Web上本地运行Ruffle。 使用ruffle-demo 托管演示 要立即在线观看此演示,。 它与该目录完全相同,每晚更新...
**eWeb Editor 3.8 全面解析** eWeb Editor 3.8 是一款功能强大的在线HTML编辑器,专为网页内容编辑和管理而设计。它提供了丰富的文本格式化选项,让用户无需深入HTML代码就能轻松创建和编辑网页内容。这款编辑器以...
#### 四、执行机制 - **函数实现**: Fel的所有操作,包括基本运算符(如 +, -, *, /)均通过函数来实现。 - **双引擎支持**: - **解释执行**: 直接对表达式进行求值,适用于动态性强、表达式简单的场景。 - **编译...
eWEB - 对手,Emmanuel Carrère 该网站是作为我们 eWEB 项目的一部分创建的,其目的是创建一个文化站点。 我们的选择落在了 Emmanuel Carrère 的《对手》一书中。 然后我们决定创建一个互联网站点,该站点涉及...