在一个Maven的web项目中,整合struts2和spring开发,下面是一个正确的配置方法。在这里说一下因为spring支持注解和xml配置,所以struts2整合spring有两种方法,一个是注解配置方案,一个是xml配置方案。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.objectFactory" value="spring" />
<package name="default" namespace="/" extends="json-default">
<!-- struts2的配置方式 -->
<action name="User_*" class="com.yc.ssm.vote.web.action.UserAction" method="{1}">
<result name="success">success.jsp</result>
<result name="fail">/page/{1}.jsp</result>
</action>
<!-- 下面的是struts2整合spring之后的配置方式 -->
<action name="User_*" class="userAction" method="{1}">
<result type="redirect"> /page/manage.jsp</result>
<result name="fail"> /page/{1}.jsp</result>
</action>
<action name="Subject_*" class="subjectAction" method="{1}">
<result>page/ajaxManage.jsp</result>
</action>
</package>
</struts>
1. 在maven项目中的pom.xml 中配置需要导入的jar包。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yc.ssm</groupId>
<artifactId>Vote</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<span style="white-space:pre"> </span><!-- 这里是jar包的版本的一些配置项 -->
<properties>
<project.builder.sourceEncoding>UTF-8</project.builder.sourceEncoding>
<junit.version>4.12</junit.version>
<web.version>3.0.0-beta-2</web.version>
<log.version>1.7.12</log.version>
<mybatis.version>3.3.0</mybatis.version>
<mybatis.spring.version>1.2.2</mybatis.spring.version>
<struts.version>2.5-BETA1</struts.version>
<spring.version>4.1.6.RELEASE</spring.version>
<mysql.version>5.1.34</mysql.version>
<dbcp2.version>2.1</dbcp2.version>
</properties>
<span style="white-space:pre"> </span><span style="font-family: Arial, Helvetica, sans-serif;"><!-- 这里是依赖的jar包的一些配置项 --></span>
<dependencies>
<!-- 测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!--javaee -->
<dependency>
<groupId>jboss.web</groupId>
<artifactId>servlet-api</artifactId>
<version>${web.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jboss.web</groupId>
<artifactId>jsp-api</artifactId>
<version>${web.version}</version>
<scope>provided</scope>
</dependency>
<!-- 日志 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${log.version}</version>
</dependency>
<!-- 数据库 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>oracle-driver</artifactId>
<version>11g</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>${dbcp2.version}</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis.spring.version}</version>
</dependency>
<!-- struts2 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>${struts.version}</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-json-plugin</artifactId>
<version>${struts.version}</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-dojo-plugin</artifactId>
<version>2.3.24</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>${struts.version}</version>
</dependency>
<!-- spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
<build>
<finalName>Vote</finalName>
</build>
</project>
2. web.xml配置。
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring.xml</param-value>
</context-param>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>actionPackages</param-name>
<param-value>com.yc.ssm.cinema.web.action</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
3. struts.xml配置。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.objectFactory" value="spring" />
<package name="default" namespace="/" extends="json-default">
<!-- struts2的配置方式 -->
<action name="User_*" class="com.yc.ssm.vote.web.action.UserAction" method="{1}">
<result name="success">/page/{1}.jsp</result>
<result name="fail">/page/{1}.jsp</result>
</action>
<!-- 下面的是struts2整合spring之后的配置方式 -->
<action name="User_*" class="userAction" method="{1}">
<result type="redirect"> /page/manage.jsp</result>
<result name="fail"> /page/{1}.jsp</result>
</action>
<action name="Subject_*" class="subjectAction" method="{1}">
<result>page/ajaxManage.jsp</result>
</action>
</package>
</struts>
4. spring.xml配置。
如果是注解配置的话,在spring.xml中可以不配置action的映射关系,而只需要开启注解配置项就够了。
<?xml version="1.0" encoding="UTF-8"?>
<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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd"><span style="white-space:pre"> </span><!-- 开启注解 --><span style="white-space:pre"> </span>
<context:annotation-config />
<context:component-scan base-package="com.yc.ssm.vote"/>
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- spring dataSource -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!-- mybatis与spring整合 -->
<bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="typeAliasesPackage" value="com.yc.ssm.vote.entity"/>
<property name="mapperLocations" value="classpath:mapper/*Mapper.xml"/>
</bean>
<!-- 配置映射接口 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.yc.ssm.vote.mapper"/>
<property name="sqlSessionFactoryBeanName" value="SqlSessionFactory"/>
</bean>
<!-- spring事物管理配置 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 声明式事物 --><span style="white-space:pre"> </span><tx:annotation-driven transaction-manager="transactionManager"/><span style="white-space:pre"> </span><!-- action xml配置方式 --><span style="white-space:pre"> </span><bean id="userAction"<span style="white-space:pre"> </span>class="com.yc.ssm.vote.web.action.UserAction"/><span style="white-space:pre"> </span> <span style="font-family: Arial, Helvetica, sans-serif;"></beans></span>
5. action类
package com.yc.ssm.vote.web.action;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ModelDriven;
import com.yc.ssm.vote.entity.User;
import com.yc.ssm.vote.service.UserService;
@Controller("userAction")
public class UserAction implements ModelDriven<User> {
private User user;
private String errorMsg;
@Autowired
private UserService userService;
public void setUser(User user) {
this.user = user;
}
public String getErrorMsg() {
return errorMsg;
}
public String login() {
user = userService.login(user);
if (user != null)
{
ActionContext.getContext().getSession().put("user", user);
return "success";
}
errorMsg = "用户名或密码错误";
return "fail";
}
@Override
public User getModel() {
user = new User();
return user;
}
}
6. 响应页面。
index.jsp
<pre name="code" class="html"><%@page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<jsp:forward page="/page/login.jsp" />
<form action="user_login.action">
用户名:<input type="text" name="用户名" /><br/>
密码:<input type="password" name="密码"/><br/>
<input type="submit" value="登陆"/>
</form>
</body>
</html>
success.jsp
<%@page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<h1>登陆成功.!</h1>
</body>
</html>