文档章节

Maven搭建struts2+spring+hibernate环境(二)

岁月无痕
 岁月无痕
发布于 2015/06/01 00:46
字数 1235
阅读 133
收藏 3

上一篇    《Maven 搭建struts2+spring+hibernate环境(一)》

一、修改项目结构

上一篇中我们已经完成了jar的引入,现在开始构建测试程序。刚刚完成的project图标上可能有一个红色的叉,只需要把项目复制--粘贴--重命名。即可解决,并不是项目搭建错误所致,这可能是IDE的一个bug吧,在MyEclipse中搭建也出现这种情况,解决方法一样。

 但是,构建的MSSH项目的结构并不是一个标准的Maven结构,我们需要手动新建几个Source Folder(注意:是source folder,不是package!!)。

完成后的结构如下:


src/main.java:存放java源文件

src/main/resources:存放项目配置文件,如spring.xml,hibernate.cfg.xml。。。

src/test/java:存放test的java文件

src/test/resources:存放test时候所需的配置文件


二、编写程序

建立如下的结构


编写配置文件,各种配置的含义我在此就不累赘了,有ssh使用基础的同学都能看懂的。

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>
	<!-- 将Action交给spring容器管理 -->
	<constant name="struts.objectFactory" value="spring" />
	<!-- 模式为开发模式,修改xml配置文件会自动加载,项目交付的时候设置为false,以免影响性能 -->
	<constant name="struts.devMode" value="true" />
	<constant name="struts.configuration.xml.reload" value="true" />
	<!-- 字符集编码 -->
	<constant name="struts.i18n.encoding" value="utf-8" />
	<package name="defaultPackage" namespace="/" extends="struts-default">
		
	<action name="userAction" class="userAction" method="reg">
		<result name="success">/success.jsp</result>
		<result name="error">/error.jsp</result>
	</action>
	</package>
</struts>

spring.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"
	xsi:schemaLocation="
	http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
	http://www.springframework.org/schema/context 
	http://www.springframework.org/schema/context/spring-context-3.0.xsd
	">

	<!-- 引入属性文件 -->
	<context:property-placeholder location="classpath:database.properties" />

	<!-- 自动扫描dao和service包(自动注入) -->
	<context:component-scan base-package="com.sgl.action,com.sgl.dao.impl,com.sgl.service" />

</beans>
spring-hibernate.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:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="
	http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
	http://www.springframework.org/schema/tx 
	http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
	http://www.springframework.org/schema/aop 
	http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
	">
	<!-- 使用C3P0数据源,MySQL数据库 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
		destroy-method="close">
		<!-- MySQL5 -->
		<property name="driverClass" value="${driverClassName}"></property>
		<property name="jdbcUrl" value="${url}"></property>
		<property name="user" value="${username}"></property>
		<property name="password" value="${password}"></property>		
		<property name="maxPoolSize" value="40"></property>
		<property name="minPoolSize" value="1"></property>
		<property name="initialPoolSize" value="1"></property>
		<property name="maxIdleTime" value="20"></property>
	</bean>
	

	<!-- session工厂 -->
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
				<prop key="hibernate.dialect">${hibernate.dialect}</prop>
				<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
				<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
			</props>
		</property>

		<!-- 注解方式配置 -->
		<property name="packagesToScan">
			<list>
				<value>com.sgl.model</value>
			</list>
		</property>


	</bean>

	<!-- 配置事务 -->
	<bean name="txManager"
		class="org.springframework.orm.hibernate4.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>
	<tx:annotation-driven transaction-manager="txManager" />


</beans>
database.properties

hibernate.dialect=org.hibernate.dialect.MySQLDialect
driverClassName=com.mysql.jdbc.Driver
validationQuery=SELECT 1
url=jdbc:mysql://localhost:3306/mssh?useUnicode=true&characterEncoding=UTF-8
username=root
password=sgl


hibernate.hbm2ddl.auto=update
hibernate.show_sql=true
hibernate.format_sql=true
web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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_3_0.xsd">
	<display-name></display-name>

	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring.xml,classpath:spring-hibernate.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<!--Hibernate的session丢失解决方法 -->
	<filter>
		<filter-name>openSessionInView</filter-name>
		<filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>openSessionInView</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<!-- struts2配置 -->
	<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>


	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>
编写java文件,采用MVC架构,使用hibernate,spring注解

User.java

package com.sgl.model;

import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

@SuppressWarnings("serial")
@Entity
@Table(name = "tuser")
public class User implements java.io.Serializable
{
	private String id;
	private Date regtime;
	private String username;
	private String password;
	@Column(name="password",nullable=false,length=20)
	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
	private String code;
	@Transient
	public String getCode() {
		return code;
	}
	
	public void setCode(String code) {
		this.code = code;
	}
	public User()
	{
	}
	public User(String id, Date regtime, String username,String password) {
		super();
		this.id = id;
		this.regtime = regtime;
		this.username = username;
		this.password = password;
	}
	@Id
	@Column(name = "id", nullable = false, length = 36)
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "regtime", length = 7)
	public Date getRegtime() {
		return regtime;
	}
	public void setRegtime(Date regtime) {
		this.regtime = regtime;
	}
	@Column(name = "username", unique = false, nullable = false, length = 100)
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
}


UserDaoI.java

package com.sgl.dao;

import java.io.Serializable;

public interface UserDaoI<T>
{
	public Serializable save(T o);
}

UserDaoImpl.java

package com.sgl.dao.impl;

import java.io.Serializable;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.sgl.dao.UserDaoI;

@Repository("userDao")
public class UserDaoImpl<T> implements UserDaoI<T> {
	//注入sessionfactory
	@Autowired
	private SessionFactory sessionFactory;

	public Serializable save(T o) {
		return sessionFactory.getCurrentSession().save(o);
	}

}
UserService.java

package com.sgl.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.sgl.dao.UserDaoI;
import com.sgl.model.User;
@Service("userService")
@Transactional
public class UserService      //之前这里写错成了UserServiceImpl,谢谢wangdianyong的提醒,此处已做修改
{ 	
	//自动注入dao
	@Autowired
	private UserDaoI<User> userDao;
	
	public void addUser(User user)
	{
		userDao.save(user);
	}

}

UserAction.java

package com.sgl.action;

import java.util.Date;
import java.util.UUID;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.springframework.beans.factory.annotation.Autowired;
import com.sgl.model.User;
import com.sgl.service.UserService;    //修改为UserService

@controller("userAction")
public class UserAction
{
	@Autowired
	private UserService userService;
	private User user;

	public User getUser()
	{
		return user;
	}

	public void setUser(User user)
	{
		this.user = user;
	}

	public String reg()
	{
		user.setId(UUID.randomUUID().toString());
		user.setRegtime(new Date());
		try
		{	
			userService.addUser(user);
			ServletActionContext.getContext().getSession().put("user", user);
			ServletActionContext.getContext().getSession().put("msg", "注册成功了,可以去登陆了");
			return "success";
			
		} catch (Exception e)
		{
			e.printStackTrace();
			ServletActionContext.getContext().getSession().put("msg", "注册失败了");
			return "error";
		}
	}
}



© 著作权归作者所有

岁月无痕

岁月无痕

粉丝 9
博文 12
码字总数 10402
作品 0
杨浦
程序员
私信 提问
加载中

评论(1)

m
m7lrv
请问一下如果修改了struts.xml的文件名字路径也修改怎么去配置呢?
求指教,s2sh错误

系统是用struts2+spring+hibernate框架搭建的,在链接mysql数据库的时候出现下面的错误 util.JDBCExceptionReporter - SQL Error: 0, SQLState: 08S01 求指教,该如何解决?...

算法与编程之美
2012/09/20
62
2
maven搭建 struts2+spring+hibernate

本次主要讲解使用maven搭建struts2+spring+hibernate框架。用的struts的版本是2.3.8,spring的版本是3.0.5(由于本人引用的依赖是struts2-spring-plugin,它本身依赖与spring3.0.5以及strut...

am_danger
2016/01/14
56
0
svn maven tomcat 自动一键进行远程部署

一、maven环境搭建 1、maven下载 Maven的下载地址: http://maven.apache.org/download.cgi 2、环境配置 修改环境变量,在/etc/profile中添加以下几行 MAVEN_HOME=/usr/local/maven3export M...

漂泊者及其影子
2016/06/13
119
0
dubbo框架Demo之dubbo-admin管理平台和zookeeper注册中心搭建

dubbo框架Demo之dubbo-admin管理平台和zookeeper注册中心搭建 一、安装环境 系统软件环境 单机 系统Centos7.3 java: jdk1.8.0_181 maven: apache-maven-3.5.4 tomcat: apache-tomcat-8.5.30...

bestlope
2018/09/07
0
0
使用nexus搭建Maven私服

为什么要用远程仓库(私服)? 使用maven的好处就是可以对项目的各种依赖进行统一管理,在pom文件中定以好依赖,就可以从maven中央库或者第三方库中下载到本地。但在企业内部使用也会遇到一些...

沉淀人生
2018/04/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 年迈渔夫遭黑帮袭抢

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享Elvis Presley的单曲《White Christmas》: 《White Christmas》- Elvis Presley 手机党少年们想听歌,请使劲...

小小编辑
今天
1K
20
CentOS7.6中安装使用fcitx框架

内容目录 一、为什么要使用fcitx?二、安装fcitx框架三、安装搜狗输入法 一、为什么要使用fcitx? Gnome3桌面自带的输入法框架为ibus,而在使用ibus时会时不时出现卡顿无法输入的现象。 搜狗和...

技术训练营
昨天
5
0
《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
昨天
8
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
昨天
16
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部