现在的位置: 首页 > 综合 > 正文

Struts2+Spring3的两种整合方式

2017年11月29日 ⁄ 综合 ⁄ 共 6717字 ⁄ 字号 评论关闭
文章目录

1.说明

strut2提供了一种非常简单的方式来实现与spring的整合

struts2通过一种“可插拨式”的插件,实现了与Spring框架的整合。

在实现应用中,只需要把struts2-spring-plugin-x.x.x.x.jar(其中的xxxx为版本号)文件拷到应用的lib下即可。

Struts2提供了两种基本的整合策略:

1. 将Action实例交给Spring容器来负责生成,管理,通过这种方式,可以充分利用Spring容器的IOC特性,提供最好的解耦;

2. 利用Spring插件的自动装配方式,当Spring插件创建Action实例之后,立即将Spring窗口中对应的业务逻辑组件注入Action实例。

2.整合方式一:

将Action实例交给Spring容器来负责生成,管理,通过这种方式,可以充分利用Spring容器的IOC特性,提供最好的解耦;

1.新建一个web工程

这个就不多说了。

2.打入jar包。

导入如图所示的jar包:

3.生成Action类及service类

结构如下:

LoginAction.java内容:

package com.user.action;

import com.opensymphony.xwork2.ActionSupport;
import com.user.service.IUserService;

public class LoginAction extends ActionSupport{
    
    private static final long serialVersionUID = 1L;
    private IUserService userService;
    
    //前台传递过来的参数
    private String username;
    private String password;
    
    public IUserService getUserService() {
        return userService;
    }
    public void setUserService(IUserService userService) {
        this.userService = userService;
    }
    public String getUsername() {
        return username;
    }
    public String getPassword() {
        return password;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    
    public String execute() throws Exception{
        System.out.println("in execute!");
        if(userService.validCheck(username, password)){
            return SUCCESS;
        }
        return ERROR;
    }
}

IUserService.java 类的内容:

package com.user.service;
public interface IUserService {
   public boolean validCheck(String username,String password);
}

UserService.java

package com.user.service.impl;

import com.user.service.IUserService;

public class UserService implements IUserService {
	@Override
	public boolean validCheck(String username, String password) {
		if (username.equals("hello") && password.equals("world")){
			return true;
		}
		return false;
	}
}

4.创建index.jsp等前端页面

结构如下:


index.jsp页面内容:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
  </head>
  
 <body>
    <s:form action="user/login" method="post">  
    	<s:textfield name="username" label="用户名" key="user"></s:textfield>
    	<s:password  name="password" label="密码" key="password"></s:password>
    	<s:submit key="login" value="提交"></s:submit>
    </s:form>
  </body>
</html>

success.jsp页面:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!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>
${username},欢迎您!登录成功!
</body>
</html>

error.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!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>
   错误页面!
</body>
</html>

5. 配置struts和spring的配置文件

结构如下:

说明:

在项目下新建文件夹 resource,有modules文件夹和struts.xml , spring.xml

struts2中,struts.xml需要在src目录底下。classpath中需要配置。下面会有说明。

struts.xml内容:

<?xml version="1.0" encoding="UTF-8" ?>
  <!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
  <struts>
     <!-- struts的action配置文件 -->
     <include file="modules/user/struts-user.xml"/>
	
  </struts>

struts-user.xml文件内容:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">

<struts>
	<package name="user" namespace="/user" extends="struts-default">
	    <!-- 注意class属性不是指向一个action,而是指向spring 的一个bean  -->
	   <action name="login" class="loginAction" >
                 <!-- 定义逻辑视图和物理资源之间的映射 -->
     		<result name="success">/success.jsp</result>
     		<result name="error">/error.jsp</result>
		</action>
	</package>
</struts>

spring.xml文件的内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" 
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <bean id="userService" class="com.user.service.impl.UserService" ></bean>
	<bean id="loginAction" class="com.user.action.LoginAction">  
	   <property name="userService" ref="userService"/>
	</bean>
</beans>

6.创建web.xml文件

在web- WEB-INF下创建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">
    <!-- 配置spring监听器 -->    
    <listener>    
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>    
    </listener> 
     <!-- 初始化 -->  
     <context-param>  
         <param-name>contextConfigLocation</param-name>  
         <!-- 如果有多个文件,在文件之间用英文逗号隔开 -->  
         <!-- <param-value>/WEB-INF/applicationContext.xml,/WEB-INF/applicationContext-db.xml  
         </param-value> -->  
         <param-value>classpath:spring.xml;classpath:modules/**/spring*.xml</param-value>  
     </context-param>  
	
  	<!-- 定义struts2的核心filter -->
	<filter>
	    <filter-name>struts2</filter-name>
	    <filter-class>
	        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>           
	</filter>
	<!-- 让struts定义的核心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>

7.Build Path

将第一步中的lib中的jar包加入到classpath中。

将resource文件下设置为src(struts.xml需要在src目录下)

设置输出目录

8.发布项目,启动Tomcat。

3.整合方式二:

 利用Spring插件的自动装配方式,当Spring插件创建Action实例之后,立即将Spring窗口中对应的业务逻辑组件注入Action实例。

使用自动装配方式整合
(1)指定自动装配的策略,让Spring 自动管理Bean与Bean之间的依赖有关系,无需使用ref显式指定依赖Bean ,Spring容器会自动检查XML配置文件内容,为主调Bean 注入依赖Bean。Spring 提供了3种装配策略,通过修改struts.objectFactory.spring.autoWire常量指定,可接受的3个值:
1.name:根据属性名自动装配,这个是默认值。
2.type根据属性类型自动装配
3.auto自动检测需要使用哪种自动装配方式

与方式一的区别是:

1.struts-user.xml配置文件:class属性改成完整类名com.user.action.LoginAction

<struts>
	<package name="user" namespace="/user" extends="struts-default">
	   <action name="login" class="com.user.action.LoginAction" >
		<!-- 定义逻辑视图和物理资源之间的映射 -->
     		<result name="success">/success.jsp</result>
       		<result name="error">/error.jsp</result>
		</action>
	</package>
</struts>

2.spring.xml文件中,无需再声明action的bean了

<beans>
    <bean id="userService" class="com.user.service.impl.UserService" ></bean>
    <!-- <bean id="loginAction" class="com.user.action.LoginAction">  
       <property name="userService" ref="userService"/> 
    </bean>-->
</beans>

参考:http://blog.chinaunix.net/uid-8481993-id-2460742.html

抱歉!评论已关闭.