EasyPlay spring+SpringMVC+Hibernate框架搭建 二

来源:互联网 发布:淘宝上的石泽研究所 编辑:程序博客网 时间:2024/05/21 01:32
    导入所需要的jar包。可以通过我的百度云链接进行下载(要注意下载的版本的使用,不同版本的jar包导入也有可能导致项目框架搭建的失败。)
    百度云链接 http://pan.baidu.com/s/1pKCphXL
    百度云密码 1d21
    将所有jar包放在lib文件下面。
    接下来最重要的五个配置文件。
    最先配置数据库连接文件 十分简单 代码就不贴了 百度一下 一大把 (要注意的是自己数据库访问的url以及驱动加载)
    输入需要访问数据库的url以及数据库的登录名以及密码。然后在其他配置文件中获取该文件信息。
    配置log4j打印日志 这里也十分简单,原封不动的复制上去就可以了。(这个也百度一下吧。因为这里没有什么要改动的东西)
    该文件可用于在控制台打印基本信息。也可以将信息以文件的方式记载在电脑的某个位置
    1.springMVC-servlet文件
    
    //需要扫描的controller文件
    <context:component-scan base-package="main.java.com.yxr.controller"/>
    
    <mvc:annotation-driven />
    
    <mvc:default-servlet-handler/>
        //转向界面路径解析
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    
    <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 需要使用导出时进行的spring配置-->  
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
        <property name="defaultEncoding" value="utf-8" />  
        <!-- 指定所上传文件的总大小不能超过10485760000B。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 -->  
        <property name="maxUploadSize" value="10485760000" />  
        <property name="maxInMemorySize" value="40960" />  
    </bean>  

    2.application 文件的配置
    开启注解扫描
    <context:annotation-config />
    <!-- 设定Spring 去哪些包中找Annotation -->
    <context:component-scan base-package="main.java.com.yxr" />
    //暂且理解为找到jdbc的配置文件
    <bean id="propertyConfigurer"  
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
        <property name="location">  
        //明明我将文件放在src.main下面的config包文件下面,为什么寻找的路径却在这里 是因为项目编译之后会在web-inf下面生成
            <value>/WEB-INF/classes/main/config/jdbc.properties</value>  
        </property>  
    </bean>  
    //这一块就是拿到jdbc文件中的一些信息
    <bean id="DataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <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>
    //这一块显而易见是 包所要扫描的基类
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="DataSource"/>
        <property name="packagesToScan">
            <list>
                <value>main.java.com.yxr.model</value>
            </list>
        </property>
        <property name="hibernateProperties">
                    //所使用的sql方言 以及设置是否显示sql语句
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                //这里是比较重要的地方 个人觉得 一共有四种取值 update 不改变表结构 validate 验证表结构  
                //create 创建表存在则删除再创建 这样一旦表中有数据则后果不堪设想  create-drop tomcat启动时创建 tomcate关闭时销毁
                //所以我在这里使用update
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.format_sql">false</prop>
            </props>
        </property>
    </bean>

    <!-- 开启HibernateTemplate,并且为其注入SessionFactory
    使用HibernateTemplate不太方便的就是要获取session得通过getSessionFactory()方法获取 -->
    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    <!-- 配置Spring的事务处理 -->
    <!-- 创建事务管理器-->
    <bean id="txManager"
        class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    
    <!-- 配置AOP,Spring是通过AOP来进行事务管理的 -->
    <aop:config>
    <!-- 设置pointCut表示哪些方法要加入事务处理 -->
    <!-- 以下的事务是声明在DAO中,但是通常都会在Service来处理多个业务对象逻辑的关系,注入删除,更新等,此时如果在执行了一个步骤之后抛出异常
        就会导致数据不完整,所以事务不应该在DAO层处理,而应该在service,这也就是Spring所提供的一个非常方便的工具,声明式事务 -->
        <aop:pointcut id="allMethods"
            expression="execution(* main.java.com.yxr.serviceImpl.*.*(..))" />
        <!-- 通过advisor来确定具体要加入事务控制的方法 -->
        <aop:advisor advice-ref="txAdvice" pointcut-ref="allMethods" />
    </aop:config>
        <!-- 配置哪些方法要加入事务控制 -->
    <tx:advice id="txAdvice" transaction-manager="txManager">
        <tx:attributes>
        <!-- 让所有的方法都加入事务管理,为了提高效率,可以把一些查询之类的方法设置为只读的事务 -->
            <tx:method name="*" propagation="REQUIRED" read-only="true"/>
            <!-- 以下方法都是可能设计修改的方法,就无法设置为只读 -->
            <tx:method name="add*" propagation="REQUIRED"/>
            <tx:method name="del*" propagation="REQUIRED"/>
            <tx:method name="update*" propagation="REQUIRED"/>
            <tx:method name="save*" propagation="REQUIRED"/>
        </tx:attributes>
    </tx:advice>

    3.下面还有最重要的一个配置就是web.xml文件的配置 (display-name以及welcome-file-list 一个是项目显示内容一个是加载的起始页 不细讲)

    <!-- 创建Spring的监听器 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>
    //项目完全启动之前打开的文件 加载xml文件
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/classes/main/config/application.xml</param-value>
    </context-param>

        //加载srpingMVC-servlet文件
    <servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <init-param>
          <param-name>contextConfigLocation</param-name>
           <param-value>/WEB-INF/classes/main/config/SpringMVC-servlet.xml</param-value>
          </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!-- Spring中提供了 org.springframework.orm.hibernate3.support.OpenSessionInViewFilter;
        这个类来实现OpenSessionInViewer的操作 -->
    <filter>
        <filter-name>openSessionInViewerFilter</filter-name>
        <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter
        </filter-class>

    </filter>
    <filter-mapping>
        <filter-name>openSessionInViewerFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <listener>
        <listener-class>
            org.springframework.web.context.request.RequestContextListener
        </listener-class>
    </listener>

  个人理解。之前的配置文件无论是怎样最后都回加载到web.xml文件中来,直接的或者是间接的。这样的话框架就已经搭建好了。启动tomcat不报错。算是初步
  成功。但是如果你之前没有搭建过。我敢保证一半的人会报各种不同错误。总而言之如果报错你就细细的研究你的路径是否配置正确。很多时候路径配置不正确
  框架就会报错。当然具体情况具体对待。虽然现在不报错。并不代表项目框架搭建就成功了。我将以一个简答的登录来测试一下。

 首先在数据库中创建一个数据库。然后创建一张用于临时测试的用户表
 -- 以后该项目所需要使用的数据库
 create database EasyPlay;
 -- 使用该数据库
 use EasyPlay;
 -- 创建一张用户表
 create table user_t(id int auto_increment, loginName char(8), password char(8), primary key(id));

 在myEclipse中 创建用户类 这里大家也可以不在数据库中间表。将上面提到的update换成create试试。你会发现。它通过注解自动生成了一张表。
 亲测 一样的效果
 user.java
 @Id
 @GeneratedValue(strategy = GenerationType.AUTO)
 @Column(name = "id")
 private int id;
    
 @Column(name = "loginName", length = 8)
 private String loginName;
    
 @Column(name = "password", length = 8)
 private String password;

 下面是get set 方法 就不一一展示了。

 接下来 我再写个controller文件验证一下 控制层是否起作用。
 按道理应该从controller一直到dao层一连串的实现登录功能。但是 后期我会首先编写baseDao文件简化数据库操作。所以此处只验证controller层
 。如果后期报出问题再修改配置。
 下面给出 java文件 以及 jsp文件
  @Controller
  @RequestMapping("/user")
    public class UserController {

    @SuppressWarnings("unused")
    @RequestMapping("/userLogin.do")
    private void userLogin(@RequestParam(name = "loginName", defaultValue = "", required = true) String loginName,
                           @RequestParam(name = "password", defaultValue = "", required = true) String password){
        String str;
        if (StringUtils.isEmpty(loginName) || StringUtils.isEmpty(password)) {
            str = "请将信息填写完整!";
        } else if (!loginName.equals("zs")) {
            str = "所填写的账号不存在!";
        } else if (!password.equals("111111")) {
            str = "密码填写错误!";
        } else {
            str = "登录成功!";
        }
        System.out.println(str);
    }
    }

    jsp文件
    <body>
    <form method="post" action="user/userLogin.do">
        账号:<input type="text" name="loginName"/><br/><br/>
        密码:<input type="password" name="password"/><br/><br/>
        <input type="submit" value="提交"/>&nbsp;&nbsp;&nbsp;
        <input type="reset" value="重置"/>
    </form>
  </body>

  亲测,运行成功。

 下面是运行出来的截图偶!

  


  顺便,我将自己现有的jquery插件什么的也放入项目中,同时我将其放在百度云中供各位下载使用。
  百度云链接 http://pan.baidu.com/s/1pKCphXL
  百度云密码 1d21
  只做交流学习使用。将其放置在jquery文件夹下面。
  可能你会发下报错。不用紧张只需要百度一下如何跳过验证就可以。反正我是这么处理的,对于后期的使用暂时没发现有什么影响。如果有更好的方法
  可以留言评论。找到错误文件 右键选择myeclipse 然后选择 exclude from validation 从验证中排除。至于如何使用以后再介绍。