精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-07-10
有人说不要重新发明轮子,我说你不能总用别人的轮子。也许VIWO是个木头轮子,也许VIWO不是很结实,经不起大的颠簸,也许VIWO微不足道,你甚至不屑一顾,但是我想:Struts也好Spring也好,iBatis也好,起初无非就是个冲动、想法、无奈一点一点发展起来。 今天我把我写的一些小程序打成包,命名叫做VIWO开源发布在这里,说不上为中国的开源界做什么贡献,就是想抛砖引玉,能让更多的高手把你们写的东西共享出来,让大家一起学习共同进步,而不是泛泛而谈新新技术,求新求变固然无可厚非,只是“勿在浮沙筑高台”。或者你有兴趣拿这VIWO的源代码,添加些新功能,修改些BUG,,亦或者给几块板砖,我都会感激不尽。 因为传输速度,VIWO发布包,源码,示例放在Google Code上面了(JavaEye的访问速度可能和网段有关,我用大连网通访问速度奇慢,文章发好几遍才能发全)。 下载页面:http://code.google.com/p/viwo/downloads/list
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-07-10
下面简单讲解一下如何使用VIWO框架(可能VIWO的级别还够不上框架)。
拷贝viwox.x.jar到lib目录下,VIWO框架依赖于Apache的几个子项目,拷贝相应的jar包到lib目录。依赖类库列表: commons-beanutils.jar commons-digester.jar log4j-1.2.13.jar commons-logging.jar commons-collections.jar commons-dbcp.jar commons-pool.jar 使用数据库时需要相应的数据库驱动。 VIWO框架主要由三个模块组成,分别实现了MVC,IoC,O/R Maping,都是比较简单的实现,如果你对这种简单的实现有什么意见、建议、批评、高见请留言。 MVC部分配置使用指南: 简单来说配置方式类似于Struts,示例如下: web.xml中做如下配置: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <display-name>viwoweb</display-name> <servlet> <servlet-name>viwo</servlet-name> <servlet-class>org.viwo.web.acion.ViwoServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/viwo-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>viwo</servlet-name> <url-pattern>*.viwo</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file> user/index.viwo </welcome-file> </welcome-file-list> </web-app> 新建/WEB-INF/viwo-config.xml ,格式如下: <?xml version="1.0" encoding="UTF-8"?> <viwo-config> <action path="user" type="com.viwo.test.web.UserAction"/> <forward name="adduser" path="jsp/adduser.jsp"/> </viwo-config> 正如你所见,配置只有两种属性,action用来配置处理请求Action的全类名和URL路径之间的对应关系,forward用来与返回的页面相对应。这里需要说明的是你完全可以空着什么也不配置,而程序照样可以执行,只是需要遵循一些规则(这也勉强叫做规则重于配置吧)。 完成后新建类com.viwo.test.web.UserAction,如下: package com.viwo.test.web; import java.sql.Date; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.viwo.bean.factory.BeanFactory; import com.viwo.test.domain.User; import com.viwo.test.service.UserService; public class UserAction { public String search(HttpServletRequest request,HttpServletResponse response) throws Exception { UserService userService = (UserService)BeanFactory.getBean("userservice"); List userList = userService.searchUsers(); request.setAttribute("userList", userList); return "searchResult"; } public String add(HttpServletRequest request,HttpServletResponse response) throws Exception { User user = new User(); user.setUsername(request.getParameter("username")); user.setPassword(request.getParameter("password")); user.setRegisterdate(new Date(new java.util.Date().getTime())); user.setUserlevel(Integer.parseInt(request.getParameter("userlevel"))); UserService userService = (UserService)BeanFactory.getBean("userservice"); userService.addUser(user); response.sendRedirect(request.getContextPath()+"/user/search.viwo"); return null; } public String index(HttpServletRequest request,HttpServletResponse response) throws Exception { return "adduser"; } } 上面的示例是VIWO框架中的Action,其中部分的代码用到下面将要讲到的IoC模块,看了下面内容也可以回来看看这个例子。 对于UserAction类不需要继承自任何类,就是一个普通的Java类,com.viwo.test.web.UserAction的方法只需传递HttpServletRequest HttpServletResponse这两个参数,并返回一个字符串类型值(这个返回值对应着viwo-config.xml中的forward属性)即可,部署到Web服务器中后,在浏览器中用如下格式即可调用: http://127.0.0.1:7001/YourWebApp/user/index.viwo 即可访问com.viwo.test.web.UserAction类中的index方法。 如果viwo-config.xml中既不配置action也不配置forward属性,URL中的路径就是你的类名(不能有包名)和JSP文件的文件名组成(不包括后缀,必须在根目录下)。 |
|
返回顶楼 | |
发表时间:2007-07-10
IoC容器模块使用指南:
VIWO框架实现一个简单的IoC容器,可以满足基本的POJO管理。 要使用VIWO的IoC容器,只需要配置viwo-bean.xml(存放于类路径根目录下),如下: <?xml version="1.0" encoding="UTF-8"?> <beans> <bean id="userservice" type="com.viwo.test.service.UserServiceImpl" > <ref name="sqlMapClient" value="sqlMapClient"/> </bean> <bean id="sqlMapClient" type="org.viwo.sqlmap.client.SqlMapClient" factory="getInstance"/> <bean id="viwo_data_source" type="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.microsoft.jdbc.sqlserver.SQLServerDriver"/> <property name="url" value="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=winestore"/> <property name="username" value="sa"/> <property name="password" value=""/> </bean> </beans> 这个配置文件演示了IoC模块的各种配置方式。 配置完成后实现相应的接口和类,即可做如下调用: UserService userService = (UserService)BeanFactory.getBean("userservice"); 下面简单讲解一下viwo-bean.xml的配置参数 最外层一对<beans>, 里面由n个<bean>组成,bean有id(调用时传递的参数),type(POJO的类型),factory(工厂方法,必须是静态工厂方法),transaction(声明式的事务支持)属性。其中transaction还没有实现完成,暂时不能使用。 <bean>里层有<property>和<ref>两个子元素,分别表示POJO的一般属性和引用属性,这两个子元素都具有name和value属性。name为属性名,value为属性值或者引用属性bean的id。 |
|
返回顶楼 | |
发表时间:2007-07-10
O/R Mappinp模块使用指南:
VIWO框架实现的O/R Mapping类似于iBatis中的SqlMap,要使用此模块配置viwo-sqlmap.xml(同viwo-bean.xml一样存放于类路径根目录下),如下: <?xml version="1.0" encoding="UTF-8"?> <sqlmap-config> <select id="searchUsers" type="com.viwo.test.domain.User" param="com.viwo.test.domain.User"> <sql> select username, password, registerdate, userlevel from viwouser </sql> </select> <execute id="addUser" param="com.viwo.test.domain.User"> <sql> insert into viwouser (username,password,registerdate,userlevel) values (#username#,#password#,getdate(),#userlevel#) </sql> </execute> </sqlmap-config> 配置完SQL语句后即可如下调用,执行SQL查询和更新: SqlMapClient sqlMapConfig = SqlMapClient.getInstance(); 或者 SqlMapClient sqlMapConfig = SqlMapClient.getInstance(“viwo-sqlmap.xml”); 下面的getInstance可以调用任何配置文件,所以viwo-sqlmap.xml这个文件的命名可以随意起,什么的方法去找默认的SqlMap配置文件viwo-sqlmap.xml。 上列中分别演示了带参数select语句,不带参数select语句,update语句,insert语句的配置,下面讲解一下配置参数: 最外层一对<sqlmap-config>, <sqlmap-config>里层包括n个<select>和<execute>, <select>表示有返回值的查询语句 <execute>表示没有返回值的insert、update等语句。 <select>包括三个参数id(调用时传递的参数),type(返回结果或结果集中元素类型),param(调用查询或更新语句时接受的参数类型)。 <execute>包括两个参数id(调用时传递的参数),param(调用查询或更新语句时接受的参数类型)。 <select>和<execute>内部 由<sql>标识了相应的SQL语句,此处的SQL语句和普通SQL语句一致,只是多了一些#somevalue#元素用来表示执行时动态写入的值,这些值会被传入的对象的属性动态替换。 因为是操作数据库所以对数据源的配置必不可少,VIWO中数据源的配置有两种方法 方法一:类路径中添加文件:viwo-database.properties,如下: driver=com.microsoft.jdbc.sqlserver.SQLServerDriver url=jdbc:microsoft:sqlserver://192.168.0.77:1433;DatabaseName=db user=sa password=sa 方法二:通过IoC配置文件viwo-bean.xml配置数据源 在上面列出的viwo-bean.xml文件中其实已经给出了数据源配置: <bean id="viwo_data_source" type="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.microsoft.jdbc.sqlserver.SQLServerDriver"/> <property name="url" value="jdbc:microsoft:sqlserver://192.168.0.77:1433;DatabaseName=db"/> <property name="username" value="sa"/> <property name="password" value="sa"/> </bean> VIWO默认情况下优先选择第二中配置,如果没有找到viwo-bean.xml中数据源的配置,会自动选择第一种配置。 |
|
返回顶楼 | |
发表时间:2007-07-12
引用 羨慕, 我也正想自己弄一個。
开源的目的就是让大家共同拥有 |
|
返回顶楼 | |
发表时间:2007-07-12
挺好,不过没什么特色阿。。。
View 层:实在是看不出特色。。。spring 抽象了视图的概念,这是 它的特色之一。而你的没有。 Model 层:同样没特色。。。 Controller 层:同样没特色。。。 那么你这个框架出现的目的到底是什么呢??? |
|
返回顶楼 | |
发表时间:2007-07-12
建议楼主吧自己的特色亮出来。
如果没有了自己的亮点,那就没有研究的价值了,毕竟这块轮子太多。大家都习惯了以前的轮子。 |
|
返回顶楼 | |
发表时间:2007-07-12
yananay 写道 挺好,不过没什么特色阿。。。
View 层:实在是看不出特色。。。spring 抽象了视图的概念,这是 它的特色之一。而你的没有。 Model 层:同样没特色。。。 Controller 层:同样没特色。。。 那么你这个框架出现的目的到底是什么呢??? 抽象个视图其实是很简单的,这个我开始也考虑了,最终还是不做这个抽象。因为我认为没有必要,request,和response足够应付绝大部分的情况了,如果做抽象,那么我们写的Action中必然会依赖更多的VIWO框架中的类,也就是说Action中的方法传递的参数就不是request和response,而是xxxxForm,返回值就不是String而是yyyyView,这不又成了Struts和SpringMVC了吗?方法必须传递request和response这个我倒是想再简化一下,因为有写时候传递过来的request和response并没有用到,下一个版本会加进来,让参数个数可以是0个、1个、2个。 如果非要说什么特色,我觉得VIWO的特色就是简单、明了、清晰、实用、全面。可能仁者见仁,智者见智,我认为Form这个东西在很多时候都是没有必要的,所以我简化之用request直接替代,还有taglib,实在想用直接JSTL就可以,而且VIWO也支持velocity,你可以很容易的在VIWO中使用它(其实VIWO中也并没有写多少支持它代码)。 在配置文件上我尽量简化,基本上达到一看就明白的地步,绝对没有Struts、Spring、iBatis那样复杂的配置选项。 总之,我是按照我认为的“简单、明了、清晰、实用、全面”的原则来做VIWO,欢迎大家继续发表看法、建议、意见、批评。 |
|
返回顶楼 | |
发表时间:2007-07-12
jindw 写道 建议楼主吧自己的特色亮出来。
如果没有了自己的亮点,那就没有研究的价值了,毕竟这块轮子太多。大家都习惯了以前的轮子。 一个熟悉Java的人学会并正确使用Struts、Spring、iBatis可能需要3个月(在时间上请不要评论),但是如果学会并正确使用VIWO可能只用3天。 一个熟悉Java的人看完Struts、Spring、iBatis的代码可能要用1年,但是如果看VIWO的源代码可能只用1周。 这或许也叫特色吧! VIWO只是个开始,肯定还有很多不完善的地方,当然也没法和Struts、Spring、iBatis相提并论,但是我们不能没有我们的想法,Struts、Spring、iBatis也不一定就尽善尽美,也不一定就符合我们每个人的需求。VIWO就是我的一些想法,还是那句话抛砖引玉吧,希望大家更多的把大家的想法发表出来。没有碰撞,怎么能有火花? |
|
返回顶楼 | |
发表时间:2007-07-12
你熟悉VIWO,所以说只要3天,其实会使用S+S+B,有一个参考的例子,最多也只要3天,出了问题网上有大堆的答案,需要解决方案网上多的是,你的特色在哪?
闪光点??? |
|
返回顶楼 | |