[JAVA foundation] struts-spring-hibernate environment is simple to build

First, create a dynamic WEB project


Development tools: eclipse
Project structure: struts2+spring+hibernate
Database: mysql


1. Prepare related jar packages of Struts2

Download "struts-2-xxx-all" from the official website of struts. After decompressing, you can see several war files in its apps file. Find a war file and decompress it and find its lib file under WEB-INF. 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. Import struts2-spring-plugin-2.3.30.jar


struts2-spring-plugin-2.3.30.jar

Function: When this plug-in is introduced, the action class originally created by struts is handed over to spring for creation.
There is a struts-plugin.xml in struts2-spring-plugin.jar, which declares that the action class is created by the spring factory. This plugin overrides the struts object factory. When creating an action class, it matches the value of the id attribute in the spring configuration file according to the value of the class attribute of the struts configuration file. If it does not match, it will be created as before this plugin is not used, and then it will be autowired by spring.

3. Import the related jar package of spring

Related links: Download the spring related jar package from the spring official website

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. Import the related jar package of "Hibernate".

Import " hibernate3.jar "
into the lib file and import all the jars under "required". 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 import jap related jars. hibernate-jpa-2.0-api-1.0.1.Final.jar











5. Import other necessary packages:

Import log4j.jar
Import commons-logging, commons-dbcp, commons-pool, commons-fileupload, commons-io
Import database driver package
Import junit package

6. The final jar package required is as follows:


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. Import the log4j.properties file corresponding to log4j.
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. Create the jdbc.properties property file
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/test
jdbc.username=root
jdbc.password=root
9. Create beans.xml, the spring configuration file
<?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. Create struts.xml, struts configuration file.

<?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. Configure spring listeners and struts filters in web.xml

<?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. Create the corresponding 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. Create public dao and implementation classes



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

The corresponding implementation class:

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. Create the corresponding dao and implementation class

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

Implementation class:

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. Create the corresponding service and entity class
Entity class:

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 interface:

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 implements:

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. Create the corresponding jsp file to be displayed

<%--
  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. Request path:
http://localhost:8080/ssh/team_list.action
17. Request effect:
write picture description here

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325789844&siteId=291194637