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

放松弛一点

放松弛一点

2016-02-19 11:41

想要天天向上,就要懂得享受学习。图老师为大家推荐搭建SSH时的思考和遇到的几个问题的解决方法,精彩的内容需要你们用心的阅读。还在等什么快点来看看吧!
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是个好东西,至少思想是好的,可能下一步需要研究一下。

展开更多 50%)
分享

猜你喜欢

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

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

Excel中常见的几个问题以及解决方法

电脑入门
Excel中常见的几个问题以及解决方法

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

使用mysql中遇到的几个问题

编程语言 网络编程
使用mysql中遇到的几个问题

培养孩子学画画时会遇到的几个问题

电脑网络
培养孩子学画画时会遇到的几个问题

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

初学钢琴时应注意的几个问题

幼小衔接 育儿知识 怀孕 孕妇
初学钢琴时应注意的几个问题

“Word遇到问题需要关闭”问题的解决方法

word
“Word遇到问题需要关闭”问题的解决方法

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

简单的用java实现读/写文本文件的示例

简单的用java实现读/写文本文件的示例

一个层慢慢增高展开,有种向下滑动的效果

一个层慢慢增高展开,有种向下滑动的效果
下拉加载更多内容 ↓