1. 程式人生 > >eclipse-搭建maven的war項目集合spring註解方式

eclipse-搭建maven的war項目集合spring註解方式

eap 初始化 打印 owin artifact mapping line welcom b-

工具:eclipse 4.4.2 版本號:20150219-0600

jdk:1.7

技術分享

1.下圖創建maven工程,然後next

技術分享

下圖選擇工程保存位置(這裏選擇默認),next

技術分享

下圖選擇webapp項目(war包,mvaen默認選擇的quickstart一般為jar工程),next

技術分享

下圖,其中

group ID:一般設置起點報名,隨便定義

artifact ID:項目名稱

Version:版本號名稱

package:初始化類文件名稱

其他暫不填finish

技術分享

項目新建完成

結構

技術分享

2.接下來到需要的jar

jdk=修改成官方的1.7,finish

技術分享

技術分享

技術分享

還有

技術分享

解下來下面兩個版本號不太好改,直接在eclipse中改好像改 不了

技術分享

所以需要到項目下面去改文件

打開項目地址

例如:c:workspace\TestMaven\.settings\下面

找到文件org.eclipse.wst.common.project.facet.core.xml

原文件內容

技術分享
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
  <fixed facet="wst.jsdt.web"/>
  <installed facet="java" version="1.5"/>
  <installed facet="jst.web" version="2.3"/>
  <installed facet="wst.jsdt.web" version="1.0"/>
</faceted-project>
技術分享

修改其中的jst.web和java為對應的版本

技術分享
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
  <fixed facet="wst.jsdt.web"/>
  <installed facet="java" version="1.7"/>
  <installed facet="jst.web" version="3.0"/>
  <installed facet="wst.jsdt.web" version="1.0"/>
</faceted-project>
技術分享

保存

到這麽一個正常的maven web項目搭建好了

技術分享

3.接下來引入spring

在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</groupId>
    <artifactId>TestMaven</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>TestMaven Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <!-- 工具類 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.4</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>3.1</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3</version>
        </dependency>
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.8.0</version>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.5</version>
        </dependency>
        <!-- 框架類 -->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.20</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>3.2.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>3.2.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>3.2.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.7.4</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.2.2.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-c3p0</artifactId>
            <version>4.2.2.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-ehcache</artifactId>
            <version>4.2.2.Final</version>
        </dependency>
        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.0.7</version>
        </dependency>
        
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>3.2.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.6.1</version>
        </dependency>
        
        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
            <classifier>jdk15</classifier>
        </dependency>
        

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>
    <build>
        <finalName>TestMaven</finalName>
    </build>
</project>
技術分享

開始加入spring機制

首先在web.xml加載spring

技術分享
<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
    <display-name>Archetype Created Web Application</display-name>

    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>classpath:prop/log4j.properties</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath*:xml/spring-context.xml
        </param-value>
    </context-param>
    <!--spring監聽器的配置,用於在啟動Web容器時,自動裝配ApplicationContext的配置信息 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- spring mvc servlet -->
    <servlet>
        <servlet-name>spring-mvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath*:xml/spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring-mvc</servlet-name>
        <url-pattern>/web/*</url-pattern>
    </servlet-mapping>
    <!-- 配置session存在時間 -->
    <session-config>
        <session-timeout>60</session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>/index.jsp</welcome-file>
    </welcome-file-list>

</web-app>
技術分享

spring配置文件(這裏將配置文件設定到指定位置)

目錄結構

技術分享

其中,三個在web.xml中配置的基礎文件

log4j.properties(配置網上有詳細介紹)

技術分享
log4j.rootLogger=INFO,DAY_ROLLING_FILE,stdout
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#log4j.appender.stdout.layout.ConversionPattern=%-d{HH:mm:ss} %-5p [%c{1}] %M (line:%L) %m%n
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c:%L] - %m%n

log4j.logger.org.hibernate.type=INFO
log4j.logger.java.sql=DEBUG
log4j.logger.org.hibernate=ERROR
log4j.logger.org.springframework=ERROR
log4j.logger.net.sf=ERROR
log4j.logger.org.quartz=ERROR


########################
# Rolling File
########################
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.Threshold=DEBUG
log4j.appender.ROLLING_FILE.File=broker.log
log4j.appender.ROLLING_FILE.Append=true
log4j.appender.ROLLING_FILE.MaxFileSize=10240KB
log4j.appender.ROLLING_FILE.MaxBackupIndex=20
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[%d %t %c] %m%n

########################
# Daily Rolling File \u65E5\u5FD7\u8F93\u51FA\u5230\u6587\u4EF6\uFF0C${catalina.home}\u53EF\u4EE5\u7528\u5176\u4ED6\u8DEF\u5F84\u4EE3\u66FF
########################
log4j.appender.DAY_ROLLING_FILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DAY_ROLLING_FILE.File=${catalina.home}/logs/tsportal
#websphere 
##log4j.appender.DAY_ROLLING_FILE.File=${SERVER_LOG_ROOT}/logs/xbrl_bank
log4j.appender.DAY_ROLLING_FILE.DatePattern=‘_‘yyyy-MM-dd‘.log‘
log4j.appender.DAY_ROLLING_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.DAY_ROLLING_FILE.layout.ConversionPattern=%d{HH:mm:ss} %-5p [%C] (%F:%L) - %m%n
技術分享

spring-mvc.xml

技術分享
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:p="http://www.springframework.org/schema/p" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:util="http://www.springframework.org/schema/util" 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.2.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
    <context:component-scan base-package="com.*.web" />(http請求ctrl控制器,後面訪問後提ctrl用到)
    
    <!-- SpringMVC上傳文件時,需要配置MultipartResolver處理器 --> 
     <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="utf-8" />
           <!-- 
           <property name="maxUploadSize" value="10485760000" />
           <property name="maxInMemorySize" value="40960" />
            -->
     </bean>
    
    <!-- 配置action中返回的視圖配置 -->
    <bean
        class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <property name="suffix" value=".ftl"></property>
        <property name="viewClass"
            value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" />
        <property name="contentType" value="text/html;charset=utf-8" />
        <property name="requestContextAttribute" value="rc"/>
        <property name="exposeRequestAttributes" value="true" />
        <property name="exposeSessionAttributes" value="true" />
        <property name="exposeSpringMacroHelpers" value="true" />
    </bean>
    <bean id="freemarkerConfigurer"
        class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath">
            <value>/</value>
        </property>
        <property name="freemarkerSettings">  
            <props>  
                <prop key="defaultEncoding">UTF-8</prop>  
            </props>  
        </property>  
    </bean>
    
</beans>
技術分享

spring-context.xml

技術分享
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans default-autowire="byName" default-lazy-init="true">
    <import resource="spring-hibernate.xml"/> 
    <import resource="spring-component.xml"/> 
</beans>
技術分享

中期配置的文件有

spring-component.xml(配置交給spring管理的文件夾)

技術分享
<?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:task="http://www.springframework.org/schema/task"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
            http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">
    <context:component-scan base-package="com.test.*" />
    <task:annotation-driven />
</beans>
技術分享

spring-hibernate.xml

技術分享
<?xml version="1.0" encoding="UTF-8"?>

<beans default-autowire="byName"
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    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.2.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd 
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">
    <bean id="propertyConfigure" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:prop/jdbc.properties</value>
            </list>
        </property>
    </bean>
    
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="${hibernate.connection.driver_class}"/>
        <property name="jdbcUrl" value="${hibernate.connection.url}"/>
        <property name="user" value="${hibernate.connection.username}"/>
        <property name="password" value="${hibernate.connection.password}"/>
        <property name="minPoolSize" value="1"/>
        <!-- 達到最大連接數後可以增加的連接個數  -->
        <property name="acquireIncrement" value="2"/>
        <property name="maxPoolSize" value="3"/>
        <!-- 最大閑置時間 秒 -->
        <property name="maxIdleTime" value="600"/>
        <property name="maxStatements" value="100"/>
        <!-- 閑置的連接測試周期 秒 -->
        <property name="idleConnectionTestPeriod" value="1200"/>
    </bean>
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="packagesToScan" value="com.*.*.model" />(hibernate註解使用的存放model文件夾)
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <!--
                <prop key="hibernate.hbm2ddl.auto">true</prop> 
                <prop key="hibernate.hbm2ddl.auto">create</prop>
                  -->
                <prop key="hibernate.max_fetch_depth">1</prop>
                <prop key="hibernate.jdbc.fetch_size">50</prop>
                <prop key="hibernate.jdbc.batch_size">20</prop>
                <prop key="hibernate.jdbc.use_scrollable_resultset">false</prop>
                <prop key="hibernate.use_outer_join">true</prop>
                <prop key="hibernate.show_sql">false</prop>
                <prop key="current_session_context_class">thread</prop>  
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.cache.use_query_cache">true</prop>
                <prop key="hibernate.connection.pool_size">20</prop>
                <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>
                <prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</prop>
            </props>
        </property>
    </bean>
    
    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    
    <bean id="cacheManager"
        class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
        <property name="configLocation">
            <value>
                classpath:xml/ehcache.xml
            </value>
        </property>
    </bean>
    <!-- 聲明式事務管理begin -->
    <aop:config>         
        <aop:advisor pointcut="execution(* com.*.service.impl..*ServiceImpl.*(..))" advice-ref="txAdvice"/>
        <aop:advisor pointcut="execution(* com.*.*.service.impl..*ServiceImpl.*(..))" advice-ref="txAdvice"/>
    </aop:config>
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="find*" read-only="true"/>
            <tx:method name="get*" read-only="true"/>
            <tx:method name="load*" read-only="true"/>
            <tx:method name="query*" read-only="true"/>
            <tx:method name="*" rollback-for="Exception"/>
        </tx:attributes>
    </tx:advice>
    <!-- 聲明式事務管理end -->
</beans>
技術分享

其中文件

jdbc.properties

技術分享
#mysql
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.connection.url=jdbc:mysql://localhost:3306/數據庫名稱?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.username=root
hibernate.connection.password=數據庫密碼
 
技術分享

和ehcache.xml(緩存文件記錄)

技術分享
<ehcache>

    <!-- Sets the path to the directory where cache .data files are created.

             If the path is a Java System Property it is replaced by
             its value in the running VM.

             The following properties are translated:
             user.home - User‘s home directory
             user.dir - User‘s current working directory
             java.io.tmpdir - Default temp file path -->
    <diskStore path="user.dir"/>


    <!--Default Cache configuration. These will applied to caches programmatically created through
            the CacheManager.

            The following attributes are required:

            maxElementsInMemory            - Sets the maximum number of objects that will be created in memory
            eternal                        - Sets whether elements are eternal. If eternal,  timeouts are ignored and the
                                             element is never expired.
            overflowToDisk                 - Sets whether elements can overflow to disk when the in-memory cache
                                             has reached the maxInMemory limit.

            The following attributes are optional:
            timeToIdleSeconds              - Sets the time to idle for an element before it expires.
                                             i.e. The maximum amount of time between accesses before an element expires
                                             Is only used if the element is not eternal.
                                             Optional attribute. A value of 0 means that an Element can idle for infinity.
                                             The default value is 0.
            timeToLiveSeconds              - Sets the time to live for an element before it expires.
                                             i.e. The maximum time between creation time and when an element expires.
                                             Is only used if the element is not eternal.
                                             Optional attribute. A value of 0 means that and Element can live for infinity.
                                             The default value is 0.
            diskPersistent                 - Whether the disk store persists between restarts of the Virtual Machine.
                                             The default value is false.
            diskExpiryThreadIntervalSeconds- The number of seconds between runs of the disk expiry thread. The default value
                                             is 120 seconds.
            -->

    <defaultCache
            maxElementsInMemory="10000"
            eternal="false"
            overflowToDisk="false"
            timeToIdleSeconds="0"
            timeToLiveSeconds="0"/>

    <!-- security cache-->
    <cache name="userCache"
           maxElementsInMemory="10000"
           eternal="true"
           overflowToDisk="false"/>

    <!-- security cache-->
    <cache name="resourceCache"
           maxElementsInMemory="10000"
           eternal="true"
           overflowToDisk="false"/>
    <!-- dict cache-->
    <cache name="dictCache"
           maxElementsInMemory="10000"
           eternal="true"
           overflowToDisk="false"/>

    <!-- See http://ehcache.sourceforge.net/documentation/#mozTocId258426 for how to configure caching for your objects -->
</ehcache>
技術分享

新建測試類

技術分享

TestCtrl內容,其中包名在spring-mvc.xml中配置spring註入機制

技術分享
package com.test.web;

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;


@Controller
@RequestMapping("test")
public class TestCtrl {

    @RequestMapping("index")
    public void index(HttpServletRequest req, HttpServletResponse res){
        System.out.println("coming.....");
        try {
            res.getWriter().append("you request success.");
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }
    

}
技術分享

放入tomcat

技術分享

啟動

技術分享

網站訪問

http://localhost:8080/TestMaven/web/test/index

技術分享

後臺打印

技術分享

測試service是否有註入(service註入也需要提前將需要交個spring管理的報名通知給spring,想通知在spring-component中配置)

創建TestService

技術分享

TestService

package com.test.service;

public interface TestService {

}

TestServiceImpl

技術分享
package com.test.service.impl;

import org.springframework.stereotype.Service;

import com.test.service.TestService;

@Service("testService")
public class TestServiceImpl implements TestService {

}
技術分享

TestCtrl註入Service

技術分享
package com.test.web;

import java.io.IOException;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.test.service.TestService;


@Controller
@RequestMapping("test")
public class TestCtrl {
    @Resource
    private TestService testService;

    @RequestMapping("index")
    public void index(HttpServletRequest req, HttpServletResponse res){
        System.out.println("coming....."+testService);
        try {
            res.getWriter().append("you request success.");
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }
    

}
技術分享

重新啟動,訪問地址http://localhost:8080/TestMaven/web/test/index

後臺打印

技術分享

到此,整個項目基本完成

後期在對項目進行spring權限控制等,另開文章,盡請期待

eclipse-搭建maven的war項目集合spring註解方式