Struts2.1.6 与Spring2.5.6框架整合
1、在MyEclipse中新建项目(test)
2、Struts包导入
???暂时导入所必需的包,其他包将在用到时导入:
???commons-fileupload-1.2.1.jar
???commons-logging-1.0.4.jar
???freemarker-2.3.13.jar
???ognl-2.6.11.jar
???struts2-core-2.1.6.jar
???xwork-2.1.2.jar
?3、复制在Struts目录的例子程序中WEB-INF\classes\struts.xml文件,粘贴到项目的src目录下,主要保留其文件头:
<?xml?version="1.0"?encoding="GBK"??>
<!DOCTYPE?struts?PUBLIC
????"-//Apache?Software?Foundation//DTD?Struts?Configuration?2.0//EN"
????"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
????<package?name="struts2"?extends="struts-default">
????</package>
</struts>
4、配置web.xml
<?xml?version="1.0"?encoding="UTF-8"?>
<web-app?version="2.5"?xmlns="http://java.sun.com/xml/ns/javaee"
????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
????xsi:schemaLocation="http://java.sun.com/xml/ns/javaee?
????http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
????<filter>
????????<filter-name>struts2</filter-name>
????????<filter-class>
????????????org.apache.struts2.dispatcher.FilterDispatcher
????????</filter-class>
????</filter>
????<filter-mapping>
????????<filter-name>struts2</filter-name>
????????<url-pattern>/*</url-pattern>
????</filter-mapping>
????<welcome-file-list>
????????<welcome-file>index.jsp</welcome-file>
????</welcome-file-list>
</web-app>5、引入Spring包,在dist目录下
???spring.jar
6、在src目录下建立三个文件
???applicationContext-actions.xml
???applicationContext-beans.xml
???applicationContext-common.xml
???这三个文件其实是applicationContext.xml的分解,为的是避免所有配置放在同一文件,造成混乱。
???结构均如下:
<?xml?version="1.0"?encoding="GBK"?>
<beans?xmlns="http://www.springframework.org/schema/beans"
????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
????xmlns:context="http://www.springframework.org/schema/context"
????xmlns:tx="http://www.springframework.org/schema/tx"
????xmlns:aop="http://www.springframework.org/schema/aop"
????xsi:schemaLocation="http://www.springframework.org/schema/beans?http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
????????????????http://www.springframework.org/schema/context?http://www.springframework.org/schema/context/spring-context-2.5.xsd
????????????????http://www.springframework.org/schema/tx?http://www.springframework.org/schema/tx/spring-tx-2.5.xsd?
????????????????http://www.springframework.org/schema/aop?http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
</beans>
7、需要在web.xml进行配置
????<context-param>
????????<param-name>contextConfigLocation</param-name>
????????<param-value>classpath*:applicationContext-*.xml</param-value>
????</context-param>?
????<listener>
????????<listener-class>
????????????org.springframework.web.context.ContextLoaderListener
????????</listener-class>
????</listener>???前一段代码的配置是因为我们配置了后一段代码的配置后它默认是到WEB-INF下查找applicationContext.xml文件,我们现在改到src目录下并进行文件分解。
8、需要引入Struts2中的另一个包
???struts2-spring-plugin-2.1.6.jar
9、测试是否整合成功
(1)建立页面login.jsp、welcome.jsp、error.jsp分别为登录页面、登录成功页面、出错页面
login.jsp
<%
@?page?language="java"?contentType="text/html;?charset=GB18030"
????pageEncoding="GB18030"%>
<%
@?taglib?prefix="s"?uri="/struts-tags"%>
<!DOCTYPE?html?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN"?"http://www.w3.org/TR/html4/loose.dtd">
<html>
????<head>
????????<meta?http-equiv="Content-Type"?content="text/html;?charset=GB18030">
????????<title>登录页面</title>
????</head>
????<body>
????????<s:form?action="login"?method="post">
????????????<s:textfield?name="username"?label="username"?/>
????????????<s:password?name="password"?label="password"?/>
????????????<s:submit?value="submit"?/>
????????</s:form>
????</body>
</html>welcome.jsp
?1
<%
@?page?language="java"?contentType="text/html;?charset=GB18030"
????pageEncoding="GB18030"%>
<!DOCTYPE?html?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN"?"http://www.w3.org/TR/html4/loose.dtd">
<html>
????<head>
????????<meta?http-equiv="Content-Type"?content="text/html;?charset=GB18030">
????????<title>登录成功</title>
????</head>
????<body>
????????用户名:${username?}
????????<br>
????????密码:${password?}
????????<br>
????</body>
</html>
(2)建包com.test.manager和com.test.manager.impl分别存放业务逻辑处理的接口和其实现,分别建立接口LoginManager.java和其实现LoginManagerImpl.java
LoginManager.java
package?com.test.manager;
public?interface?LoginManager?
{
????public?boolean?isLogin(String?username,?String?password);
}LoginManagerImpl.java,只是测试用,判断用户名密码是否为intrl、intrl,若是则登录成功
?1
package?com.test.manager.impl;
import?com.test.manager.LoginManager;
public?class?LoginManagerImpl?implements?LoginManager
{
????public?boolean?isLogin(String?username,?String?password)
????
{
????????if(null!=username&&null!=password&&"intrl".equals(username.trim())&&"intrl".equals(password.trim()))
????????
{
????????????return?true;
????????}
????????return?false;
????}
}(3)在applicationContext-beans.xml把实现类配置上,以让Spring进行管理
????<bean?id="loginManager"
????????class="com.test.manager.impl.LoginManagerImpl">
????</bean>(4)创建包com.test.action用于存放action,并新建LoginAction.java,继承ActionSupport类
包含从页面所接收参数username、password,以及业务逻辑处理类LoginManager类型的loginManager,给username和password设置get、set,给loginManager设置set方法,以让Spring为我们自动注入;overwrite父类中的
package?com.test.action;
import?com.opensymphony.xwork2.ActionSupport;
import?com.test.manager.LoginManager;
@SuppressWarnings("serial")
public?class?LoginAction?extends?ActionSupport?
{
????private?LoginManager?loginManager;
????private?String?username;
????private?String?password;
????public?String?getUsername()?
{
????????return?username;
????}
????public?void?setUsername(String?username)?
{
????????this.username?=?username;
????}
????public?String?getPassword()?
{
????????return?password;
????}
????public?void?setPassword(String?password)?
{
????????this.password?=?password;
????}
????public?void?setLoginManager(LoginManager?loginManager)?
{
????????this.loginManager?=?loginManager;
????}
????
????@Override
????public?String?execute()?throws?Exception?
{
????????if(loginManager.isLogin(username,?password))
????????
{
????????????return?SUCCESS;
????????}
????????return?INPUT;
????}
}(5)在applicationContext-actions.xml中进行配置,也让Spring来管理LoginAction
????<bean?id="loginAction"?class="com.test.action.LoginAction"
????????scope="prototype">
????????<property?name="loginManager"?ref="loginManager"></property>
????</bean>(6)在struts.xml中进行配置,处理页面提交的请求,配置action:login,login一定要和login.jsp中form的action属性名匹配。此时struts.xml文件如下:
?1
<?xml?version="1.0"?encoding="GBK"??>
<!DOCTYPE?struts?PUBLIC
????"-//Apache?Software?Foundation//DTD?Struts?Configuration?2.0//EN"
?