Struts2和Spring整合中的一些问题

前言

为了学习web开发的经典的SSH框架,首先学习了struts2框架,struts2的一些问题在上一篇博客中说明了,这篇博客主要是说在整合struts2和Spring的一些理解。学习整个框架最好是先搞懂每个框架的位置和作用,最后再整合。此文不能作为新手的搭建教程,因为具体的搭建过程示例很少,只是帮助理解整合的原理。


怎样整合struts2和Spring

  • 首先搭建好struts2框架,能够跑通代码。
  • 下载spring的jar包,导入相关的包,注意,我们要实现struts2和spring的连接,必须要有桥梁,这个桥梁有两个,第一个就是struts2-spring-plugin x.x.x.jar(这个插件是struts2可以识别Spring并和spring联合的关键插件,这个插件的版本必须和struts2框架搭建的其他的依赖包的版本一致尤其是xwork-corn.jar版本一致,我因为这个之前搭建struts2时没有用到struts2-spring-plugin x.x.x.jar包,最后在整合时重新下载的包版本不一致,导致没法正常启动)第二个桥梁就是在web系统中申明自己要使用spring,申明的办法就是在web.xml配置文件中添加spring的监听器,如下所示:
<listener>
     <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
listener>
  • 桥梁搭通之后,就该考虑怎么使用spring框架,上一篇说过struts2的Action实质上是一个Bean,每次发送请求,过滤器(相当于Controller)决定执行哪一Action,而在这之前提交的数据已经通过setData方法注入到Bean中,一旦调用Action,就会执行Action中的excute方法,得到执行结果后会查询struts2.xml文件,struts2.xml文件中早就定义好了不同返回结果所对应的view,也就是相对应要返回的x.jsp页面。根据不同的返回结果跳转到相应的结果页面(这里又涉及到数据传输,结果页面不仅仅是静态固定的页面,有可能是需要携带处理之后的数据的,结果页面有两种方式可以得到提交的数据,第一种:由于之前的数据在提交之后就注入到Bean中,所以可以利用struts2的标签特性,直接从Bean中提取,具体方法代码之后添加。第二种:session,在excute方法中创建session对象然后注入数据,在jsp结果页中调用session获取数据。
  • struts2通过自身的反射机制通过ObjectFactory来创建Action类,所以我们一般在struts.xml中会申明创建Action的方式, class="com.opensymphony.xwork2.ObjectFactory"
    name="struts"/>
    ,这段代码就说明Action是由struts2的ObjectFactoy来创建,而整合这两个框架的实质就是将Action对象的创建托管给spring容器,所以我们需要修改上一段代码:

    <bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" />

    
    <constant name="struts.objectFactory" value="spring" />
  • 修改完成之后,struts.xml中之前定义的action的class的地址就不能写之前的地址了,因为创建对象的权利已经交给spring了,所以这里只能填写引用名,这个引用名比如class=“loginAction”,loginAction的真正的创建是在spring容器里,而spring容器中定义和申明这些action应该书写在applicationContext.xml文件中(此文件为spring的配置文件),该文件中可能需要先定义一个applicationContext的路径,一般默认和web.xml在同一目录下。之后就是对各个Action的定义,在applicationContext.xml中的标签中挨个定义,每个都对应一个Action:
<bean name="loginAction" class="ly.struts2.loginAction">
     <property name="user">
          <bean class="ly.struts2.User">bean>
     property>
bean>
  • 这里的class="ly.struts2.loginAction"则是之前在struts.xml的用引用名“loginAction”替代的之前的类地址。

整合完成后的整体运行流程

struts的运行流程在上篇已经说明了,大概说下整合之后的SS框架的实现流程,首先系统通过web.xml文件监听到spring容器的存在,然后配置struts2。在view端提交用户请求之后,struts查询struts.xml发现struts将action的创建托管给了spring,然后继续调用struts2.xml中的action定义,通过引用名查询spring的配置文件appliactionContext.xml中的对应的bean,然后spring创建相应的Action,并执行操作将结果返回给struts。之后struts根据结果返回相应的jsp。


结尾

记录自己刚开始学习软件工程的一些理解和感悟,在错误中前进。

你可能感兴趣的:(struct2,spring,struts,框架,struts2.0)