Struts2+Spring+Hibernate+Maven框架整合

17 篇文章 0 订阅
10 篇文章 0 订阅

Struts2+Spring+Hibernate+Maven框架整合

点击这里下载框架整合后的代码:点我下载,不要你的积分哦!!!
本文主要讲述如何通过Maven整合Struts2、Spring、Hibernate。在整合的过程中偏重于使用注解和自动装配的方式。Struts2采用的是配置文件xml的方式进行配置,Spring和Hibernate采用注解的方式进行配置。下面开始:
1、新建一个maven空程序。archetype-maven-webapp。命令:mvn archetype:generate -DarchetypeCatalog=internal
2、利用eclipse打开新建的maven程序。在pom.xml中加入需要依赖的包。
<dependencies>
    <dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-entitymanager</artifactId>
			<version>4.3.5.Final</version>
		</dependency>
		<!-- mysql connector -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.38</version>
		</dependency>
		<!-- hibernate-c3p0 -->
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-c3p0</artifactId>
			<version>4.3.5.Final</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>4.0.5.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>4.0.5.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>4.0.5.RELEASE</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>4.0.5.RELEASE</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>4.0.5.RELEASE</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-orm -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-orm</artifactId>
			<version>4.0.5.RELEASE</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>4.0.5.RELEASE</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aspects</artifactId>
			<version>4.0.5.RELEASE</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-jms -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jms</artifactId>
			<version>4.0.5.RELEASE</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc-portlet -->
		<!-- <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc-portlet</artifactId> 
			<version>4.0.5.RELEASE</version> </dependency> -->
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-messaging -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-messaging</artifactId>
			<version>4.0.5.RELEASE</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-instrument -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-instrument</artifactId>
			<version>4.0.5.RELEASE</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-framework-bom -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-framework-bom</artifactId>
			<version>4.0.5.RELEASE</version>
			<type>pom</type>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>4.0.5.RELEASE</version>
		</dependency>
		<!-- struts2核心依赖 -->
		<dependency>
			<groupId>org.apache.struts</groupId>
			<artifactId>struts2-core</artifactId>
			<version>2.3.4</version>
			<type>jar</type>
			<scope>compile</scope>
		</dependency>
		<!-- struts2零配置依赖 -->
		<dependency>
			<groupId>org.apache.struts</groupId>
			<artifactId>struts2-convention-plugin</artifactId>
			<version>2.3.4</version>
			<type>jar</type>
			<scope>compile</scope>
		</dependency>
		<!-- struts2的json依赖 -->
		<dependency>
			<groupId>org.apache.struts</groupId>
			<artifactId>struts2-json-plugin</artifactId>
			<version>2.3.4</version>
			<type>jar</type>
			<scope>compile</scope>
		</dependency>
		<!-- 查看部署的aciton信息 -->
		<dependency>
			<groupId>org.apache.struts</groupId>
			<artifactId>struts2-config-browser-plugin</artifactId>
			<version>2.3.20</version>
		</dependency>
		
		<dependency>
			<groupId>org.apache.struts</groupId>
			<artifactId>struts2-spring-plugin</artifactId>
			<version>2.3.4</version>
		</dependency>
  </dependencies>

2、看一下程序中文件夹的布局



3、主要配置文件中的内容
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>
	<display-name>Archetype Created Web Application</display-name>
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<!-- <param-value>/WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml</param-value> -->
		<param-value>/WEB-INF/classes/beans.xml</param-value>
	</context-param>
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</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>
</web-app>

beans.xml
<?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: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">  
  
    <context:component-scan base-package="com.xueyoucto.xueyou" />  
  
    <bean id="myDataSource" name="dataSource"  
        class="com.mchange.v2.c3p0.ComboPooledDataSource">  
        <!-- 指定连接数据库的驱动 -->  
        <property name="driverClass" value="com.mysql.jdbc.Driver" />  
        <!-- 指定连接数据库的URL -->  
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/ssh" />  
        <!-- 指定连接数据库的用户名 -->  
        <property name="user" value="root" />  
        <!-- 指定连接数据库的密码 -->  
        <property name="password" value="123456" />  
        <!-- 指定连接池中保留的最大连接数. Default:15 -->  
        <property name="maxPoolSize" value="100" />  
        <!-- 指定连接池中保留的最小连接数 -->  
        <property name="minPoolSize" value="10" />  
        <!-- 指定连接池的初始化连接数 取值应在minPoolSize 与 maxPoolSize 之间.Default:3 -->  
        <property name="initialPoolSize" value="20" />  
        <!-- 最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。 Default:0 -->  
        <property name="maxIdleTime" value="600" />  
        <!-- 当连接池中的连接耗尽的时候c3p0一次同时获取的连接数. Default:3 -->  
        <property name="acquireIncrement" value="5" />  
        <!-- JDBC的标准,用以控制数据源内加载的PreparedStatements数量。 但由于预缓存的statements属于单个connection而不是整个连接池所以设置这个参数需要考虑到多方面的因数.如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default:0 -->  
        <property name="maxStatements" value="5" />  
        <!-- 每60秒检查所有连接池中的空闲连接.Default:0 -->  
        <property name="idleConnectionTestPeriod" value="60" />  
    </bean>  
  
    <bean id="sessionFactory"  
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">  
        <property name="dataSource" ref="myDataSource" />  
        <property name="packagesToScan">  
            <list>  
                <value>com.xueyoucto.xueyou.model</value>  
                <!-- 加载hibernate的jpa注解形式的实体类 -->  
            </list>  
        </property>  
        <property name="hibernateProperties">  
            <props>  
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>  
                <prop key="hibernate.show_sql">true</prop>  
                <prop key="hibernate.format_sql">true</prop>  
                <prop key="hbm2ddl.auto">update</prop>  
  				
            </props>  
        </property>  
    </bean>  
      
    <tx:annotation-driven transaction-manager="transactionManager"/>  
    <bean id="transactionManager"  
        class="org.springframework.orm.hibernate4.HibernateTransactionManager">  
        <property name="sessionFactory" ref="sessionFactory" />  
    </bean>  
</beans>    

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" />
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />  
    <constant name="struts.devMode" value="true" />  
  
    <package name="xueyoupackage" namespace="/test" extends="struts-default">  
        <action name="*">  
            <result>/WEB-INF/content/{1}.jsp</result>  
        </action>         
    </package> 
    <package name="userandlog" namespace="/userandlog" extends="struts-default">  
        <action name="add" class="userandlogaction" method="add">  
            <result name="success">/WEB-INF/content/Success.jsp</result>  
            <result name="error">/WEB-INF/content/Error.jsp</result>  
        </action>         
    </package> 
</struts>  

4、各个类及接口的代码:
UserandLogAction.java
package com.xueyoucto.xueyou.action;

import javax.annotation.Resource;

import org.springframework.stereotype.Component;

import com.opensymphony.xwork2.ActionSupport;
import com.xueyoucto.xueyou.model.Log;
import com.xueyoucto.xueyou.model.User;
import com.xueyoucto.xueyou.service.UserService;

@Component("userandlogaction")
public class UserandLogAction extends ActionSupport {
	/**
	 * 
	 */
	private static final long serialVersionUID = 7824944119334301832L;
	private String name;
	private String msg;

	@Resource(name = "uesrserviceimpl")
	private UserService userservice;

	public UserService getUserservice() {
		return userservice;
	}

	public void setUserservice(UserService userservice) {
		this.userservice = userservice;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}

	public String add() {
		User u = new User();
		Log log = new Log();
		u.setName(name);
		log.setMsg(msg);
		userservice.addUserWithLog(u, log);
		return ActionSupport.SUCCESS;
	}

}

LogDao.java
package com.xueyoucto.xueyou.dao;

import com.xueyoucto.xueyou.model.Log;

public interface LogDao {
	public void save(Log log);
}

UserDao.java
package com.xueyoucto.xueyou.dao;

import com.xueyoucto.xueyou.model.User;

public interface UserDao {
	public void save(User u);
}

LogDaoImpl.java
package com.xueyoucto.xueyou.daoImpl;

import javax.annotation.Resource;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.stereotype.Component;

import com.xueyoucto.xueyou.dao.LogDao;
import com.xueyoucto.xueyou.model.Log;
@Component("logdaoimpl")
public class LogDaoImpl implements LogDao {
	@Resource
	private SessionFactory sessionFactory;

	public SessionFactory getSessionFactory() {
		return sessionFactory;
	}

	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}

	public void save(Log log) {
		// TODO Auto-generated method stub
		Session s = sessionFactory.getCurrentSession();
		s.save(log);
	}
}

UserDaoImpl.java
package com.xueyoucto.xueyou.daoImpl;

import javax.annotation.Resource;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.stereotype.Component;

import com.xueyoucto.xueyou.dao.UserDao;
import com.xueyoucto.xueyou.model.User;

@Component("userdaoimpl")
public class UserDaoImpl implements UserDao{
	@Resource
	private SessionFactory sessionFactory;
	
	
	public SessionFactory getSessionFactory() {
		return sessionFactory;
	}


	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}


	public void save(User u) {
		// TODO Auto-generated method stub
		Session s  = sessionFactory.getCurrentSession();
		s.save(u);
	}
}

Log.java
package com.xueyoucto.xueyou.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "t_log")
public class Log {
	@Id
	@GeneratedValue
	private int id;
	private String msg;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}

}

User.java
package com.xueyoucto.xueyou.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="user")
public class User {
	@Id
	@GeneratedValue
	private int id;
	private String name;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

UserService.java
package com.xueyoucto.xueyou.service;

import com.xueyoucto.xueyou.model.Log;
import com.xueyoucto.xueyou.model.User;

public interface UserService {
	public void addUserWithLog(User u,Log log);
}

UserServiceImpl.java
package com.xueyoucto.xueyou.serviceImpl;

import javax.annotation.Resource;
import javax.transaction.Transactional;

import org.springframework.stereotype.Component;

import com.xueyoucto.xueyou.dao.LogDao;
import com.xueyoucto.xueyou.dao.UserDao;
import com.xueyoucto.xueyou.model.Log;
import com.xueyoucto.xueyou.model.User;
import com.xueyoucto.xueyou.service.UserService;

@Component("uesrserviceimpl")
public class UserServiceImpl implements UserService{
	
	@Resource(name="userdaoimpl")
	private UserDao userdao;
	@Resource(name="logdaoimpl")
	private LogDao logdao;
	
	@Transactional
	public void addUserWithLog(User u, Log log) {
		// TODO Auto-generated method stub
		userdao.save(u);
		logdao.save(log);		
	}
}

UserServiceTest.java
package com.xueyoucto.xueyou.Test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.xueyoucto.xueyou.model.Log;
import com.xueyoucto.xueyou.model.User;
import com.xueyoucto.xueyou.service.UserService;

public class UserServiceTest {

	@Test
	public void testAddUserWithLog() {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("file:D:\\Workspaces\\ssh_2\\src\\main\\webapp\\WEB-INF\\classes\\beans.xml");
		UserService us = (UserService) ctx.getBean("uesrserviceimpl");
		User u = new User();
		u.setName("xxxx");
		Log log = new Log();
		log.setMsg("xxxx has added!");
		us.addUserWithLog(u, log);
	}

}

5、jsp代码
add.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>add.jsp</title>
</head>
<body>
<form method="post" action="userandlog/add">
姓名:<input type="text" name="name"/><br/>
日志:<input type="text" name="msg"/><br/>
<input type="submit" value="提交"/>
</form>
</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>
<h1>error.jsp</h1>
</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>
<h1>success.jsp</h1>
</body>
</html>

first.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>
<h1>first.jsp</h1>
</body>
</html>

6、数据库表结构
user表:
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(255) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;

t_log表:
-- ----------------------------
-- Table structure for t_log
-- ----------------------------
DROP TABLE IF EXISTS `t_log`;
CREATE TABLE `t_log` (
  `id` int(11) NOT NULL auto_increment,
  `msg` varchar(255) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

7、运行结果:



8、查看数据库中两个表的情况


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值