您的位置:首页 > 编程语言 > Java开发

【JAVA基础】struts-spring-hibernate环境简单搭建

2016-09-06 15:42 267 查看

一、创建动态WEB项目

开发工具:eclipse

项目结构:struts2+spring+hibernate

数据库: mysql

1、准备Struts2的相关jar包

struts官网下载“struts-2-xxx-all”,解压后进入它的apps文件中能看到几个war文件,随便找一个war文件解压之后找到它的WEB-INF下的lib文件。

asm-3.3.jar

asm-commons-3.3.jar

asm-tree-3.3.jar

commons-fileupload-1.3.2.jar

commons-io-2.2.jar

commons-lang3-3.2.jar

freemarker-2.3.22.jar

javassist-3.11.0.GA.jar

log4j-api-2.3.jar

log4j-core-2.3.jar

ognl-3.0.19.jar

struts2-core-2.3.30.jar

xwork-core-2.3.30.jar

2、导入struts2-spring-plugin-2.3.30.jar

struts2-spring-plugin-2.3.30.jar

作用:当引入这个插件后,原先struts创建的action类,交给了spring创建。

在struts2-spring-plugin.jar中有一个struts-plugin.xml,里面声明了action类由spring工厂创建。这个插件重写了struts的对象工厂,当创建一个action类时,它会根据struts的配置文件的class属性的值与spring配置文件中的id属性的值相匹配。如果没有与之匹配,将会像没有使用这个插件前一样创建,然后由spring自动装配。

3、导入spring的相关jar包

相关连接:从spring官网下载spring相关jar包

spring-aop-3.2.17.RELEASE.jar

spring-aspects-3.2.17.RELEASE.jar

spring-beans-3.2.17.RELEASE.jar

spring-context-3.2.17.RELEASE.jar

spring-context-support-3.2.17.RELEASE.jar

spring-core-3.2.17.RELEASE.jar

spring-expression-3.2.17.RELEASE.jar

spring-instrument-3.2.17.RELEASE.jar

spring-instrument-tomcat-3.2.17.RELEASE.jar

spring-jdbc-3.2.17.RELEASE.jar

spring-jms-3.2.17.RELEASE.jar

spring-orm-3.2.17.RELEASE.jar

spring-oxm-3.2.17.RELEASE.jar

spring-struts-3.2.17.RELEASE.jar

spring-test-3.2.17.RELEASE.jar

spring-tx-3.2.17.RELEASE.jar

spring-web-3.2.17.RELEASE.jar

spring-webmvc-3.2.17.RELEASE.jar

spring-webmvc-portlet-3.2.17.RELEASE.jar

4、导入“Hibernate”的相关jar包。

导入“hibernate3.jar”

进入lib文件下导入“required”下的所有jar。

antlr-2.7.6.jar

commons-collections-3.1.jar

dom4j-1.6.1.jar

javassist-3.12.0.GA.jar

jta-1.1.jar

slf4j-api-1.6.1.jar

导入jap相关的jar。

hibernate-jpa-2.0-api-1.0.1.Final.jar

5、导入其他必须包:

导入log4j.jar

导入commons-logging、commons-dbcp、commons-pool、commons-fileupload、commons-io

导入数据库驱动包

导入junit包

6、最后大概需要的jar包如下:

antlr-2.7.6.jar

aopalliance-1.0.jar

asm-3.3.jar

asm-commons-3.3.jar

asm-tree-3.3.jar

aspectjrt-1.7.0.jar

aspectjweaver-1.7.0.jar

commons-collections-3.1.jar

commons-dbcp-1.2.1.jar

commons-fileupload-1.3.2.jar

commons-io-2.2.jar

commons-lang3-3.2.jar

commons-logging-1.2.jar

commons-pool-1.3.jar

dom4j-1.6.1.jar

freemarker-2.3.22.jar

hibernate3.jar

hibernate-jpa-2.0-api-1.0.1.Final.jar

javassist-3.12.0.GA.jar

jta-1.1.jar

junit-4.10.jar

log4j-1.2.17.jar

log4j-api-2.3.jar

log4j-core-2.3.jar

mysql-connector-java-5.1.21-bin.jar

ognl-3.0.19.jar

slf4j-api-1.6.1.jar

spring-aop-3.2.17.RELEASE.jar

spring-aspects-3.2.17.RELEASE.jar

spring-beans-3.2.17.RELEASE.jar

spring-context-3.2.17.RELEASE.jar

spring-context-support-3.2.17.RELEASE.jar

spring-core-3.2.17.RELEASE.jar

spring-expression-3.2.17.RELEASE.jar

spring-instrument-3.2.17.RELEASE.jar

spring-instrument-tomcat-3.2.17.RELEASE.jar

spring-jdbc-3.2.17.RELEASE.jar

spring-jms-3.2.17.RELEASE.jar

spring-orm-3.2.17.RELEASE.jar

spring-oxm-3.2.17.RELEASE.jar

spring-struts-3.2.17.RELEASE.jar

spring-test-3.2.17.RELEASE.jar

spring-tx-3.2.17.RELEASE.jar

spring-web-3.2.17.RELEASE.jar

spring-webmvc-3.2.17.RELEASE.jar

spring-webmvc-portlet-3.2.17.RELEASE.jar

struts2-core-2.3.30.jar

struts2-spring-plugin-2.3.30.jar

xwork-core-2.3.30.jar

7、导入log4j对应的log4j.properties文件。

log4j.rootLogger=ERROR
log4j.addivity.org.apache=true
log4j.appender.Root.Encoding=UTF-8

log4j.logger.org.apache.ibatis=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.com.opensymphony.xwork2=WARN

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=DEBUG
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.Encoding=UTF-8
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss.SSS} %p %l]%m%n

log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.FILE.File=${LOG_DTR}/user.log
log4j.appender.FILE.Encoding=UTF-8
#这个这个appender的阈值级别
log4j.appender.FILE.Threshold=DEBUG
log4j.appender.FILE.DatePattern='_'yyyyMMddHH'.log'
#默认值是true,即将消息增加到指定文件中,false指
log4j.appender.FILE.Append=true
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss.SSS} %p %l]%m%n


8、创建jdbc.properties属性文件

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/test
jdbc.username=root
jdbc.password=root


9、创建beans.xml,即spring的配置文件

<?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/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> 
<!--启用spring的annotation-->
<context:annotation-config />
<!--指定扫描annotation的package的范围-->
<context:component-scan base-package="com.kinsey.ssh01" />
<!--引入jdbc.properties配置问津-->
<context:property-placeholder location="classpath*:jdbc.properties" />
<!--配置数据源信息-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!--配置Hibernate的sessionFactory-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!--配置实体类包的范围-->
<property name="packagesToScan" value="com.kinsey.ssh01.model" />
<!--注入hibernate属性配置-->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.format_sql">false</prop>
</props>
</property>
</bean>
<!--配置spring事务-->
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!--配置aop,spring是通过aop来进行事务管理的-->
<aop:config>
<!--设置那些方法要加入事务管理-->
<aop:pointcut id="allMethods" expression="execution(* com.kinsey.ssh01.dao.*.*(..))" />
<!--配置具体要加入事务控制的方法-->
<aop:advisor advice-ref="txAdvice" pointcut-ref="allMethods" />
</aop:config>
<!--配置那些方法要加入事务控制-->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>

</beans>


9、创建struts.xml,struts的配置文件。

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

<!--基于常量的配置  Begin-->

<!--配置struts的action的请求后缀,这里的配置表示可以是action也可以是do-->
<constant name="struts.action.extension" value="action,do,yao" />
<!--配置当修改struts配置文件的时候就会重新加载-->
<constant name="struts.configuration.xml.reload" value="true" />
<constant name="struts.devMode" value="true" />

<!--让spring管理action-->
<constant name="struts.objectFactory" value="spring" />
<!--基于常量的配置  End-->
<package name="default" namespace="/" extends="struts-default">

<!--基于通配符的配置-->
<action name="*_*" class="{1}Action" method="{2}">
<result>/WEB-INF/jsp/{1}/{2}.jsp</result>
<!--                <result name="input">/WEB-INF/jsp/{1}/{2}Input.jsp</result>
<result type="redirect" name="redirect_list">/${url}</result>-->
</action>
</package>
</struts>


10、在web.xml中配置spring的监听器,struts的过滤器

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<!-- 创建spring的监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--创建struts的过滤器-->
<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>
<!--spring 的监听器可以通过这个上下文参数来获取beans.xml的位置-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:beans.xml</param-value>
</context-param>
</web-app>


11、创建对应action

package com.kinsey.ssh01.action;

import com.kinsey.ssh01.model.Team;
import com.kinsey.ssh01.service.ITeamService;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;

import javax.annotation.Resource;
import javax.persistence.Entity;

/**
* Created with IntelliJ IDEA
* Created By Kinsey
* Date: 2016/8/26
* Time: 18:42
*/
@Controller(value = "teamAction")
@Scope("prototype")
public class TeamAction extends ActionSupport implements ModelDriven<Team> {
private ITeamService teamService ;
private Team team ;

public ITeamService getTeamService() {
return teamService;
}

@Resource
public void setTeamService(ITeamService teamService) {
this.teamService = teamService;
}

public Team getTeam() {
return team;
}

public void setTeam(Team team) {
this.team = team;
}

@Override
public Team getModel() {
if(team==null) team=new Team() ;
return team;
}
public String list(){
ActionContext.getContext().put("gl",teamService.getAllTeam());
return SUCCESS ;
}

}


12、创建公共的dao及实现类

package com.kinsey.ssh01.dao;

import java.util.List;

/**
* Created with IntelliJ IDEA
* Created By Kinsey
* Date: 2016/8/23
* Time: 14:24
*/
public interface IMyBaseDao<T> {
void add(T t) ;
void update(T t) ;
void delete(int id) ;
T load(int id) ;
List<T> list(String sql, Object[] args) ;
List<T> list(String sql) ;
List<T> list(String sql, Object arg) ;
}


对应实现类:

package com.kinsey.ssh01.dao;

import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import javax.annotation.Resource;
import java.lang.reflect.ParameterizedType;
import java.util.List;

/**
* Created with IntelliJ IDEA
* Created By Kinsey
* Date: 2016/8/23
* Time: 14:26
*/
public class MyBaseDaoImpl<T> extends HibernateDaoSupport implements IMyBaseDao<T> {

/**
* 此处不能使用setSessionFactory()注入,因为setSessionFactory()在HibernateDaoSupport中已经定义了,且是final类型的。
* @param sessionFactory
*/
@Resource(name = "sessionFactory")
public void setSupperSessionFactory(SessionFactory sessionFactory){
super.setSessionFactory(sessionFactory);
}
@Override
public void add(T t) {
this.getHibernateTemplate().save(t) ;
}
@Override
public void update(T t) {
this.getHibernateTemplate().update(t);
}
@Override
public void delete(int id) {
this.getHibernateTemplate().delete(this.load(id));
}

@Override
public T load(int id) {
return  (T) this.getHibernateTemplate().load(getGenericType(),id);

}

@Override
public List<T> list(String sql, Object[] args) {
Query query = this.getSession().createQuery(sql) ;
if(args!=null){
for(int i=0;i<args.length;i++){
query.setParameter(i,args[i]);
}
}
return query.list() ;
}

@Override
public List<T> list(String sql) {
return this.list(sql,null);
}

@Override
public List<T> list(String sql, Object arg) {
return this.list(sql,new Object[]{arg});
}

/**
* 创建一个Class的对象来获取泛型的class
*/
private Class genericType ;

public Class getGenericType() {
if(genericType==null){
genericType =(Class<T>)(((ParameterizedType)(this.getClass().getGenericSuperclass())).getActualTypeArguments()[0]);
}
return genericType;
}
}


13、创建对应的dao和实现类

package com.kinsey.ssh01.dao;

import com.kinsey.ssh01.model.Team;

/**
* Created with IntelliJ IDEA
* Created By Kinsey
* Date: 2016/8/26
* Time: 18:43
*/
public interface ITeamDao extends IMyBaseDao<Team> {
}


实现类:

package com.kinsey.ssh01.dao;

import com.kinsey.ssh01.model.Team;
import org.springframework.stereotype.Repository;

/**
* Created with IntelliJ IDEA
* Created By Kinsey
* Date: 2016/8/26
* Time: 18:43
*/
@Repository("teamDaoImpl")
public class TeamDaoImpl extends MyBaseDaoImpl<Team> implements ITeamDao {
}


14、创建对应的service以及实体类

实体类:

package com.kinsey.ssh01.model;

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

/**
* Created with IntelliJ IDEA
* Created By Kinsey
* Date: 2016/8/26
* Time: 18:43
*/
@Entity
@Table(name = "t_team")
public class Team {
private int id ;
private String name ;

public Team() {
}

@GeneratedValue
@Id
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;
}
}


service接口:

package com.kinsey.ssh01.service;

import com.kinsey.ssh01.model.Team;

import java.util.List;

/**
* Created with IntelliJ IDEA
* Created By Kinsey
* Date: 2016/8/26
* Time: 18:46
*/
public interface ITeamService {
List<Team> getAllTeam();
}


Sevice实现:

package com.kinsey.ssh01.service;

import com.kinsey.ssh01.dao.ITeamDao;
import com.kinsey.ssh01.model.Team;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
* Created with IntelliJ IDEA
* Created By Kinsey
* Date: 2016/8/26
* Time: 18:47
*/
@Service("teamService")
public class TeamService implements ITeamService {

private ITeamDao teamDaoImpl ;

public ITeamDao getTeamDaoImpl() {
return teamDaoImpl;
}
@Resource
public void setTeamDaoImpl(ITeamDao teamDaoImpl) {
this.teamDaoImpl = teamDaoImpl;
}

@Override
public List<Team> getAllTeam() {
return teamDaoImpl.list("from Team");
}
}


15、创建对应的要显示的jsp文件

<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2016/8/26
Time: 16:39
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>group</title>
</head>
<body>
<s:iterator value="#gl">
${id}------${name}---<br/>
</s:iterator>
</body>
</html>


16、请求路径:

http://localhost:8080/ssh/team_list.action

17、请求效果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  SSH