手机
当前位置:查字典教程网 >编程开发 >JSP教程 >搭建SSH时的思考和遇到的几个问题的解决方法
搭建SSH时的思考和遇到的几个问题的解决方法
摘要:SSH流行很久了,一直看到官方文档和网上都在讲如何整合SSH,讨论各种整合的优缺点。今天我比较闲,也用我的一些想法来试着整合这三个最流行的框...

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

本次所用版本为:Struts1.3.9Spring2.5Hiberante3.2

开发工具和环境为:Eclipse3.3+MyEclipse6.0+JBoss4.2+Tomcat

用SSH时,我们的架构自然就会分成三层,即表现层,逻辑层和持久层,按照MartinFlower的指导思想,耦合越少越好,下层为上层提供服务,这也是Rod开发Spring的指导思想之一,所以我首先想到的就是如何减少到最低的耦合。

根据Spring2.0官方文档中推荐的做法,Spring与Struts1.x集成,有采用代理类的方式,也有用ActionSupport的方式,但是我认为这两种方式无疑都有很强的侵入性和依赖性,这与Spring的思想有些矛盾。

我采用AutowiringRequestProcessor来做,这个类会自动为你装载你所需要的Service,根据其JavaDoc的提示,其默认是byType匹配的,当然你也可以用byName的方式,我认为以Type的方式就OK了。来看看两个配置文件吧,先来看看Struts的配置文件struts-config.xml:

1<?xmlversion="1.0"encoding="UTF-8"?>

2<!DOCTYPEstruts-configPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration1.3//EN""http://struts.apache.org/dtds/struts-config_1_3.dtd">

3

4<struts-config>

5<form-beans>

6<form-beanname="loginForm"type="com.***.ssh.view.login.LoginForm"/>

7</form-beans>

8

9<global-exceptions/>

10<global-forwards/>

11<action-mappings>

12<actionname="loginForm"path="/login"scope="request"

13type="com.***.ssh.view.login.LoginAction"validate="false"/>

14</action-mappings>

15

16<controller

17processorClass="org.springframework.web.struts.AutowiringRequestProcessor"/>

18

19<message-resourcesparameter="ApplicationResources"/>

20</struts-config>

21

22

这个文件中可以发现,跟没有与Spring集成时就一点不一样,多了一行:

<controllerprocessorClass="org.springframework.web.struts.AutowiringRequestProcessor"/>

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

1<?xmlversion="1.0"encoding="UTF-8"?>

2<!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd">

3

4<beans>

5

6<beanid="SSHSessionFactory"

7class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

8<propertyname="configLocation">

9<value>classpath:hibernate.cfg.xml</value>

10</property>

11</bean>

12

13<beanname="LoginService"

14class="com.***.ssh.biz.login.LoginService"singleton="false">

15<propertyname="dao">

16<refbean="UsersDao"/>

17</property>

18</bean>

19

20<beanid="UsersDao"class="com.***.ssh.persistence.UserDao">

21<propertyname="sessionFactory">

22<refbean="SSHSessionFactory"/>

23</property>

24</bean>

25</beans>

26

这里面也没有多余的内容,不会出现代理方式时,多份XML同时配置的问题,减少了维护量。

同时,你会发现,我并没有把Hibernate的具体配置放在这里面,而是用Hibernate自身的配置来管理。

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

顺便要说的是,常见的书籍上面发现往往不会有如此深入的探讨,难道是怕初学者看不懂吗?

另外,对于一个架构来说,要解决的问题决不是指这些,通常我们可以采用RUP的4+1视图的方法去考虑架构的方方面面。我们也可以从以下一些方面来各个击破:安全性,数据输入输出的校验与转换,国际化,LOG,异常处理,异构系统整合,后台运行程序等等。如果是多个数据库,我们还需要更多的考虑事务控制。

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

整合时遇到过如下问题:

问题1:启动时出现“严重:ErrorlistenerStart”

这个问题,网上有很多解决办法:

有一种最简单的解决办法是把用Listener初始化Spring改为用Servlet初始化Spring,但这样的方法不太好,一是没有找到根源,二是可能会带来新的问题。

比较好的一种解决办法是,加上Log4J的相关配置,然后再启动时,就会出现各类详细信息,这样可根据具体信息再来解决,一般可能是DataSource配置,或环境配置有问题。

参考网址:http://hi.baidu.com/xht314/blog/item/808ecf13c1dd1820dd5401af.html

问题2:遇到“Requiredextensionqdoxnotfound”这样的提示

网上也有解答,我用的方法是直接把commons-attributes-compiler.jar这个包去掉。当然如果你要用到这个包的话,可以参考下面这个地址:

http://hi.baidu.com/sky_lei/blog/item/77ee17085543b232e8248824.html

问题3:Struts包与Spring包冲突的问题

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

【搭建SSH时的思考和遇到的几个问题的解决方法】相关文章:

struts2中action实现ModelDriven后无法返回json的解决方法

一个JSP页面导致的tomcat内存溢出的解决方法

关于JSP中文问题的解决方法

JavaBean实现多文件上传的两种方法

jsp下页面跳转的几种方法小结

jsp超链接中文乱码的解决方法

JSP代码运行错误的问题及解决方法

jsp页面传参乱码的解决方法

jsp提交到Servlet报404错误问题解决(webroot下子目录)

jsp下显示中文文件名及绝对路径下的图片解决方法

精品推荐
分类导航