在Maven中整合Spring MVC与Hibernate笔记

第一次发帖:请大家见谅。

在Maven环境下搭建SpringMVC,比较快速,直接在项目上右击找到MyEclipse然后选择Add Spring Capabilities就好了,但是在整合Hibernate时,使用同样的方法添加Hibernate Capabilities时就会出现jar包的冲突,缺少等各种问题。最后选择自己挨个添加jar包的方法。进行整合。虽然也出现了jar包缺少等问题。但是相对来说,Maven中自动添加的jar少,在排除问题时就比较容易了。
环境介绍:
     MyEclipse10.0、Spring 3.0.5.RELEASE、Hibernate3.6.6。
jar包截图:[img]

[/img]
     目录结构:[img]

[/img]  
简短介绍:
     在浏览器地址栏输入:localhost/login。然后会进入controller目录下的Welcome 中。Welcome中实现了ItemService的注入,ItemService实现了ItemDao的注入。ItemDao实现了和持久层对象Item的绑定。在每一层都输出了一句话。最后实验,web程序可以正常运行。
第一一步:pom.xml
     <project xmlns= "http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation= "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion >4.0.0 </modelVersion>
  <groupId >com.hello.login </groupId>
  <artifactId >login- maven</ artifactId>
  <packaging >war </packaging>
  <version >0.0.1-SNAPSHOT </version>
  <name >login- maven Maven Webapp</name >
  <url >http://maven.apache.org </url>
  <dependencies >
    <dependency >
      <groupId >junit</groupId>
      <artifactId >junit</artifactId>
      <version >3.8.1 </version>
      <scope >test </scope>
    </dependency >   //这个是测试
    <dependency >
     <groupId >org.springframework </groupId>
     <artifactId >spring-beans </artifactId>
     <version >3.0.5.RELEASE </version>
    </dependency >
    <dependency >
     <groupId >org.springframework </groupId>
     <artifactId >spring-context </artifactId>
     <version >3.0.5.RELEASE </version>
    </dependency >
    <dependency >
     <groupId >org.springframework </groupId>
     <artifactId >spring- webmvc</ artifactId>
     <version >3.0.5.RELEASE </version>
    </dependency >
    <dependency >
     <groupId >org.springframework </groupId>
     <artifactId >spring- tx</ artifactId>
     <version >3.0.5.RELEASE </version>
    </dependency >
    <dependency >
     <groupId >org.springframework </groupId>
     <artifactId >spring- jdbc</ artifactId>
     <version >3.0.5.RELEASE </version>
    </dependency >
    <dependency >
     <groupId >org.springframework </groupId>
     <artifactId >spring- orm</ artifactId>
     <version >3.0.5.RELEASE </version>
    </dependency > //全是Spring的包
    <dependency >
           <groupId> log4j</ groupId>
           <artifactId> log4j</ artifactId>
           <version> 1.2.14</ version>
     </dependency >//Spring对这个jar包有依赖
     <dependency >
           <groupId> org.json</ groupId>
           <artifactId> json</artifactId >
           <version> 20090211</ version>
     </dependency > <dependency >
           <groupId> net.sf.json-lib </groupId>
           <artifactId> json-lib</artifactId>
           <version> 2.4</ version>
           <classifier> jdk15</ classifier>
     </dependency > <dependency >
               <groupId> org.hibernate</groupId >
               <artifactId> hibernate-core </artifactId>
               <version> 3.6.6.Final</version >
     </dependency> <dependency >
           <groupId> org.hibernate</groupId >
           <artifactId> hibernate-commons-annotations </artifactId>
           <version> 3.2.0.Final</version >
           <exclusions>
               <exclusion>
                    <groupId> org.slf4j</groupId >
                    <artifactId> slf4j-api</artifactId >
               </exclusion>
           </exclusions>
     </dependency > <dependency >
           <groupId> org.slf4j</groupId >
           <artifactId> slf4j-log4j12</artifactId >
           <version> 1.6.1</ version>
     </dependency >  <dependency >
           <groupId> org.hibernate</groupId >
           <artifactId> shards</artifactId >
           <version> 3.0.0B2</ version>
     </dependency >  <dependency >
           <groupId> org.javassist</groupId >
           <artifactId> javassist</artifactId >
           <version> 3.16.1-GA</version >
     </dependency >
  </dependencies >
  <build >
    <finalName >login- maven</ finalName>
    <plugins >
     <plugin >
           <groupId> org.mortbay.jetty</groupId >//这个是对该web应用添加jetty插件,经过一些配置之后,该web应用就可以在jetty中运行了。
           <artifactId> maven-jetty-plugin</artifactId >
           <version> 6.1.26</ version>
           <configuration>
            <webAppConfig>
                 <defaultsDescriptor> src/main/resources/webdefault.xml </defaultsDescriptor>
            </webAppConfig>     //这个好像是jetty的标配,等着学习jetty相关的知识时注意下:Jetty根据webdefault.xml文件中的内容配置web应用的诸如JSP,默认的Servlet和Invoker.
            <contextPath> /</ contextPath>
          <connectors>
                 <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector" >
                       <port> 80</ port>   //这个就是配置jetty的端口了
                  </connector>
           </connectors>
          <scanIntervalSeconds> 0</ scanIntervalSeconds>  //配置这个貌似是让jetty隔一段时间自动的去扫描后面目录下的class文件。这样我们就可以不同经常停止服务器了。0是不扫描。
           <scanTargetPatterns>
                 <scanTargetPattern>
                 <directory> src/main/webapp</directory>
                 <includes>
                      <include> **/*.xml</include >
                       <include> **/*.properties</include >
                 </includes>
                </scanTargetPattern> //这个配置比较主要就是配置我们的扫描目录的。这个就是配置的我们的web应用的目录。
           </scanTargetPatterns>
          <systemProperties>
                <systemProperty>
                      <name> javax.xml.parsers.DocumentBuilderFactory </name>
                     <value> com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl  </value>
                </systemProperty>
                <systemProperty>
                     <name> javax.xml.parsers.SAXParserFactory </name>
                     <value> com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl </value>
                 </systemProperty>
                <systemProperty>
                      <name> javax.xml.transform.TransformerFactory </name>
                     <value> com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl </value>
                </systemProperty>
                <systemProperty>
                    <name> org.eclipse.jetty.util.URI.charset</name >
                     <value> UTF-8</ value>
                </systemProperty>
         </systemProperties>   </configuration>  </plugin>  </plugins >  </build > </project>


webdefault.xml就不贴了,网上有好多。然后就是web.xml
<?xml version= "1.0" encoding ="UTF-8"?>
<web-app xmlns= "http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
      version= "2.4">
  <display-name >Archetype Created Web Application</display-name>
  <welcome-file-list >
     <welcome-file >index.jsp </welcome-file>
  </welcome-file-list >  欢迎页
  <context-param >
           <param-name> log4jConfigLocation</param-name >
           <param-value> classpath:/log4j-debug.xml </param-value>
     </context-param >  log4j-debug.xml是log4j的配置文件,貌似是必需品。网上有好多,就不贴出来了
     <listener >
           <listener-class> org.springframework.web.util.Log4jConfigListener</listener-class >
     </listener > log4j:的配置文件和监听器,这个是spring 中需要的一个监听器,这个监听器要放在Spring监听器的前面。web.xml的启动顺序:context-param--->listener--->filter--->servlet;同级的话就是按照在配置文件中的配置顺序。
  <context-param >
     <param-name >contextConfigLocation </param-name>
     <param-value >classpath*:applicationContext.xml</param-value >
     </context-param > applicationContext这个是Spring的配置文件,这个里面记录着对hibernate的整合。
  <listener >
       < listener-class>org.springframework.web.context.ContextLoaderListener </listener-class>
  </listener >  Spring的启动监听器,要整合Hibernate就要配置这个。
  <servlet >
     <servlet-name >dispatcher </servlet-name>
       < servlet-class>org.springframework.web.servlet.DispatcherServlet </servlet-class>
     <load-on-startup >1 </load-on-startup>
  </servlet >
  <servlet-mapping >
     <servlet-name >dispatcher </servlet-name>
     <url-pattern >/ </url-pattern>
  </servlet-mapping >   这个就是我们SpringDispatcher的核心了。注意:<url-pattern>写的是/不是/*这是有原因的,具体看剪藏
</web-app>

applicationContext.xml

<?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:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
      xmlns:aop="http://www.springframework.org/schema/aop"  xmlns:util="http://www.springframework.org/schema/util"  xmlns:jee="http://www.springframework.org/schema/jee"  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/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
       http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd ">
     <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >
           <property name= "locations">
               <list>
                    <value> classpath:system.properties</value >
               </list>
           </property>
     </bean >  这个就是一读取外部文件的方式配置数据库了。
     <!--扫描service、dao层的注解并使之成为bean  -->
     <context:component-scan base-package= "com.hello" >
           <context:exclude-filter type= "annotation" expression="org.springframework.stereotype.Controller" />
     </context:component-scan >
          这个是读取注解的,很重要。开始时没有配置这个总是报错说找不到要注入的bean,最后比对了一个成功的项目才发现这个。采用注解的方式必须要配置这个。我们可以利用exclude-filter和include-filter来区分要扫面的bean。exclude是要排除的注解bean。include是要包含的注解bean

     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
           destroy-method="close" >     
           <property name= "driverClassName" value="${jdbc.driver}" />    
           <property name= "url" value ="${jdbc.url}" />    
     <property name="username" value= "${jdbc.username}" />    
     <property name="password" value= "${jdbc.password}" />
     <property name="timeBetweenEvictionRunsMillis" value="1800000" />
     <property name="minEvictableIdleTimeMillis" value="1800000" />
     </bean >
          数据库的配置bean
     <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" >
           <property name= "dataSource" ref ="dataSource" />
           <property name= "schemaUpdate" value ="true" />
           <property name= "packagesToScan">
               <list>
                    <value> com.hello.domain</value ><!-- 采用注解法实现实体与数据库的链接 -->
               </list>
           </property>   实体类我们采用的是注解的方式,这个扫描并成为实体类的目录。我们也可以直接指定实体类。
           <property name= "hibernateProperties">
               <props>
                    <prop key="hibernate.show_sql" >false </prop>
                    <prop key="hibernate.format_sql" >false </prop>
                    <prop key="hibernate.dialect" >org.hibernate.dialect.MySQL5Dialect </prop>
               </props>
           </property>
     </bean >
</beans> 这是sessionFactory Bean,Session是操作hibernate的入口类(门面模式)。这个是Hibernate与Spring整合的关键设置。

dispatch-servlet.xml就是最基本的配置。

猜你喜欢

转载自echoliang.iteye.com/blog/2194570