侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

技术  /  管理员 发布于 7年前   324

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:

<? xml version="1.0" encoding="UTF-8" ?> 
<! DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd" > 
< struts-config > 
    < form-beans > 
        < form-bean  name ="loginForm"  type ="com.***.ssh.view.login.LoginForm"   /> 
    </ form-beans > 
    < global-exceptions  /> 
    < global-forwards  /> 
    < action-mappings > 
        < action  name ="loginForm"  path ="/login"  scope ="request" 
           type ="com.***.ssh.view.login.LoginAction"  validate ="false"   /> 
    </ action-mappings > 
   
    < controller
        processorClass ="org.springframework.web.struts.AutowiringRequestProcessor"   /> 
    < message-resources  parameter ="ApplicationResources"   /> 
</ struts-config > 

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

<controller  processorClass="org.springframework.web.struts.AutowiringRequestProcessor" />

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

<? xml version="1.0" encoding="UTF-8" ?> 
<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" > 
< beans > 
    < bean  id ="SSHSessionFactory" 
       class ="org.springframework.orm.hibernate3.LocalSessionFactoryBean" > 
        < property  name ="configLocation" > 
            < value > classpath:hibernate.cfg.xml </ value > 
        </ property > 
    </ bean > 
   
    < bean  name ="LoginService" 
       class ="com.***.ssh.biz.login.LoginService"  singleton ="false" > 
        < property  name ="dao" > 
            < ref  bean ="UsersDao"   /> 
        </ property > 
    </ bean > 
    < bean  id ="UsersDao"  class ="com.***.ssh.persistence.UserDao" > 
        < property  name ="sessionFactory" > 
            < ref  bean ="SSHSessionFactory"   /> 
        </ property > 
    </ bean > 
</ beans > 

  这里面也没有多余的内容,不会出现代理方式时,多份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是个好东西,至少思想是好的,可能下一步需要研究一下。



  • 上一条:
    RMI使用学习 小结
    下一条:
    经常听朋友说什么J2EE,终于知道点什么是J2EE了,汗一个
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 2024.07.09日OpenAI将终止对中国等国家和地区API服务(0个评论)
    • 2024/6/9最新免费公益节点SSR/V2ray/Shadowrocket/Clash节点分享|科学上网|免费梯子(0个评论)
    • 国外服务器实现api.openai.com反代nginx配置(0个评论)
    • 2024/4/28最新免费公益节点SSR/V2ray/Shadowrocket/Clash节点分享|科学上网|免费梯子(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-07
    • 2017-08
    • 2017-09
    • 2018-01
    • 2018-07
    • 2018-08
    • 2018-09
    • 2018-12
    • 2019-01
    • 2019-02
    • 2019-03
    • 2019-04
    • 2019-05
    • 2019-06
    • 2019-07
    • 2019-08
    • 2019-09
    • 2019-10
    • 2019-11
    • 2019-12
    • 2020-01
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2020-10
    • 2020-11
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-12
    • 2024-02
    • 2024-04
    • 2024-05
    • 2024-06
    • 2025-02
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客