Spring + Struts 整合应用实践
一、工程的创建
本次实践所用的Strut2版本为2.2.1.1。
以下为配置步骤:
1、导入struts的自身支持包
在下载得到的Struts2 的lib目录下,有着许许多多的jar包,一般的Web工程只需要引入struts2-core-2.2.1.1.jar,xwork-core-2.2.1.1.jar,ognl.jar,freemaker-2.3.16.jar,commons-file-upload-1.2.1.jar,commons-io-1.3.2.jar,javassist-3.7.ga.jar等几个包即可。曾经在书上看到过只需引进前四个包即可,但是经过我自己的实践,只导入前四个包的情况下,会出现classNotFound的exception,这可能是struts2版本不同导致(书中的struts2版本是2.0.9)。
2、导入struts对spring的支持包struts2-spring-plugin-2.2.1.1.jar。
3、导入spring相关包
这一步中特别注意的是不要把commons-logging.jar包遗漏掉,不然也会发生ClassNotFound的异常。
4、整个工程图如下:
二、Struts相关配置与调试
2.1 配置
Struts相关配置包括了Action类的编写(在struts中,Action和FilterDispatcher是控制器的组成部分,Action类主要的作用在于调用业务逻辑功能并分发结果页面给用户)、web.xml以及struts.xml的编写。这里在工程中配置一个简单的Action例子:
HelloStruts中execute()方法放回了一个success字符串,其实这里对应的是在struts.xml中配置的相应action中result属性中对应的name属性为“sucess”的结果页面。这里给出struts.xml的内容:
从上面看出我们可以看到name=“success”的值是/example/success.jsp,也就是说当在action类中返回success时,会将该页面作为结果页面返回给用户。success.jsp 页面如下:
最后,就是web.xml的编写:
从上图可以看到,其实struts2是通过在服务器上通过增加一个过滤器来嵌入到应用中的,FilterDispatch是struts2中控制器的组成部分。
2.2 调试
编写完上述文件后,我们就可以在tomcat中部署我们的web应用了。部署完成后再浏览器中输入http://localhost:8080/Struct2Test/hello。如果能够看到Welcome to Struts则说明我们的struts部署成功了。如果不成功,请仔细检查以上的步骤是否正确。
三 struts2 与 Spring的整合
上面只是单纯在Web项目中应用到了Struts 框架,接下来我们来看看struts2是如何跟Spring整合在同一个Web项目中的。
3.1 增加Spring配置
首先,在HelloStruts类中增加userName的属性以及相应的Getter与Setter方法,下面我们将会通过Spring的IoC(控制反转)特性(也称依赖注入)为HelloStruts注入userName的值。修改后的类如下:
然后,在WEB-INF下增加applicationContext.xml文件,内容如下:
这里设置了一个Bean对象,id为helloAction,其对应的类为example.HelloStruts,同时也为这个对象的userName属性值设置了相应的值,这里为WaisonYe。
最后,修改web.xml,加入以下内容:
它为服务器添加了一个监听器,这样也使的struts2 与 spring 结合起来。如果没有这句话,服务器是启动不了的。另外,我们的applicationContext.xml的位置可以不放置在WEB-INF文件下,这时就需再在web.xml中增加以下说明:
3.2 修改struts2本身配置以整合Spring
在struts.xml文件中,加入以下一句话
这句话的作用在于把struts2里的action对象交由Spring容器来统一管理。
同时,将
改为:
这里class="helloAction"这里的helloAction不再是以前的真正的类的映射,如class="example.helloAction"
因为要交给spring管理,所以这里的helloAction必须要与 applicationContext.xml 中的
<bean id=" helloAction " class="example.helloAction" scope="prototype">
中的id=" helloAction " 保持一致,这里的class=" example.helloAction "就是真正的类的映射,
这样写,就表明了struts.xml中的helloAction 已交给 spring来进行管理。
最后,编写新的success2.jsp如下:
这里,从helloAction中读出了对应的userName属性值,并显示出来。
3.3 部署
最后,我们再次部署上述工程,再次输入上述网址,可以看到如下页面:Welcome here ,WaisonYe, the spring and struts are integrated
二、Struts相关配置与调试
2.1 配置
Struts相关配置包括了Action类的编写(在struts中,Action和FilterDispatcher是控制器的组成部分,Action类主要的作用在于调用业务逻辑功能并分发结果页面给用户)、web.xml以及struts.xml的编写。这里在工程中配置一个简单的Action例子: