`
如若_晴
  • 浏览: 111355 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Struts2.3+Spring3.2的整合 案例

阅读更多
原文转自:http://blog.csdn.net/riyunzhu/article/details/7887901

这两天都是一直在鼓捣Struts2.3如何整合Spring3.2以及dao层到底选用什么以及如何整合。下面就把自己这两天的一些小成果分享出来也以便自己以后在实际项目中快速搭建。
首先是Struts2.3整合Spring3.2
1、新建一个web工程(这个就不说了)
2、添加Struts2.3
把Struts开发所需的jar复制到工程的lib文件中。开发struts必须包如下:

3、创建action类
声明:整个示例只有一个简单的用户登录。
本例中的action类名为 LoginAction,该类中的代码如下:

[java] view plaincopy
package com.riyun.action; 
 
import com.opensymphony.xwork2.ActionSupport; 
public class LoginAction extends ActionSupport{ 
     
    private static final long serialVersionUID = 1L; 
     
         
    private String userName; 
    private String passWord; 
     
    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{ 
        if(userName.equals("riyun")&&passWord.equals("123")){ 
               return SUCCESS; 
          }else{ 
               return ERROR; 
            } 
[java] view plaincopy


至于该类为什么继承ActionSupport,相信网上讲述Struts1.X与Struts2.X的文章已经很多了,这里就不罗嗦了。
4、修改项目中的index.jsp代码,修改后的index.jsp代码如下:

[html] view plaincopy
<%@ 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"> 
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    --> 
  </head> 
   
  <body> 
    <s:form action="login"> 
        <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> 

[html] view plaincopy
 
新建两个success.jsp、error.jsp页面。后面action处理结果跳转有用,如果登陆成功则跳转到success.jsp,反之则跳转到error.jsp!
5、 新建一个以struts.xml为名的xml文件
  文件中的代码如下:

[html] view plaincopy
<?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配置文件 --> 
      
     <!-- 所有的action都应该放在对应的package下 --> 
     <package name="riyun" extends="struts-default"> 
        <action name="login" class="com.riyun.action.LoginAction"> 
            <!-- 定义逻辑视图和物理资源之间的映射 --> 
            <result name="success">/success.jsp</result> 
            <result name="error">/error.jsp</result> 
        </action> 
     </package> 
  </struts> 

6、在web.xml中添加struts拦截器。
    Web.xml的代码如下:

[html] view plaincopy
<?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"> 
   
    <!-- 定义struts2的核心filter --> 
    <filter> 
        <filter-name>struts2</filter-name> 
        <filter-class> 
            org.apache.struts2.dispatcher.FilterDispatcher             
        </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> 

至此Struts2.3整合成功,接下来继续整合Spring3.2。
7、导入所需spring的jar包如下;

对于Spring的jar包没有研究过,所以我这里把spring所有的jar都复制到了lib目录中去了。另外还需要导入struts2-spring-plugin-2.3.4.1.jar包。
8、在web-inf目录中新建一个applicationContext.xml为名的xml文件(该文件与web.xml是在同一级目录)
该applicationContext.xml文件中的代码如下:

[html] view plaincopy
<?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="userDao" class="com.riyun.daoImpl.UserDaoImpl">  </bean>   
    <bean id="login" class="com.riyun.action.LoginAction">   
        <property name="userDao" ref="userDao" />   
    </bean>   
</beans> 


9、修改struts.xml文件,修改后的struts.xml文件中的代码如下
[html] view plaincopy
<?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配置文件 --> 
     <!-- 将action托管给spring --> 
     <constant name="struts.objectFactory" value="spring"></constant>   
     <!-- 所有的action都应该放在对应的package下 --> 
     <package name="riyun" extends="struts-default"> 
        <action name="login" class="com.riyun.action.LoginAction"> 
            <!-- 定义逻辑视图和物理资源之间的映射 --> 
            <result name="success">/success.jsp</result> 
            <result name="error">/error.jsp</result> 
        </action> 
     </package> 
  </struts> 


10、修改web.xml文件,修改后的web.xml文件中的代码如下:

[html] view plaincopy
<?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"> 
   
    <!-- 初始化 --> 
     <context-param> 
         <param-name>contextConfigLocation</param-name> 
         <!-- 如果有多个文件,在文件之间用英文逗号隔开 --> 
         <!-- <param-value>/WEB-INF/applicationContext.xml,/WEB-INF/applicationContext-db.xml 
         </param-value> --> 
         <param-value>/WEB-INF/applicationContext.xml</param-value> 
     </context-param> 
    <!-- 监听器 --> 
    <!-- 配置spring监听器 -->   
    <listener>   
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>   
    </listener>   
     <!-- 定义struts2的核心filter --> 
    <filter> 
        <filter-name>struts2</filter-name> 
        <filter-class> 
            org.apache.struts2.dispatcher.FilterDispatcher             
        </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> 

ok,到此为此Struts2.3整合Spring3.2就可以了。那实际项目中不可能不跟数据库打交道。常见的dao层用的是hibernate。但其实还有一些跟hibernate功能相似而且相对于hibernate来说配置更简单的dao层应用可以供我们选择。这里我就选用了JDBC。利用JDBC作为dao层的应用,每个dao层都要继承JDBCSupport类。
11、添加dao层,添加UserDao接口、添加UserDaoImpl实现接口类
UserDao接口的代码如下:
[java] view plaincopy
package com.riyun.dao; 
 
public interface UserDao { 
     
    /*用户登录
     * pram:userName,passWord
     * return:boolean
     */ 
    public boolean login(String userName,String passWord); 
 


UserDaoImpl实现接口类的代码如下:

[java] view plaincopy
package com.riyun.daoImpl; 
 
import java.util.Map; 
 
 
import org.springframework.dao.EmptyResultDataAccessException; 
import org.springframework.jdbc.core.support.JdbcDaoSupport; 
 
import com.riyun.dao.UserDao; 
 
public class UserDaoImpl extends JdbcDaoSupport implements UserDao{ 
 
    //用户登录 
    public boolean login(String userName, String passWord) { 
        // TODO Auto-generated method stub 
        String sql="select job,ename from emp where ename=?"; 
        Map map=this.getJdbcTemplate().queryForMap(sql, new Object[] {userName}); 
        try{ 
            String pass=(String) map.get("job"); 
            if(passWord.equals(pass)){           
                return true; 
            }else{ 
                return false; 
            } 
        }catch(EmptyResultDataAccessException e){ 
            e.printStackTrace(); 
            return false; 
        }        
    } 

12、修改LoginAction类的代码,修改后的代码如下:


[java] view plaincopy
package com.riyun.action; 
 
import org.apache.log4j.Logger; 
 
import com.opensymphony.xwork2.ActionSupport; 
import com.riyun.dao.UserDao; 
 
public class LoginAction extends ActionSupport{ 
     
    private static final long serialVersionUID = 1L; 
     
         
    private UserDao userDao; 
    private String userName; 
    private String passWord; 
     
    public UserDao getUserDao() { 
        return userDao; 
    } 
    public void setUserDao(UserDao userDao) { 
        this.userDao = userDao; 
    } 
 
    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{ 
        if(userDao.login(userName, passWord)){ 
            return SUCCESS; 
        }else{ 
            return ERROR; 
        } 
    } 
     

13、修改applicationContext.xml文件,修改后的文件代码如下:
[html] view plaincopy
<?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="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"  destroy-method="close" dependency-check="none"> 
            <property name="driverClass"> 
                <value>oracle.jdbc.driver.OracleDriver</value> 
            </property> 
            <property name="jdbcUrl"> 
                <value>jdbc:oracle:thin:@localhost:1521:orcl</value> 
            </property> 
            <property name="user"> 
                <value>scott</value> 
            </property> 
            <property name="password"> 
                <value>123</value> 
            </property> 
            <!-- <property name="acquireIncrement"> 
                <value>${c3p0.acquireIncrement}</value> 
            </property> 
            <property name="initialPoolSize"> 
                <value>${c3p0.initialPoolSize}</value> 
            </property> 
            <property name="minPoolSize"> 
                <value>${c3p0.minPoolSize}</value> 
            </property> 
            <property name="maxPoolSize"> 
                <value>${c3p0.maxPoolSize}</value> 
            </property> 
            <property name="maxIdleTime"> 
                <value>${c3p0.maxIdleTime}</value> 
            </property> 
            <property name="idleConnectionTestPeriod"> 
                <value>${c3p0.idleConnectionTestPeriod}</value> 
            </property> 
            <property name="maxStatements"> 
                <value>${c3p0.maxStatements}</value> 
            </property> 
            <property name="numHelperThreads"> 
                <value>${c3p0.numHelperThreads}</value> 
            </property>--> 
    </bean> 
    <bean id="transactionManager"  class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
        <property name="dataSource"> 
            <ref local="dataSource" /> 
        </property> 
    </bean> 
    <bean id="txManager" abstract="true" 
        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> 
        <property name="transactionManager" ref="transactionManager" /> 
        <property name="transactionAttributes"> 
            <props> 
                <prop key="add*"> 
                    PROPAGATION_REQUIRED,-DataAccessException 
                </prop> 
                <prop key="save*"> 
                    PROPAGATION_REQUIRED,-DataAccessException 
                </prop> 
                <prop key="edit*"> 
                    PROPAGATION_REQUIRED,-DataAccessException 
                </prop> 
                <prop key="update*"> 
                    PROPAGATION_REQUIRED,-DataAccessException 
                </prop> 
                <prop key="del*"> 
                    PROPAGATION_REQUIRED,-DataAccessException 
                </prop> 
                <prop key="handle*"> 
                    PROPAGATION_REQUIRED,-DataAccessException 
                </prop> 
                <prop key="notify*"> 
                    PROPAGATION_REQUIRED,-DataAccessException 
                </prop> 
                <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> 
                <prop key="query*">PROPAGATION_REQUIRED,readOnly,-DataAccessException</prop> 
                <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop> 
                <prop key="is*">PROPAGATION_REQUIRED,readOnly</prop> 
            </props> 
        </property> 
    </bean> 
     
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
        <constructor-arg ref="dataSource" /> 
    </bean> 
    <bean id="userDao" class="com.riyun.daoImpl.UserDaoImpl">   
          <property name="jdbcTemplate" ref="jdbcTemplate"></property> 
    </bean>   
    <bean id="login" class="com.riyun.action.LoginAction">   
        <property name="userDao" ref="userDao" />   
    </bean>   
</beans> 
至此整个例子ok了。
在dao层连接数据库的时候还需要导入各个数据库所必须的jar包以及c3p0-0.9.1.2.jar这样的包。
总结:整合过程中 碰到许许多多的问题,相信大家看我这篇文章也会碰到许许多多不一样的问题,但是有问题不可怕,我们要做的就是分析问题的原因。我在整合过程碰到最多的问题就是classnotfound类的问题,其实这类的问题就是没有导入相关jar包导致的错误或者jar冲突导致的。
分享到:
评论

相关推荐

    Struts2.3 + Spring3.2 + Hibernate4.1 + HTML5 + CSS3 开发示例

    Struts2.3 + Spring3.2 + Hibernate4.1 + HTML5 + CSS3开发示例代码。 其中包括如下文件: 介绍文档 Struts2.3 + Spring3.2 + Hibernate4.1 + HTML5 + CSS3开发示例.docx Eclipse工程文件 SSH2.zip Zip包是Eclipse...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    12.6 整合Struts、Spring和Hibernate实现用户管理 12.6.1 Struts、Spring和Hibernate的整合方式 12.6.2 编写用户注册画面regedit.jsp 12.6.3 编写用户登录画面login.jsp 12.6.4 编写注册控制器RegeditAction.java ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    12.6 整合Struts、Spring和Hibernate实现用户管理 12.6.1 Struts、Spring和Hibernate的整合方式 12.6.2 编写用户注册画面regedit.jsp 12.6.3 编写用户登录画面login.jsp 12.6.4 编写注册控制器RegeditAction.java ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    12.6 整合Struts、Spring和Hibernate实现用户管理 12.6.1 Struts、Spring和Hibernate的整合方式 12.6.2 编写用户注册画面regedit.jsp 12.6.3 编写用户登录画面login.jsp 12.6.4 编写注册控制器RegeditAction.java ...

    带事务回滚测试的SSH整合小案例(Spring 3.2+Hibernate 3.3+Struts 2.3)

    集成了Spring 3.2.2 Hibernate 3.3.2 Struts 2.3.4 用JPA的注解实现orm 不用创建数据库表 只需本机上有oracle即可 用JSR注解进行Spring的依赖注入 用Spring Test整合Junit4 进行测试并自动事务回滚 不对数据库造成...

    基于struts2、spring、hibernate构建一个网上投票系统-毕业论文.doc

    2.3 添加Spring应用 Spring作为依赖注入框架,整合其他组件,管理Bean的生命周期。将Struts2和Hibernate的配置集成到Spring的ApplicationContext中,实现事务管理,同时可以通过AOP(面向切面编程)处理如日志记录、...

    struts2框架学习笔记整理

    - **整合Spring**:如果需要整合Spring框架,需要导入`Struts-spring-plugin-2.3.24.jar`,并在启动时寻找Spring容器。 ##### 2.2 编写Action类 - **编写Action**:创建一个简单的Java类,该类可以是POJO或实现...

    《程序天下:J2EE整合详解与典型案例》光盘源码

    12.6 整合Struts、Spring和Hibernate实现用户管理 12.6.1 Struts、Spring和Hibernate的整合方式 12.6.2 编写用户注册画面regedit.jsp 12.6.3 编写用户登录画面login.jsp 12.6.4 编写注册控制器RegeditAction.java ...

    Spring教程

    Spring也支持Struts ActionSupport类,用于简化Struts的开发。 #### 九、Spring整合应用 **10.1 Spring和Log4j** Spring可以与日志框架Log4j进行整合: - **在classpath下配置log4j**:通过在classpath下放置log4...

    Spring中文帮助文档

    2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的支持 2.3.3. 对bean命名pointcut( bean name pointcut element)的支持 2.3.4. 对AspectJ装载时织入(AspectJ load-time weaving...

    Spring API

    2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的支持 2.3.3. 对bean命名pointcut( bean name pointcut element)的支持 2.3.4. 对AspectJ装载时织入(AspectJ load-time weaving...

    JAVA程序开发大全---上半部分

    10.8 基于Spring与Struts、Hibernate整合的登录系统 194 10.9 本章小结 199 第11章 JSF框架的开发与应用 200 11.1 JSF框架概述 200 11.1.1 JSF框架工作方式 200 11.1.2 JSF框架的请求处理生命周期 201 11.1.3 JSF...

    学习SSH的教程和项目

    随着互联网技术的发展与企业级应用需求的增长,Spring、Struts 和 Hibernate 这三种框架因其各自的优势而在 Java Web 开发领域占据了重要的地位。SSH(Spring + Struts + Hibernate)框架组合更是成为了企业级Java ...

    springmvc课堂笔记

    - **集成性强**:作为Spring框架的一部分,SpringMVC与Spring无缝集成,简化了与其他Spring组件的整合。 - **灵活性高**:提供了多种方式来处理HTTP请求,如基于XML或注解的方式。 - **强大的功能**:支持各种数据...

    shiro视频教程-最全,通俗易懂

    - **5.3 Shiro与其他框架的集成**:除了Spring MVC和MyBatis之外,还可以与其他框架(如Spring Boot、Struts等)进行集成。 - **5.4 性能优化**:探讨如何提高Shiro的安全性和性能,包括缓存机制的使用等。 #### 六...

    基于jsp+ssh易商B2C网上交易系统源码数据库论文.doc

    SSH框架整合了Struts2负责控制层,Hibernate处理持久层,Spring进行业务逻辑管理。通过这些框架,可以有效地组织和管理代码,提高开发效率。 3.3 安全性考虑 为了保障交易安全,系统应实现用户密码加密存储,防止...

    DWR中文文档.pdf

    通过具体的案例来展示如何使用DWR实现特定的功能,如购物车功能的实现。 #### 十、附录 **10.1 常见问题** 解决了一些常见的技术难题,如TransformerFactoryConfigurationError、XML解析错误等。 **10.2 ...

Global site tag (gtag.js) - Google Analytics