这段时间学习如何使用Maven+Struts+Hibernate+Spring注解方式建立项目,在这里感谢孙宇老师。

    第一次写博客,主要是方便自己查看,同时分享给大家,希望对大家有所帮助,我也是刚入行的小菜鸟,可能有些地方不对,希望不对的地方,大家可以提出来,共同进步。

  项目使用的工具是eclipse,数据库使用的是mysql,项目主要是用注解方式实现三大框架的整合。

  首先使用maven建立项目,这里简单介绍一下。

  第一步:右击new->other->Maven Project,如下图:

  

  

    

    maven建立项目后,视图如下:这里只是简单介绍一下,具体使用maven建立项目过程,有需要的大家百度一下。

  

    第二步:Struts2配置

   (1)导入Struts2的核心jar,在pom.xml中配置如下:

    <!-- struts2 -->
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
            <version>2.3.4.1</version>
            <!-- Struts与Hibernate整合有冲突,同样的jar包
            <exclusions>
                <exclusion>
                    <groupId>javassist</groupId>
                    <artifactId>javassist</artifactId>
                </exclusion>
            </exclusions>
             -->
        </dependency>
        <!--  加入这个jar后,就可以在action类目上使用@Action,这样,项目启动的时候扫描到@Action

    就将Action类加入IOC容器,即action的创建交给了Spring-->
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-spring-plugin</artifactId>
            <version>2.3.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-convention-plugin</artifactId>
            <version>2.3.4.1</version>
        </dependency>

    (2)新建struts.xml文件,配置如下:

   <struts>
         <!-- 指定由spring负责action对象的创建 -->
        <constant name="struts.objectFactory" value="spring" />
        <!-- 所有匹配*.action的请求都由struts2处理 -->
        <constant name="struts.action.extension" value="action" />
        <!-- 是否启用开发模式 -->
        <constant name="struts.devMode" value="true" />
        <!-- struts配置文件改动后,是否重新加载 -->
        <constant name="struts.configuration.xml.reload" value="true" />
        <!-- 设置浏览器是否缓存静态内容 -->
        <constant name="struts.serve.static.browserCache" value="false" />
        <!-- 请求参数的编码方式 -->
        <constant name="struts.i18n.encoding" value="utf-8" />
        <!-- 每次HTTP请求系统都重新加载资源文件,有助于开发 -->
        <constant name="struts.i18n.reload" value="true" />
        <!-- 文件上传最大值 -->
        <constant name="struts.multipart.maxSize" value="104857600" />
        <!-- 让struts2支持动态方法调用 (重要)-->加入这个后,访问action的方式就变为 http://localhost:8080/项目名/命名空间/aciton名!方法名
        <constant name="struts.enable.DynamicMethodInvocation" value="true" />     
        <!-- Action名称中是否还是用斜线 -->
        <constant name="struts.enable.SlashesInActionNames" value="false" />
        <!-- 允许标签中使用表达式语法 -->
        <constant name="struts.tag.altSyntax" value="true" />
        <!-- 对于WebLogic,Orion,OC4J此属性应该设置成true -->
        <constant name="struts.dispatcher.parametersWorkaround" value="false" />
       <package name="basePackage" extends="struts-default">
       </package>
       </struts>

  (3)在web.xml中配置如下:

   <!-- 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>*.action</url-pattern>
    </filter-mapping>
     到此,Struts的配置已经完成了,接下来进行spring的配置。

   第三步:Spring的配置

  (1)导入Spring的核心jar,在pom.xml中配置如下:

  <!-- spring3 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>3.1.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>3.1.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>3.1.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>3.1.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>3.1.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>3.1.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>3.1.2.RELEASE</version>
        </dependency>

  (2)新建spring.xml文件,配置如下:

   <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
   ">
      <!-- 引入属性文件 -->这个配置文件主要存放数据库的一些参数信息,在使用hibernate的时候才需要加入。
      <context:property-placeholder location="classpath:config.properties" />
      <!-- 自动扫描dao和service包(自动注入) -->
      <context:component-scan base-package="sy.dao,sy.service" />
   </beans>

  (3)在web.xml下的配置如下:

   <!-- spring配置文件位置 --> classpath:spring-hibernate.xml  在使用hibernate的时候才需要加入。
      <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring.xml,classpath:spring-hibernate.xml</param-value>
      </context-param>
    <!-- spring监听器 -->
      <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>

  第三步:Hibernate配置

   (1)导入Hibernate的核心jar,在pom.xml中配置如下:

    <!-- hibernate4 -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.1.7.Final</version>
        </dependency>
        <!-- mysql驱动包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.21</version>
         </dependency>
         <dependency>
            <groupId>c3p0</groupId>
                <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
         </dependency>

   (2)新建spring-hibernate.xml文件,配置如下:

    <!-- 配置数据源 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="jdbcUrl" value="${jdbc_url}"></property>
        <property name="driverClass" value="${driverClassName}"></property>
        <property name="user" value="${jdbc_username}"></property>
        <property name="password" value="${jdbc_password}"></property>
        <property name="initialPoolSize" value="3"></property>
        <property name="maxPoolSize" value="6"></property>
    </bean>

<!-- 配置hibernate 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>
        <!-- 自动扫描注解方式配置的hibernate类文件 -->
        <property name="packagesToScan">
            <list>
                <value>sy.model</value>
            </list>
        </property>
  <!-- 配置事务管理器 -->
    <bean name="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
    <!-- 注解方式配置事物 -->
    <tx:annotation-driven transaction-manager="transactionManager" />加入这段配置后,在需要使用事务的的类上或者方法上(service)加入@Transactional,就可以实现事务

  (3)在web.xml中的加入openSessionInView配置 ,不然项目启动时候会报org.hibernate.HibernateException: No Session found for current thread的错误:

  <!-- openSessionInView配置 -->
    <filter>
        <filter-name>openSessionInViewFilter</filter-name>
        <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
        <init-param>
            <param-name>singleSession</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>

  <filter-mapping>
        <filter-name>openSessionInViewFilter</filter-name>
        <url-pattern>*.action</url-pattern>
    </filter-mapping>

   第四步:新建config.properties配置文件,内容如下:

  hibernate.dialect=org.hibernate.dialect.MySQLDialect
  driverClassName=com.mysql.jdbc.Driver
  jdbc_url=jdbc:mysql://localhost:3306/day18
  jdbc_username=root
  jdbc_password=root
  hibernate.hbm2ddl.auto=update
  hibernate.show_sql=true
  hibernate.format_sql=true

  至此,所有的配置都完成了,接下来在dao,service,action,model层中写相关的代码。

  第一步:model层新建类:

  @Entity
  @Table(name="TUSER")
  public class Tuser {
    
       private int id;
    
      private String name;
    
      private String pwd;

  @Id
      @Column(name="ID")
      @GeneratedValue(generator = "paymentableGenerator")     
      @GenericGenerator(name = "paymentableGenerator", strategy = "native")   
      public int getId() {
          return id;
      }

  public void setId(int id) {
          this.id = id;
      }
      @Column(name = "NAME",length = 100)
      public String getName() {
          return name;
      }

   public void setName(String name) {
          this.name = name;
      }
      @Column(name = "PWD",length = 32)
      public String getPwd() {
          return pwd;
      }

   public void setPwd(String pwd) {
          this.pwd = pwd;
      }
  }

  第二步:dao层新建接口类以及实现类:

  实现层代码如下:

  @Repository("userDao")
  public class UserDao implements IUserDao {

   @Autowired
      private SessionFactory sessionFactory;
    
      public void save(Tuser tuser) {
        
         sessionFactory.getCurrentSession().save(tuser);    
      }
  }

  第三步:service层新建接口类以及实现类:

  @Service("userService")
  @Transactional
  public class UserService implements IUserService {
    
      @Autowired
      private IUserDao userDao;
      public void save(Tuser tuser) {
          userDao.save(tuser);    
      }
  }

  第四步:action层新建类:

   @Namespace("/")
    @Action(
          value="userAction",
          results={
          @Result(name="add",location="/Index.jsp")
        })
  public class UserAction {
      @Autowired
      private IUserService userService;
      public String save(){
          Tuser tuser=new Tuser();
        
          tuser.setName("xxx");
        
          tuser.setPwd("1234");
        
          userService.save(tuser);
        
          return "add";
      }
  }

 到此,项目搭建就完成了,希望有错误的地方大家多多包涵。

  

  

     

Maven+Struts+Hibernate+Spring简单项目搭建的更多相关文章

  1. Spring boot项目搭建及简单实例

    Spring boot项目搭建 Spring Boot 概述 Build Anything with Spring Boot:Spring Boot is the starting point for ...

  2. 最新版ssh hibernate spring struts2环境搭建

    最新版ssh hibernate spring struts2环境搭建 最新版spring Framework下载地址:spring4.0.0RELEASE环境搭建 http://repo.sprin ...

  3. 三大框架:Struts+Hibernate+Spring

    三大框架:Struts+Hibernate+Spring Java三大框架主要用来做WEN应用. Struts主要负责表示层的显示 Spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作 ...

  4. Spring Boot项目搭建

    1.Spring Boot概述 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人 ...

  5. 详谈Struts+Hibernate+Spring三大框架

    前言:对于JAVA WEB端的程序员来说,对JAVA三大框架:Struts+Hibernate+Spring的了解必不可缺,下面详细谈谈 Java三大框架主要用来做WEN应用. 三大框架:Struts ...

  6. Struts+Hibernate+Spring面试题合集及答案

    Struts+Hibernate+Spring面试题合集及答案 Struts+Hibernate+Spring面试题合集 1 1. Hibernate部分 2 1.1. Hibernate工作原理 2 ...

  7. Struts+Hibernate+Spring面试题合集及答案(转)

    Struts+Hibernate+Spring面试题合集及答案 Struts+Hibernate+Spring 面试题合集 1 1. Hibernate部分 2 1.1. Hibernate工作原理 ...

  8. Spring MVC 项目搭建 -3- 快速 添加 spring security

    Spring MVC 项目搭建 -3- 快速 添加 spring security 1.添加 spring-sample-security.xml <!-- 简单的安全检验实现 --> & ...

  9. Spring MVC 项目搭建 -1- 创建项目

    Spring MVC 项目搭建 -1- 创建项目 1.创建 Dynamic Web project (SpringDemo),添加相关jar包 2.创建一个简单的controller类 package ...

随机推荐

  1. JZOJ.5235【NOIP2017模拟8.7】好的排列

    Description 对于一个1->n的排列 ,定义A中的一个位置i是好的,当且仅当Ai-1>Ai 或者Ai+1>Ai.对于一个排列A,假如有不少于k个位置是好的,那么称A是一个好 ...

  2. 【BZOJ4627】[BeiJing2016]回转寿司 SBT

    [BZOJ4627][BeiJing2016]回转寿司 Description 酷爱日料的小Z经常光顾学校东门外的回转寿司店.在这里,一盘盘寿司通过传送带依次呈现在小Z眼前.不同的寿司带给小Z的味觉感 ...

  3. 【BZOJ2055】80人环游世界 有上下界费用流

    [BZOJ2055]80人环游世界 Description     想必大家都看过成龙大哥的<80天环游世界>,里面的紧张刺激的打斗场面一定给你留下了深刻的印象.现在就有这么     一个 ...

  4. jQuery Validation Engine 表单验证,自定义规则验证方法

    jQuery Validation Engine 表单验证说明文档http://code.ciaoca.com/jquery/validation-engine/ js加到jquery.validat ...

  5. Java基础语法 - 面向对象 - 类的主方法main方法

    主方法是类的入口点,它指定了程序从何处开始,提供对程序流向的控制.Java编译器通过主方法来执行程序. 主方法的语法如下: /* a.主方法是静态的,如果要直接在主方法中调用其它方法,则该方法必须也是 ...

  6. Oracle数据库命令行下数据的导入导出

    //设置导入导出字符集,导入导出都要设置一下 export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK //导出 exp system/oracle@orcl file=/u ...

  7. Shell下syntax error: operand expected (error token is “-”)

    在这个监控实时网口速率的脚本中,第21,22行存在错误: #!/bin/bash #Modified by lifei4@datangmobile.cn echo ===DTmobile NetSpe ...

  8. HTTP场景应用

    一.HTTP缓存控制小结 http://imweb.io/topic/5795dcb6fb312541492eda8c 二.透过浏览器看HTTP缓存 http://www.cnblogs.com/sk ...

  9. Keras之函数式(Functional)模型

    函数式(Functional)模型 我们起初将Functional一词译作泛型,想要表达该类模型能够表达任意张量映射的含义,但表达的不是很精确,在Keras2里我们将这个词改移为“函数式”,函数式模型 ...

  10. xxxservlet继承HttpServlet类

    "HttpServlet类被定义为抽象类,但是源码里面没有抽象方法.所以没有一定要求实现的方法.之所以定义为抽象类,是因为他继承了GenericServlet这个抽象类.并没有全部实现里面的 ...