`
riyunzhu
  • 浏览: 30220 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Struts2.3+Spring3.2的整合

 
阅读更多

这两天都是一直在鼓捣Struts2.3如何整合Spring3.2以及dao层到底选用什么以及如何整合。下面就把自己这两天的一些小成果分享出来也以便自己以后在实际项目中快速搭建。

首先是Struts2.3整合Spring3.2

1、新建一个web工程(这个就不说了)

2、添加Struts2.3

Struts开发所需的jar复制到工程的lib文件中。开发struts必须包如下:

3、创建action

声明:整个示例只有一个简单的用户登录。

本例中的action类名为 LoginAction,该类中的代码如下:

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;
		     }
		}
	
}


至于该类为什么继承ActionSupport,相信网上讲述Struts1.XStruts2.X的文章已经很多了,这里就不罗嗦了。

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">
	<!--
	<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>



新建两个success.jsperror.jsp页面。后面action处理结果跳转有用,如果登陆成功则跳转到success.jsp,反之则跳转到error.jsp

5新建一个以struts.xml为名的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配置文件 -->
     
     <!-- 所有的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的代码如下:

<?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、导入所需springjar包如下;

对于Springjar包没有研究过,所以我这里把spring所有的jar都复制到了lib目录中去了。另外还需要导入struts2-spring-plugin-2.3.4.1.jar包。

8、在web-inf目录中新建一个applicationContext.xml为名的xml文件(该文件与web.xml是在同一级目录)

applicationContext.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="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文件中的代码如下

<?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文件中的代码如下:

<?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接口的代码如下:

package com.riyun.dao;

public interface UserDao {
	
	/*用户登录
	 * pram:userName,passWord
	 * return:boolean
	 */
	public boolean login(String userName,String passWord);

}


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

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类的代码,修改后的代码如下:


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文件,修改后的文件代码如下:

<?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...

    Struts2.3.16.1+Hibernate3.6.10+Spring3.2.8整合

    Struts2.3.16.1+Hibernate3.6.10+Spring3.2.8整合 能够运行,没有任何问题 另外附带applicationContext.xml、struts.xml、hibernate.cfg.xml

    struts2.3、spring3.2和mybatis3.2整合

    这是一个用Eclipse4所做的基于struts2.3、spring3.2和mybatis3.2整合的Demo,Demo中包含了详细的配置说明和初始化脚本,但不包括jar包,所以,如果需要请联系我,QQ:156296788

    struts2.3 spring3.2 mybatis3.2整合及示例代码

    2. **Spring3.2整合**:Spring作为应用的核心容器,管理所有Bean的生命周期和依赖关系。通过Spring的DI(Dependency Injection)特性,可以实现Action类中依赖的服务实例化和注入。此外,Spring还负责事务管理,确保...

    struts2.3+hibernate3.2简单的整合

    struts2.3+hibernate3.2简单的整合(亲测可用,想学习的同学可以看下) 包括ajax 、struts返回json格式数据 、 简单的struts表达式 数据库:mysql 工具:eclipse web项目导入可直接运行 先加入struts成功运行后再...

    struts2.3+spring3.2+hibernate4.2

    Struts2.3、Spring3.2和Hibernate4.2是三个非常重要的Java Web开发框架,它们在企业级应用中广泛使用。这篇文章将详细介绍这三个框架的整合过程以及各自的核心功能。 Struts2是一个基于MVC(Model-View-Controller...

    struts2.3+hibernate4.1+spring3.2+EasyUI1.36整合实现的java后台管理系统

    Struts2.3、Hibernate4.1、Spring3.2和EasyUI1.36是构建Java后台管理系统的四个核心组件,它们各自扮演着重要的角色,共同为开发人员提供了一个高效、灵活且功能丰富的框架。 Struts2是基于MVC(Model-View-...

    struts2.3+spring4.1+mybatis3.2.docx

    ### Struts2.3 + Spring4.1 + MyBatis3.2 整合实践 在Java Web开发领域,Struts2、Spring 和 MyBatis 是三个非常流行的开源框架,它们各自解决了不同的问题:Struts2 用于MVC模式的实现;Spring 作为轻量级的IoC...

    sturts2.3.15.1+Spring3.2+hibernate3.6整合

    标题中的"sturts2.3.15.1+Spring3.2+hibernate3.6整合"指的是在Web开发中使用Struts2、Spring和Hibernate这三种技术进行集成开发的一个项目版本配置。SSH(Struts2、Spring、Hibernate)是Java企业级应用中常见的...

    struts2.3、spring3.2和hibernate4.1整合

    基于Eclipse4所做的一个Demo,所用的到SSH版本是:struts2.3、spring3.2、hibernate4.1,这个Demo包括详细的注释和初始化脚本,但不包括jar包,如需要,请联系我,QQ:156296788

    struts2.3 + spring3.2 + hihernate3.6整合框架

    Struts2.3、Spring3.2和Hibernate3.6是经典的Java企业级开发框架组合,通常被称为SSH框架。这个整合框架提供了强大的MVC(Model-View-Controller)架构支持,便于开发人员构建高效、可扩展的企业级应用程序。下面将...

    struts2.3+spring3.2+mybatis3.1整合注释行事务处理(含jar包)

    在这个项目中,我们看到的是一个基于Struts2.3、Spring3.2和MyBatis3.1的集成应用,其中使用了注释式的事务管理。 首先,让我们来详细了解一下这三个框架: 1. **Struts2**:这是一个基于MVC设计模式的Java Web...

    SSH所需的jar包,精简完全,struts2.3+hibernate3.6+spring3.2。

    Struts2.3版本引入了许多新特性,例如改进的类型转换、更灵活的配置以及对RESTful风格的支持。 Spring框架是Java企业级应用开发的基石,它提供了依赖注入(DI)和面向切面编程(AOP)等核心特性。Spring允许开发者...

    搞定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 ...

    easyui+spring+struts+hibernate 实例

    Java Web Demo,前台使用easyUI控件、jQuery技术,后台使用Spring、Struts、Hibernate技术。具体运行参考:http://blog.csdn.net/fansy1990/article/details/39319335

    Java SSH框架整合搭建Web系统(Struts1.2+Spring2.5+Hibernate3.2)

    ### Java SSH框架整合搭建Web系统(Struts1.2+Spring2.5+Hibernate3.2) #### 一、准备工作 在开始构建基于Struts1.2+Spring2.5+Hibernate3.2的Web应用之前,需要进行一系列的基础设置工作。 **1.1 创建工程** ...

    Struts2+Spring3+Hibernate4示例

    6. **文档**:Struts2.3 + Spring3.2 + Hibernate4.1 + HTML5 + CSS3.doc可能是一个详细的技术文档,解释了如何运行和理解此示例。 通过这个示例,你可以学习到如何整合这三个框架,理解它们之间的协作机制,以及...

    struts22.3.4.1+hibernate4.1.6+spring3.1.2整合jar包

    标题提到的"struts22.3.4.1+hibernate4.1.6+spring3.1.2整合jar包"是指将这三个特定版本的框架进行了集成,以实现更高效和无缝的协作。Struts2的2.3.4.1版本修复了一些安全漏洞并优化了性能;Hibernate的4.1.6版引入...

    S2SH: Struts2.3+hibernate4+spring3.2整合实例

    该项目用的是struts-2.3.15,hibernate-release-4.2.3.Final,spring-framework-3.2.3 来进行整合的!希望对大家有帮助,特别是刚接触hibernate4的~带有sql文件,方便创建例子用到的数据库。

Global site tag (gtag.js) - Google Analytics