eclipse-搭建maven的war項目集合spring註解方式
工具: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註解方式