Struts2+Spring整合

声明:这是转帖!

1、Struts2+Spring整合

Struts2和Spring整合,创建一个OA工程
1、整合struts2
1)导入strut2的jar包:commons-logging-1.0.4.jar,freemarker-2.3.8.jar,ognl-2.6.11.jar,struts2-core-2.0.12.jar,xwork-2.06.jar。暂时导入这些jar包,到时候需要再倒入。
2)将struts.xml文件放置在OA工程的src目录下。
3)在web.xml里面配置struts2用到的核心过滤器。
Xml代码 复制代码
  1. <filter>  
  2.     <filter-name>struts2</filter-name>  
  3.     <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>  
  4. </filter>  
  5. <filter-mapping>  
  6.     <filter-name>struts2</filter-name>  
  7.     <url-pattern>/*</url-pattern>  
  8. </filter-mapping>  
	<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>
如图:
Struts2+Spring整合_第1张图片
2、整合spring
1)导入spring的jar包:spring.jar
2)将applicationContext.xml文件放置在OA工程的WEB-INF目录下。
3)在web.xml里面配置spring用到的监听器。
Xml代码 复制代码
  1. <listener>  
  2.     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  3. </listener>  
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

4)添加struts2-spring整合的插件:struts2-spring-plugin-2.0.12.jar,如果不使用这个插件,则需要在struts.xml里面配置:
Xml代码 复制代码
  1. <constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory" />  
<constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory" />

3、测试struts2和spring整合对不对?
写一个jsp页面login.jsp来测试:
Html代码 复制代码
  1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>  
  2. <%@ taglib prefix="s" uri="/struts-tags" %>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  7. <title>Insert title here</title>  
  8. </head>  
  9. <body>  
  10.     <s:form action="Login" method="post">  
  11.         <s:textfield name="userName" label="userName"></s:textfield>  
  12.         <s:password name="password" label="password"></s:password>  
  13.         <s:submit label="submit"></s:submit>  
  14.     </s:form>  
  15. </body>  
  16. </html>  
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ 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=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <s:form action="Login" method="post">
        <s:textfield name="userName" label="userName"></s:textfield>
        <s:password name="password" label="password"></s:password>
        <s:submit label="submit"></s:submit>
    </s:form>
</body>
</html>
写一个LoginAction
Java代码 复制代码
  1. package com.struts2.action;   
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;   
  4. import com.struts2.service.LoginService;   
  5. public class LoginAction extends ActionSupport {   
  6.     private LoginService loginService;   
  7.     private String userName;   
  8.     private String password;   
  9.     public void setLoginService(LoginService loginService) {   
  10.         this.loginService = loginService;   
  11.     }   
  12.     public String getUserName() {   
  13.         return userName;   
  14.     }   
  15.     public void setUserName(String userName) {   
  16.         this.userName = userName;   
  17.     }   
  18.     public String getPassword() {   
  19.         return password;   
  20.     }   
  21.     public void setPassword(String password) {   
  22.         this.password = password;   
  23.     }   
  24.     @Override  
  25.     public String execute() throws Exception {   
  26.         if(loginService.isLogin(userName, password))   
  27.             return SUCCESS;   
  28.         else  
  29.             return INPUT;   
  30.     }   
  31. }  
package com.struts2.action;

import com.opensymphony.xwork2.ActionSupport;
import com.struts2.service.LoginService;
public class LoginAction extends ActionSupport {
	private LoginService loginService;
	private String userName;
	private String password;
	public void setLoginService(LoginService loginService) {
		this.loginService = loginService;
	}
	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;
	}
	@Override
	public String execute() throws Exception {
		if(loginService.isLogin(userName, password))
			return SUCCESS;
		else
			return INPUT;
	}
}
写一个Service
Java代码 复制代码
  1. package com.struts2.service;   
  2.   
  3. public interface LoginService {   
  4.     boolean isLogin(String userName,String password);   
  5. }  
package com.struts2.service;

public interface LoginService {
	boolean isLogin(String userName,String password);
}

写一个Service的实现
Java代码 复制代码
  1. package com.struts2.service.impl;   
  2.   
  3. import com.struts2.service.LoginService;   
  4. public class LoginServiceImpl implements LoginService {   
  5.   
  6.     public boolean isLogin(String userName, String password) {   
  7.         if("hello".equals(userName) && "world".equals(password))   
  8.             return true;   
  9.         else    
  10.             return false;   
  11.     }   
  12. }  
package com.struts2.service.impl;

import com.struts2.service.LoginService;
public class LoginServiceImpl implements LoginService {

	public boolean isLogin(String userName, String password) {
		if("hello".equals(userName) && "world".equals(password))
			return true;
		else 
			return false;
	}
}
在struts.xml里面配置:
Xml代码 复制代码
  1. <package name="struts2" extends="struts-default">  
  2.     <action name="Login" class="loginAction">  
  3.         <result name="success">/result.jsp</result>  
  4.         <result name="input">/login.jsp</result>  
  5.     </action>  
  6. </package>  
    <package name="struts2" extends="struts-default">
        <action name="Login" class="loginAction">
            <result name="success">/result.jsp</result>
            <result name="input">/login.jsp</result>
        </action>
    </package>
如图:
Struts2+Spring整合_第2张图片
在applicationContext.xml里面配置:
Xml代码 复制代码
  1. <bean id="loginService" class="com.struts2.service.impl.LoginServiceImpl"></bean>  
  2. <bean id="loginAction" class="com.struts2.action.LoginAction" scope="prototype">  
  3.     <property name="loginService" ref="loginService"></property>  
  4. </bean>  
    <bean id="loginService" class="com.struts2.service.impl.LoginServiceImpl"></bean>
    <bean id="loginAction" class="com.struts2.action.LoginAction" scope="prototype">
        <property name="loginService" ref="loginService"></property>
    </bean>
图:
Struts2+Spring整合_第3张图片
启动tomcat,分别输入hello和world,提交,结果为hello和world。说明struts2和spring整合成功。

【题外话】
Struts的优势是页面导航 与 标签库。典型的应用为 登录 及 文件上传
Spring的优点是对bean的管理,依赖于接口依赖于注入。
Struts典型的应用是在登录,这里Spring是作为了一个Service 被注入了进来。
个人认为在Struts与Spring的在项目中的常见配合为:
登录的部分用Struts:页面逻辑可配置
登入后的业务层Service 可用Spring注入的方式集成到项目中
或者登入后页面之间的逻辑也可用Spring Web来解决

你可能感兴趣的:(Struts2+Spring整合)