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

一、创建动态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、请求效果:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值