整合Spring和struts学习笔记
整合共有三种方法:
使用 Spring 的ActionSupport类整合 Structs
使用 Spring 的DelegatingRequestProcessor
覆盖 Struts 的RequestProcessor 将 Struts Action管理委托给 Spring 框架
前面二种很简单,但不是最优化的,最优优化是第三种,有兴趣的同志,可以到下面网址去看看
http://www.ibm.com/developerworks/cn/java/j-sr2.html#N1008C
下面,我将以一个实例简单介绍一下二者的整合,以作为个人备忘
对于像我一样的新手,大家一起共同学习,有错误的地方,还望指教。
具体步聚如下:
1、首先是导入需要的包
看了很多别人的文章,这里都写得不太清楚,我觉得这是比较重要的一步,如果包导入不对,程序就高度不出来,所以,我比较看重这步,因为不是所有人都是很清楚这一步,对于像我这种新手还是有用的,呵呵。
Spring的二个包:
spring.jar
struts2-spring-plugin-2.0.9.jar(其实这个包应该是struts的包哈)
Struts的五个基本包
commons-logging-1.1.jar
freemarker-2.3.8.jar
ognl.jar
struts2-core-2.0.9.jar
xwork-2.0.4.jar
(当然,在我写的这个小程序中,有一些struts包是用不到的!导入了包,下一步就开始了!)
2、配置Spring监听器.
向web.xml加入下面语句:
1
<
listener
>
2
<
listener
-
class
>
org.springframework.web.context.ContextLoaderListener
</
listener
-
class
>
3
</
listener
>
下面是完整的web.xml 为了方便大家调试,我给出全码如下:
1
<?
xml version
=
"
1.0
"
encoding
=
"
UTF-8
"
?>
2
<
web
-
app id
=
"
WebApp_ID
"
version
=
"
2.4
"
3
xmlns
=
"
http://java.sun.com/xml/ns/j2ee
"
4
xmlns:xsi
=
"
http://www.w3.org/2001/XMLSchema-instance
"
5
xsi:schemaLocation
=
"
http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd
"
>
6
<
display
-
name
>
struts2tutorial
</
display
-
name
>
7
8
<
filter
>
9
<
filter
-
name
>
struts2
</
filter
-
name
>
10
<
filter
-
class
>
org.apache.struts2.dispatcher.FilterDispatcher
</
filter
-
class
>
11
</
filter
>
12
13
<
filter
-
mapping
>
14
<
filter
-
name
>
struts2
</
filter
-
name
>
15
<
url
-
pattern
>*
.action
</
url
-
pattern
>
16
</
filter
-
mapping
>
17
18
<
welcome
-
file
-
list
>
19
<
welcome
-
file
>
index.jsp
</
welcome
-
file
>
20
</
welcome
-
file
-
list
>
21
22
<
listener
>
23
<
listener
-
class
>
org.springframework.web.context.ContextLoaderListener
</
listener
-
class
>
24
</
listener
>
25
26
</
web
-
app
>
3、利用Spring配置文件来注册对象
在原有的struts.xml文件加入
1
<!
DOCTYPE struts PUBLIC
2
"
-//Apache Software Foundation//DTD Struts Configuration 2.0//EN
"
3
"
http://struts.apache.org/dtds/struts-2.0.dtd
"
>
4
<
struts
>
5
<!--
下面这句表明对象是由spring负责产生的.加上这句后,struts会产生让spring负责
6
产生bean,如果spring不能产生bean,则由struts自己产生.也可以在struts.properties
7
文件内定义这个属性.
-->
8
<
constant name
=
"
struts.objectFactory.spring.autoWire
"
value
=
"
type
"
/>
9
<
constant name
=
"
struts.objectFactory
"
value
=
"
spring
"
/>
10
<!--
11
<
constant name
=
"
objectFactory
"
value
=
"
spring
"
></
constant
>
12
-->
13
<
package
name
=
"
struts2tutoial
"
extends
=
"
struts-default
"
14
namespace
=
"
/
"
>
15
<!--
注意,现在action的class属性不再是类的名字了,而是在spring中的bean的id
16
详细信息请看下面的spring的bean配置文件applicationContext.xml
-->
17
<
action name
=
"
HelloWorld
"
class
=
"
helloWorld
"
>
18
<
result
>/
helloWorld.jsp
</
result
>
19
</
action
>
20
<!--
Add your actions here
-->
21
</
package
>
22
</
struts
>
23
看到上文中的
8 <constant name="struts.objectFactory.spring.autoWire" value="type" />
9 <constant name="struts.objectFactory" value="spring" />
10 <!--
11 <constant name="objectFactory" value="spring"></constant>
12 -->
这个地方只需要注释中的也行!
4、配置applicationContext.xml
注意,这个文件一定要放在WEB-INF下面,否则会出错,默认情况下,容器会到WEB-INF目录下面去寻找applicationContext.xml文件。如果我们想指定别的地方的配置文件或者指定多个配置文件,可以通过在web.xml文件中定义 context-param元素来指定,除非你在web.xml作如下配置
1
<
context
-
param
>
2
3
<
param
-
name
>
contextConfigLocation
</
param
-
name
>
4
<!--
下面指的是文件存放路径,下面我还用了一个通配路径,classpath下的所在形如:applicationContext
-
XX.xml都引入
-->
5
<
param
-
value
>
6
/
WEB
-
INF
/
applicationContext.xml,classpath:applicationContext
-*
.xml
7
</
param
-
value
>
8
9
</
context
-
param
>
10
下面是我的appliccationContext.xml全码:
<?
xml version
=
"
1.0
"
encoding
=
"
UTF-8
"
?>
<!
DOCTYPE beans PUBLIC
"
-//SPRING//DTD BEAN 2.0//EN
"
"
http://www.springframework.org/dtd/spring-beans-2.0.dtd
"
>
<
beans
>
<
bean id
=
"
helloWorld
"
class
=
"
com.tianji.test.HelloWorld
"
></
bean
>
</
beans
>
<!--
上面的解释下:在前面说了,这个bean中的ID,必须与struts中的action指定的class值一样,此bean中的class就是你要处理的action类,如果你在action时有传值,则在此bean中加入形如:
<
property name
=
"
message
"
>
<
value
>
i love you
</
value
></
property
>
形式的语句!
-->
5、写一个action类
HelloWord.java
1
package
com.tianji.test;
2
import
com.opensymphony.xwork2.ActionSupport;
3
public
class
HelloWorld
extends
ActionSupport {
4
5
public
static
final
String MESSAGE
=
"
Struts is up and running
"
;
6
7
public
String execute()
throws
Exception {
8
setMessage(MESSAGE);
9
return
SUCCESS;
10
}
11
12
private
String message;
13
14
public
void
setMessage(String message){
15
this
.message
=
message;
16
}
17
18
public
String getMessage() {
19
return
message;
20
}
21
}
22
23
这个不用解释哈!
6、创建HelloWord.jsp
1
<%
@ taglib prefix
=
"
s
"
uri
=
"
/struts-tags
"
%>
2
<
html
>
3
<
head
>
4
<
title
>
Hello World
!</
title
>
5
</
head
>
6
<
body
>
7
<
h2
><
s:property value
=
"
message
"
/></
h2
>
8
</
body
>
9
</
html
>
发布,运行服务器,在浏览器中打开:
http://localhost:8080/love/HelloWorld.action
注意修改上面红色部份!
结果:成功!
Struts is up and running````````