JAVA网页编程之dynafuse 1.0 在sourceforge上公布!
你精通任何一门语言就最强大。现在来看,java的市场比C#大,C#容易入手,比较简单,java比较难1.概述DynaFuse相似Appfuse,是一套整合今朝支流J2EE手艺的新构架,利用到的手艺有struts,springframework,hibernate,groovy等,提出了EvertythingbeDynamic的理念,从DAO到WEB层供应了全新的静态建模,静态编程的计划。2.运转例子下载并安装mysql-4.0,创建数据库dynafuse,创建用户username/password为admin/admin。
下载并解压dynafuse-xx.zip,在mysql中实行data/create-tables.sql中的语句。
下载jakarta-tomcat-5.0.28,将dynafuselibmysql-connector-java-3.0.14-productionmysql-connector-java-3.0.14-production-bin.jar和dynafuselibjta-1.0jta.jar拷贝到jakarta-tomcat-5.0.28commonlib下,将dynafusedynafuse.xml拷贝到jakarta-tomcat-5.0.28confCatalinalocalhost下,
下载dynafuse.war拷贝到jakarta-tomcat-5.0.28webapps下。
启动tomcat,翻开扫瞄器http://localhost:8080/dynafuse进进例子程序。3.包布局申明
下载并解压dynafuse包,会失掉以下的目次布局:
build:编译后文件
config:设置文件
data:实验数据
dist:打包后的公布文件
docs:文档
lib:利用到的jar文件
metadata:xdoclet必要的设置文件片段
script:groovy剧本
src:源码
test:测试源码
web:例子程序的jsp等文件
4.构架申明dynafuse最次要的特性是倡始EverythingbeDynamic,从dao到service到web三个层面,每一个层面都供应了对groovy新型server端srcipt言语的整合,使得web使用中基础一切的逻辑代码都可以以静态的情势编写,保护,构架分为三层:DAO层-这个层面中,dynafuse供应了两个interface:DAO和DynaDAO,DAO是一个通用的数据会见(增、删、改、查)接口,DynaDAO在DAO的基本上供应了对DAO层面剧本的挪用功效。这两个interface今朝只供应了hibernate的完成。DAO和DynaDAO分离作为springframewok中的bean在IOC容器中举行设置,具体请参考configapplicationContext-hibernate.xml。Service层-这个层面中,dynafuse供应了两个interface:Manager和DynaManager,完成对DAO的封装并供应对service层面中营业逻辑剧本的挪用功效,挪用service层面剧本有两个办法,一是在事件情况中实行剧本(invokeScriptInTransaction),一个是不必要事件(invokeScript)。Manager和DynaManager分离作为springframewok中的bean在IOC容器中举行设置,具体请参考configapplicationContext-service.xml。Web层-这个层面中,dynafuse供应了DynaAction,完成对web层面剧本的挪用。
5.构架利用
上面的笔墨将形貌怎样使用dynafuse举行web使用程序的开辟。
1.构建hibernate的静态模子
hibernate在正式公布的3.0版本中,供应了静态模子,关于静态模子,能够查阅hibernate的相干材料,上面给出的是dynafuse示例程序的静态模子,文件拜见dynafusemodelExample.hbm.xml
<?xmlversion="1.0"?><!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mappingdefault-lazy="false"><classentity-name="Dept"table="t_dept"><idname="id"column="dept_id"type="java.lang.Integer"unsaved-value="null"><generatorclass="native"></generator></id><propertyname="name"type="java.lang.String"update="true"insert="true"column="dept_name"not-null="true"unique="false"/><propertyname="description"type="java.lang.String"update="true"insert="true"column="dept_description"not-null="false"unique="false"/><bagname="persons"lazy="true"inverse="true"cascade="delete"><keycolumn="deptid"></key><one-to-manyclass="Person"/></bag></class><classentity-name="Person"table="t_person"><idname="id"column="person_id"type="java.lang.Integer"unsaved-value="null"><generatorclass="native"></generator></id><propertyname="name"type="java.lang.String"update="true"insert="true"column="person_name"not-null="true"unique="false"/><propertyname="age"type="java.lang.Integer"update="true"insert="true"column="person_age"not-null="true"unique="false"/><propertyname="description"type="java.lang.String"update="true"insert="true"column="person_description"not-null="false"unique="false"/><many-to-onename="dept"class="Dept"cascade="none"update="true"insert="true"column="deptId"/></class>
</hibernate-mapping>
这里没有静态的POJO耐久类,一切的耐久数据都经由过程Map布局来寄存。
2.DAO层面的剧本,假如DAO接口中供应的办法不克不及满意必要,那末能够在DAO层面到场剧本,然后在service层经由过程DynaDAO完成对DAO剧本的挪用,上面是示例程序中的dynafusecriptPersonDAO.groovy
importorg.hibernate.Session;importorg.hibernate.Query;publicclassPersonDAO{
publicSessionsession;publicObjectgetAvgAgeOfDept(IntegerdeptId){Stringhsql="selectavg(t.age)fromPersontwheret.dept.id=:deptId";Queryquery=session.createQuery(hsql);query.setInteger("deptId",deptId.intValue());returnquery.uniqueResult();}}
这里必要申明的是session这个成员变量,它是必需要在DAO层面的剧本中声名的,在dao层面的剧本被实行的时分,dynafuse将会主动对这个session赋值,在剧本中,你不必体贴session是怎样失掉,你尽管宁神利用。
3.service层面的剧本,在实践的使用中,营业逻辑是一成不变的,以是service层面到场剧本撑持长短常有效的,service层的剧本将在web层经由过程DynaManager被挪用,上面是示例程序中的dynafusecriptDeptManager.groovy
importorg.robusta.dynafuse.dao.DynaDAO;importjava.util.List;publicclassDeptManager{
publicDynaDAOdynaDao;publicListgetDepts(){returndynaDao.getObjects("Dept",null,null,null);}publicObjectgetAvgAgeOfDept(IntegerdeptId){returndynaDao.invokeScript("PersonDAO.groovy","getAvgAgeOfDept",newObject[]{deptId});}}
这里必要申明的是dynaDao这个类成员变量,和dao层面剧本中的session一样,是在service层面的剧本中实行的时分,由dynafuse主动赋值,你尽管宁神利用它。
还必要注重的是,在service层面的剧本中能够使用dynaDao往挪用DAO层面的剧本,如下面的getAvgAgeOfDept。
4.构建web层的静态模子,struts供应了DynaValidatorActionForm这类机关静态模子的机制,请参考示例中的dynafusemetadatawebtruts-forms.xml。
5.web层面的剧本,跟营业逻辑一样,页面逻辑也是一成不变的,以是web层的剧本十分有效,上面是示例程序中的dynafusecriptDeptAction.groovy
publicclassDeptActionextendsBaseAction{
....
publicDynaManagerdynaManager;
....
publicActionForwardeditDept(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse){if(log.isDebugEnabled()){log.debug("EnteringeditDeptmethod");}StringdeptId=request.getParameter("deptId");if(deptId!=null&&!"".equals(deptId)){Mapdata=dynaManager.getObject("Dept",newInteger(deptId));LongavgAge=(Long)dynaManager.invokeScript("DeptManager.groovy","getAvgAgeOfDept",newObject[]{newInteger(deptId)});DynaValidatorActionFormdeptForm=(DynaValidatorActionForm)form;deptForm.set("id",data.get("id"));deptForm.set("name",data.get("name"));deptForm.set("description",data.get("description"));deptForm.set("avgAge",avgAge);updateFormBean(mapping,request,deptForm);}returnmapping.findForward("edit");}
....
和servcie和dao层的剧本一样,web层剧本中有一个dynaManager成员变量。
6.将web层的剧本设置到action中,能够参考dynafusemetadatawebtruts-actions.xml
....
<actionpath="/depts"type="org.robusta.dynafuse.web.action.DynaAction"parameter="DeptAction.groovy/listDepts"unknown="false"validate="false"><forwardname="list"path="/WEB-INF/pages/deptList.jsp"redirect="false"/></action>
....
必要注重的是这里的parameter,指定了web层某个剧本中的某个method。
j2EE和asp比较,其实也没什么比的,原因和我上面说那些比较差不了多少,也是稳定性,安全性,J2EE比asp高,速度上比不过asp,asp也是延续着它的拖拽控件的方法,提高速度。 那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧! 当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢? 你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。 在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。 让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。 http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。 如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。 是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能 关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。 Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展 J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。 在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。 是一种语言,用以产生「小应用程序(Applet(s)) 多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。 Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
页:
[1]