搭建SSH时的思考和遇到的几个问题的解决方法

2016-02-19 11:41 10 1 收藏

想要天天向上,就要懂得享受学习。图老师为大家推荐搭建SSH时的思考和遇到的几个问题的解决方法,精彩的内容需要你们用心的阅读。还在等什么快点来看看吧!

【 tulaoshi.com - Web开发 】

SSH流行很久了,一直看到官方文档和网上都在讲如何整合SSH,讨论各种整合的优缺点。今天我比较闲,也用我的一些想法来试着整合这三个最流行的框架。

本次所用版本为:Struts 1.3.9   Spring 2.5   Hiberante 3.2
开发工具和环境为:Eclipse 3.3+MyEclipse 6.0+JBoss 4.2+Tomcat

用SSH时,我们的架构自然就会分成三层,即表现层,逻辑层和持久层,按照Martin Flower的指导思想,耦合越少越好,下层为上层提供服务,这也是Rod开发Spring的指导思想之一,所以我首先想到的就是如何减少到最低的耦合。
根据Spring 2.0官方文档中推荐的做法,Spring与Struts1.x集成,有采用代理类的方式,也有用ActionSupport的方式,但是我认为这两种方式无疑都有很强的侵入性和依赖性,这与Spring的思想有些矛盾。
我采用AutowiringRequestProcessor来做,这个类会自动为你装载你所需要的Service,根据其Java Doc的提示,其默认是byType匹配的,当然你也可以用byName的方式,我认为以Type的方式就OK了。来看看两个配置文件吧,先来看看Struts的配置文件struts-config.xml:

 1  ? xml version="1.0" encoding="UTF-8" ? 
 2  ! DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd"  
 3  
 4   struts-config  
 5       form-beans  
 6           form-bean  name ="loginForm"  type ="com.***.ssh.view.login.LoginForm"   / 
 7      / form-beans  
 8  
 9       global-exceptions  / 
10       global-forwards  / 
11       action-mappings  
12           action  name ="loginForm"  path ="/login"  scope ="request" 
13             type ="com.***.ssh.view.login.LoginAction"  validate ="false"   / 
14      / action-mappings  
15     
16       controller
17          processorClass ="org.springframework.web.struts.AutowiringRequestProcessor"   / 
18  
19       message-resources  parameter ="ApplicationResources"   / 
20  / struts-config  
21  
22  
这个文件中可以发现,跟没有与Spring集成时就一点不一样,多了一行:
 controller  processorClass="org.springframework.web.struts.AutowiringRequestProcessor" /

再来看看Spring的配置文件applicationContext.xml:

 1  ? xml version="1.0" encoding="UTF-8" ? 
 2  ! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"  
 3  
 4   beans  
 5  
 6       bean  id ="SSHSessionFactory" 
 7         class ="org.springframework.orm.hibernate3.LocalSessionFactoryBean"  
 8           property  name ="configLocation"  
 9               value  classpath:hibernate.cfg.xml / value  
10          / property  
11      / bean  
12     
13       bean  name ="LoginService" 
14         class ="com.***.ssh.biz.login.LoginService"  singleton ="false"  
15           property  name ="dao"  
16               ref  bean ="UsersDao"   / 
17          / property  
18      / bean  
19  
20       bean  id ="UsersDao"  class ="com.***.ssh.persistence.UserDao"  
21           property  name ="sessionFactory"  
22               ref  bean ="SSHSessionFactory"   / 
23          / property  
24      / bean  
25  / beans  
26  
这里面也没有多余的内容,不会出现代理方式时,多份XML同时配置的问题,减少了维护量。
同时,你会发现,我并没有把Hibernate的具体配置放在这里面,而是用Hibernate自身的配置来管理。

这样的话,我们三层之间的依赖性会降到较低,两头可以任意换到其中的某一层。

顺便要说的是,常见的书籍上面发现往往不会有如此深入的探讨,难道是怕初学者看不懂吗?
另外,对于一个架构来说,要解决的问题决不是指这些,通常我们可以采用RUP的4+1视图的方法去考虑架构的方方面面。我们也可以从以下一些方面来各个击破:安全性,数据输入输出的校验与转换,国际化,LOG,异常处理,异构系统整合,后台运行程序等等。如果是多个数据库,我们还需要更多的考虑事务控制。

我想我后面会去完善这个整合,并实现一个Demo,作为小的简单的项目快速开发的基础。



整合时遇到过如下问题:
问题1:启动时出现 “严重: Error listenerStart ”
这个问题,网上有很多解决办法:
有一种最简单的解决办法是把用Listener初始化Spring改为用Servlet初始化Spring,但这样的方法不太好,一是没有找到根源,二是可能会带来新的问题。
比较好的一种解决办法是,加上Log4J的相关配置,然后再启动时,就会出现各类详细信息,这样可根据具体信息再来解决,一般可能是DataSource配置,或环境配置有问题。
参考网址:http://hi.baidu.com/xht314/blog/item/808ecf13c1dd1820dd5401af.html

问题2:遇到“Required extension qdox not found”这样的提示
网上也有解答,我用的方法是直接把commons-attributes-compiler.jar这个包去掉。当然如果你要用到这个包的话,可以参考下面这个地址:
http://hi.baidu.com/sky_lei/blog/item/77ee17085543b232e8248824.html

问题3:Struts包与Spring包冲突的问题
我遇到包有冲突,换成Struts需要的优先就OK了,现在的JAR档越来越麻烦了,很多项目的JAR档都被开发人员搞得乱七八糟,看来Maven是个好东西,至少思想是好的,可能下一步需要研究一下。

来源:http://www.tulaoshi.com/n/20160219/1598226.html

延伸阅读
标签: Web开发
Ajax到底是什么?是一个并不太容易掌握,但可以增加网站交互性的方法?是Web2.0的基石?还是又一轮网络开发中的跟风?就像以前流行过的闪烁字体、“溅水”页(译者:Splashpage-Flash动画或大图片做的网站的简介首页,往往有个“跳过简介”或“直接进入”的小按钮)、和使用圆角(译者:见YeeYan首页抬头,呵呵),只是这次动态性更强? ...
标签: Web开发
1.配色问题 一个网页的色彩最好不要超过3种,一面视觉效果混乱,用色柔和,对比度强的色彩不能应用于一般网站,时尚网站使用还可以。一般不好搭配的颜色,用灰度搭配。 2.字体问题 很重要的一个问题,用标准字标准色,这是一个规范,行距一般控制在20px左右,不要太小,也不要太大,自己大小注意,中文12px,英文11px或...
标签: Web开发
Cookie跨域操作看来是个简单的问题,因为只要指定Domain属性为指定网站的根域名就可以了. 但是笔者在实际使用过程中却遇到了一些问题,的确值得注意. 环境介绍 cookie在www主域名下创建,并写入Domain属性,如:(为方便调试以下代码皆为asp代码) Code: Write.asp % Response.Cookies(CookieName)("UserNa...
标签: 手机 智能手机
1、屏幕触摸不灵敏 在使用一段时间之后,手机屏幕往往容易出现触摸不灵或无反应情况,当你遇到这种情况时,请不要急,可以尝试:打开“手机服务”应用,然后点击“硬件检测”,再点击“多点触摸”,最后按照屏幕上的提示进行图片测试。在此过程中,我们可以随意点击屏幕任何一个区域,看看屏幕上的数字是否与你点击的位置相符。 ...
标签: 减肥 瘦身
减肥前应该了解的几个问题 许多为了维持自己姣好身材的女性都会减肥。但是面对那么多的减肥方法,我们在减肥之前有什么需要注意的呢?下面给大家介绍减肥前应该了解的几个问题,供大家参考。 减脂不是减重 卡路里影响体重机上的数字,太关注体重而疏忽潜藏的体脂肪反更难瘦。体脂肪无法靠节食、少摄取卡路里降低,还可能...

经验教程

360

收藏

96
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部