美文网首页
java基于maven的spring,springmvc和hib

java基于maven的spring,springmvc和hib

作者: winter_coder | 来源:发表于2018-01-30 15:58 被阅读0次

    通过这段时间对与java web的学习,对于java的一些产品和概念有了一些认识;结合多年从事php开发的经验,有所感悟。

    对于web开发而言,要做的事情就是那些个环节,php不同框架有不同的做法,java的ssh组合也有自己的一套标准做法。但万变不离其中,解决的是相同的问题。这样想其实java也不难,只是学习成本高点,开发周期长点,当然这是针对常规业务层面的应用而言;而对于更高端更专业的应用有待研究和学习。这事我初学java的肤浅认识,各位大神不要喷我哦。

    我想通过对java不同组件解决什么问题的角度总结一下java ssh开发的思路:

    Maven

    根据理解,maven的作用主要有:

    1. 帮你下载jar包
    2. 寻找依赖,帮你下载依赖 :下载的jar包也有他依赖的包,maven可以帮你自动识别且下载
    3. 热部署,热编译:可以实现向php等解释语言,不需重启服务,编译jar包,直接浏览器查看结果
    4. 当然还有项目管理等功能

    通过上边作用,觉得maven和php的composer类似。不过功能更多,更强大

    maven配置详解:
    http://blog.csdn.net/u013078295/article/details/72897851
    下边整理maven的配置文件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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">  
      
      <!-- 定义本项目的常规信息 -->    
      <modelVersion>4.0.0</modelVersion>
      <groupId>cn.demo</groupId>
      <artifactId>studyssh</artifactId>
      <packaging>war</packaging>
      <version>1.0-SNAPSHOT</version>
      <name>studyssh Maven Webapp</name>
      <url>http://maven.apache.org</url>
      
      <!-- 为pom定义一些常量,在pom中的其它地方可以直接引用 使用方式 如下 :${spring.version} -->  
      <properties>
        <!-- spring版本号 -->
        <spring.version>4.0.4.RELEASE</spring.version>
        <hibernate.version>5.1.0.Final</hibernate.version>
      </properties>
    
        <!-- 定义本项目的依赖关系 -->  
        <dependencies>  
            <!-- 每个dependency都对应这一个jar包 -->  
            <dependency>  
                <!--一般情况下,maven是通过groupId、artifactId、version这三个元素值(俗称坐标)来检索该构件, 然后引入你的工程。如果别人想引用你现在开发的这个项目(前提是已开发完毕并发布到了远程仓库),-->   
                <!--就需要在他的pom文件中新建一个dependency节点,将本项目的groupId、artifactId、version写入, maven就会把你上传的jar包下载到他的本地 -->  
                <groupId>junit</groupId>  
                <artifactId>junit</artifactId>  
                <version>4.12</version>  
      
                <!-- maven认为,程序对外部的依赖会随着程序的所处阶段和应用场景而变化,所以maven中的依赖关系有作用域(scope)的限制。 -->  
                <!--scope包含如下的取值:compile(编译范围)、provided(已提供范围)、runtime(运行时范围)、test(测试范围)、system(系统范围) -->  
                <scope>test</scope>  
      
                <!-- 设置指依赖是否可选,默认为false,即子项目默认都继承:为true,则子项目必需显示的引入,与dependencyManagement里定义的依赖类似  -->  
                <optional>false</optional>  
            </dependency>  
        </dependencies>  
        ...  
    </project>  
    

    下边列出一些常用的jar包:

            <!-- spring 相关jar包 -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>4.3.6.RELEASE</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
                <version>4.3.6.RELEASE</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
                <version>4.3.6.RELEASE</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>4.3.6.RELEASE</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>4.3.6.RELEASE</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>4.3.6.RELEASE</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-orm</artifactId>
                <version>4.3.6.RELEASE</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.data</groupId>
                <artifactId>spring-data-commons-core</artifactId>
                <version>1.4.1.RELEASE</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-expression</artifactId>
                <version>4.3.6.RELEASE</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>4.3.6.RELEASE</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>4.3.6.RELEASE</version>
            </dependency>
            
            <!-- hibernate需要的常用jar包 -->
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-core</artifactId>
                <version>4.2.4.Final</version>
            </dependency>
    
            <dependency>
              <groupId>c3p0</groupId>
              <artifactId>c3p0</artifactId>
              <version>0.9.1.2</version>
            </dependency>
    
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-ehcache</artifactId>
                <version>4.2.4.Final</version>
            </dependency>
    
            <dependency>
                <groupId>org.hibernate.javax.persistence</groupId>
                <artifactId>hibernate-jpa-2.0-api</artifactId>
                <version>1.0.1.Final</version>
            </dependency>
    
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-validator</artifactId>
                <version>5.2.4.Final</version>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.40</version>
            </dependency>
            
            <!-- 其他常用jar包 -->
            <dependency>
              <groupId>log4j</groupId>
              <artifactId>log4j</artifactId>
              <version>1.2.17</version>
              <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>taglibs</groupId>
                <artifactId>standard</artifactId>
                <version>1.1.2</version>
            </dependency>
            <dependency>
                <groupId>tomcat</groupId>
                <artifactId>servlet-api</artifactId>
                <version>5.5.23</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>tomcat</groupId>
                <artifactId>jsp-api</artifactId>
                <version>5.5.23</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>commons-fileupload</groupId>
                <artifactId>commons-fileupload</artifactId>
                <version>1.3.1</version>
            </dependency>
    

    Spring

    在spring4之后,spring配置的bean不是在xml文件中配置了,而是采用固定扫描annotation的类,根据对象的类型或者名字自动加载,但此前提是我们仍然要在配置文件中配置好这些类所在包的路径,spring的配置文件,resources/spring-service.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:context="http://www.springframework.org/schema/context"
           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">
    
            <!--扫描service包下所有使用注解的类型-->
            <context:component-scan base-package="com.shop.service"/>
            <!-- 扫描web相关的bean -->
            <context:component-scan base-package="com.shop.controller" />
    </beans>
    

    spring配置文件创建好后,需要再web.xml添加信息:

        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-*.xml</param-value>
            <!-- 或者xml文件一个个的列出来-->
            <param-value>classpath:spring-web.xml,classpath:spring-service.xml</param-value>
        </context-param>
    
        <!-- 监听器作用:启动Web容器时,自动装配ApplicationContext的配置信息 -->
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
    

    Spring MVC

    <?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:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
        http://www.springframework.org/schema/context  
        http://www.springframework.org/schema/context/spring-context-3.1.xsd
        http://www.springframework.org/schema/mvc  
        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
    
        <!-- 配置自动扫描的包 -->
        <context:component-scan base-package="com.shop" use-default-filters="false">
            <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
            <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
        </context:component-scan>
    
        <!-- 默认注解映射的支持 -->
        <mvc:annotation-driven/>
    
        <!-- 将在 SpringMVC 上下文中定义一个 – DefaultServletHttpRequestHandler,它会对进入 DispatcherServlet
               的 请求进行筛查,如果发现是没有经过映射的请求,就将该请求交由 WEB 应用服务器默认的 Servlet 处理,
               如果不是静态资源的请求,才由 DispatcherServlet继续处理 -->
        <mvc:default-servlet-handler/>
    
        <!-- 配置视图解析器 -->
        <!-- 对模型视图添加前后缀 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/jsp/"></property>
            <property name="suffix" value=".jsp"></property>
        </bean>
    
        <bean id="multipartResolver"
              class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <property name="defaultEncoding" value="utf-8"></property>
            <property name="maxUploadSize" value="10485760000"></property>
            <property name="maxInMemorySize" value="40960"></property>
        </bean>
    </beans>
    

    项目中web.xml文件也要做一些修改,添加下边信息:

        <servlet>
            <servlet-name>springMVC</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:spring-web.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>
    

    Hibernate

    hibernate的配置文件放在resources目录下边,xml名称的定义可以根据喜好等因素

    hibernate.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:context="http://www.springframework.org/schema/context"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
        http://www.springframework.org/schema/context  
        http://www.springframework.org/schema/context/spring-context-3.1.xsd  
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
    
        <!-- 配置数据库相关参数 -->
        <context:property-placeholder location="classpath:db.properties"/>
    
        <!-- 使用C3P0数据源,MySQL数据库 -->
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="user" value="${jdbc.user}"></property>
            <property name="password" value="${jdbc.password}"></property>
            <property name="driverClass" value="${jdbc.driverClass}"></property>
            <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
            <!-- 配置其他属性 -->
            <property name="maxPoolSize" value="40"></property>
            <property name="minPoolSize" value="1"></property>
            <property name="initialPoolSize" value="1"></property>
            <property name="maxIdleTime" value="20"></property>
        </bean>
    
        <!-- session工厂 -->
        <!-- spring与hibernate整合配置,扫描所有dao -->
        <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
            <!-- 注册上边datasource中的配置信息,为hibernate所用 -->
            <property name="dataSource" ref="dataSource" />
            <!-- 项目实体类所在目录说明 -->
            <property name="packagesToScan"  value="com.shop.model" />
            <!-- bibernate的一些配置 -->
            <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                    <prop key="hibernate.hbm2ddl.auto">update</prop>
                    <prop key="hibernate.show_sql">false</prop>
                    <prop key="hibernate.format_sql">true</prop>
                </props>
            </property>
        </bean>
    
        <!-- 配置事务管理器 -->
        <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory" />
        </bean>
    
        <!-- 开启注解事务-->
        <tx:annotation-driven transaction-manager="transactionManager"/>
    </beans>  
    

    上文中:<context:property-placeholder location="classpath:db.properties"/> 是引入外部配置文件,这里是当前目录下的db.properties文件:

    jdbc.user=root
    jdbc.password=
    jdbc.driverClass=com.mysql.jdbc.Driver
    jdbc.jdbcUrl=jdbc:mysql://localhost:3306/yshop?useUnicode=true&characterEncoding=UTF-8
    

    再web.xml文件中需要添加下列内容:

         <filter>
            <filter-name>hibernateFilter</filter-name>
            <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>hibernateFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        
        <!-- 配置字符过滤器 -->
        <filter>
            <filter-name>CharacterEncodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
            <init-param>
                <param-name>forceEncoding</param-name>
                <param-value>true</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>CharacterEncodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        
        <!-- 配置 org.springframework.web.filter.HiddenHttpMethodFilter,可以把POST请求转换为PUT或DELETE请求-->
        <filter>
            <filter-name>HiddenHttpMethodFilter</filter-name>
            <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>HiddenHttpMethodFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    

    相关文章

      网友评论

          本文标题:java基于maven的spring,springmvc和hib

          本文链接:https://www.haomeiwen.com/subject/zciqzxtx.html