`

ssh开发总结

阅读更多

—基于SSH的项目开发
1语言和工具
用J2EE开发,主要用到了JAVA、JSP相关技术。我们是基于MyEclipse平台开发的,采用了j2ee+MySql开源数据库,这些开源的工具有利于节约成本。不过这些工具还是比不上微软的强大,很多东西都没微软那么规范,毕竟是开源的,象一些报错一样,微软的参考文档是很出色。JAVA还有很多待改善的地方。但用起来久了,习惯就会感觉好恨多。

2开发框架
我们系统是基于ssh框架开发的。典型的J2EE三层结构,分为表现层、中间层(业务逻辑层)和数据服务层。三层体系将业务规则、数据访问及合法性校验等工作放在中间层处理。客户端不直接与数据库交互,而是通过组件与中间层建立连接,再由中间层与数据库交互。

2.1.struts 负责 web层

表现层是传统的JSP技术,经过多年的发展,其广泛的应用和稳定的表现,为其作为表现层技术打下了坚实的基础。ActionFormBean接收网页中表单提交的数据,然后通过Action进行处理,在action里还可以做一些业务处理或者逻辑判断之类的,再Forward跳转到对应的网页。在struts-config.xml中定义, ActionServlet会加载。

2.2.spring 负责业务层管理,即Service

A.   service为action提供统计的调用接口,封装持久层的DAO。

B.    可以写一些自己的业务方法,这里估计实现了部分业务。

C.   统一的javabean管理方法

D.   声明式事务管理

E.    集成Hiberante

2.3.Hiberante负责持久化层,完成数据库的crud操作

hibernate为持久层,提供 OR/Mapping。它有一组hbm.xml文件和 POJO,是跟数据库中的表相对应的。然后定义DAO,这些是跟数据库打交道的类,它们会使用PO。

在SSH的系统中,对象的调用流程是:jsp-> Action-> Service ->DAO ->Hibernate。数据的流向是 ActionFormBean接受用户的数据,Action 将数据从 ActionFromBean 中取出,封装成VO或PO, 再调用业务层的Bean类,完成各种业务处理后再forward。而业务层Bean收到这个PO对象之后,会调用DAO接口方法,进行持久化操作。每一层都做了严格的封装,这样处理起来,高内聚低耦合,还帮你实现了很多基本的东西,像数据库操作,调用一些方法都很简单了,这样用起来非常方便。

3前期学习
虽然参加实训前,已经上过了JAVA课程,还用JSP+Sql Sever2000开发过一个成绩管理系统,但却没有采用过SSH框架开发,实训给我们带来了全新的体会。作为程序员就要具备学习新知识的能力。在这个技术日新月异的时代,靠吃老本的程序员很难生存的或者很难提升到专家水平的。作为一个有志成程序员必须不懈地追求!在实训的前两个星期,除了做需求分析和讨论需求,其他大部分时间都是学习新技术,什么Struts , Spring和hibenate。之前了解得太少了,于是从图书馆借了很多书,从网上下载了很多教学视频和文档。学习新技术的感觉的快乐不亚于发现新大陆。在前两个星期慢慢对SSH了解了很多,做了不少Demo。也许一个小小的Demo却凝聚了很多的东西。有个高级程序员人说过,从0到有是最艰难的一步,当很多很多的从0到有,那就是迈向成功的开始。在那短短的两个星期感觉自己学的JAVA技术比一个学期下的JAVA课程学的还要多。在这个学习过程中很感谢青青和老傅,跟他们做了很多技术交流,从他们那里学到很多。

4我的角色
4.1.   作为DBA

在这次项目开发中,我担任了DBA角色。作为DBA,在设计数据库表的时候只有对需求了解很深刻,才能设计出很好的表。一个好的数据库设计有利于编码实现功能。不过我们数据从开始设计到最终定下来,经历了大大小小都不知道多少次修改。在修改过程总是十分麻烦的,从E-R图、数字字典再到大组的总设计都要修改。不过改的次数多了就习惯了,感觉每次改动,都对需求进一步的确定和更深的认识。这也体会了,一个软件产品的需求随着开发流程深入或多或少会产生变更的,变更越大我们需求付出的努力就要越多。

4.3.   担任编码工作

除了作为DBA,作为项目组中一员,少不了编码工作。SA跟TEST负责了Spring+hibernate的工作,我负责Struts的工作,我再把jsp的界面美工交给PM处理。在负责Struts编码工作,我学到了很多Struts的知识。

A.      先是struts-config.xml,这个博大精深的文件,控制了Struts的一切东西。在设计图里要将那些action和jsp页面处理得简洁明了,不然给别人看会一头雾水。同时平时还要懂得看源代码,出错时更容易找出错误。

B.       Action要集成多些业务处理,不要一个页面就一个action,像我们的系统有二十多个action,其实水平高可以精简很多的。

C.      多个action还可以共用多个form的,不必要每次新建form。当调用同一个form的action一般都是涉及到同一个实体类,只不过涉及到属性的数量不一样。

D.      对于重复使用的很多相同的代码,可以集成到一个包里,新建一个类,集成在某个静态方法里,到时候调就可以了。像系统中的获取系统当前时间,设置状态为默认的0(指未解决状态),编码方式改变等等,但由于缺乏经验,还是有很多代码没有抽象成静态方法,这是由于我们详细设计中做的工作还远远不够。

4.3.   分工经验

我们的分工虽然分得还算具体,但从工作上按系统架构的分层来分工,SA跟TEST负责了Spring+hibernate的工作,这个属于数据服务底层的。我负责Struts的工作,属于业务逻辑处理的,PM负责界面美工的,属于表示层。但做起来却不能同步做,由于我要调用数据服务层的很多方法,我不得不等他们将他们大部分东西搞好,我才开始做我那部分,而PM的界面有基于我的jsp页面,开始他只能搞界面风格,具体的很多东西还不能搞。还有个不好的,当我发现底层出现了错误,我不得不停下来叫他们修改,有时候甚至要自己亲自动手改。在命名方式上的经验上还不够,很多命名虽然统一但过于繁琐,返回参数也是个问题,比如解决方案没有找到,返回参数的时候,这个表示方式比较多,可以用空串、置空还可以返回提示的字符串等等,而这些都不能事先统一好。这些都说明了我们团队开发经验不够,合作不够默契。不过从这次开发得到了很多经验,相信以后会有很大的改进。

5从队员身上学习更多
俗话说,“三人行必有我师!”在项目开发中,从队员身上学习到了很多东西,他们身上有很多比我优秀的地方,很多值得学习的地方。跟青青学会了搭建三层架构,遇到很多解决不了的Bug都找他解决了,搞得他多次“吐血”;看见大源调试,用控制台输入参数来调试的方法很值得学习,印象也很深刻,还有他开发java的经验在组内是最丰富的。跟PM学习不了少做界面的东西,他自己之前不懂jsp,将一本教程看完了,后来也教了我不少。其实在一个项目组里,如果有几个技术比你好或者经验比你丰富的,经历了整个项目后,会学到很多知识的。

6遇到深刻问题及解决方法
6.1关于Hibernian写入数据库乱码的问题

这个问题其实已经困惑很久了,我们的首席架构师青青在刚开始搭建框架的时候就发现了乱码问题,叫我解决。我试过了N种方法都没搞好,超级郁闷,百度的方法搜寻了不知多少种了,大概六七种类型解决吧,当然针对不同的起因,乱码问题有一个多星期了。碰巧青青同班同学解决了,更改MySQL默认编码方式,再在每次调用Hibernian的set方法时调用一个自己写好的类(这个类主要是讲字符串类型的编码方式改变一下),这样他的同学完美解决了乱码问题。可是在我们系统上却不行,搞得青青那个郁闷啊。后来我也按上述方法做了一次,发现还是不行,在SQLyog上看完全是乱码!好无奈,后来还尝试改变那个类的里的一些内容,但是还是不行。碰巧旁边小组的人问了我们系统做得怎么样,我说就实现了一个用例而已,增删改查,就演示给她看看,惊奇的发现下拉菜单竟然有正确的中文,完全没乱码,显示“我的的的”,哈哈,于是返回到SQLyog看却是乱码。这时候恍然大悟!那是垃圾的SQLyog软件,无论你怎么搞,显示都是乱码,超级垃圾啊!!!师兄还是很好用,确实好用,但有真大的BUG!!!???现在我才恍然大悟,其实不关页面编码方式,只要数据库默认是GB2312这个就可以了!!所以安装的时候一定要注意看,或者建表的时候要改回这个编码方式!

总之对那个SQLyog很愤怒!!!查表一定用MyEclipse自带的数据库透视图看最好!不过总的来说,还是有不少收获的,虽然是一个小问题,让我花费了这么大力气,之前一直觉得头疼!

发现了解决中文乱码问题有很多方法:

A.       在XML配置文件添加一个编码方式的属性

B.        在Hibernian配件文件加一个过滤器,这个过滤器是个类,自己先写好

C.       页面传输乱码,调用ruquest的setCharacterEncoding方法就可以了

D.       在Hibernian配件文件加一些属性设置

E.        将获取的字符串变量用一个静态方法强制转为GB2312编码方式

但这些基础都是建立在MySQL默认的编码方式是GB2312,我用UTF-8不行的,网上说可以,我还曾经用命令符敲进去设置了但结果是不行的!后来找了下解决SQLyog下显示乱码的方法是在Tools->Preference Base->Editor。修改Fonts修改完成后,重新启动SQLyog就好了!

但我显示还是不行啊,可以显示中文了,但是在SQLyog下输入的可以!我用程序写入的却不可以!反正我以后会少用它了!后来我们还协助物流第五组和物流第六组解决了中文乱码问题。

6.2 Hibernate+Spring+Struts整合的包发生冲突

在使用MyEclipse开发工具可以方便的整合SSH Web应用框架。引入了Spring、Hibernian和Struts的包,再加上自身的包,部署后会发生冲突,这在网上很很多都说到,但刚开始报错找不到原因的时候却是很难解决的,我们小组解决方法是:

1.    添加commons-pool-1.4.jar

2.    部署后在tomcat里删除asm-2.2.3.jar、asm-commons-2.2.3.jar和asm-util-2.2.3.jar三个包

后来经别人指点发现了更好的解决办法,不用每次部署后都要删除那三个包:

1.    添加commons-pool-1.4.jar

2.    修改自动生成的cglib-2.1.3.jar为其他可用的jar

3.    删除冲突的包asm-2.2.3.jar和cglib-nodep-2.1_3.jar

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/guohaihang/archive/2009/04/17/4087596.aspx

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics