使用Eclipse構(gòu)建Maven的SpringMVC項(xiàng)目
首先Eclipse需要安裝Maven的插件,地址:http://m2eclipse.sonatype.org/sites/m2e。
用MyEclipse安裝Maven插件,建出的Maven項(xiàng)目有些問(wèn)題。一是,發(fā)布tomcat的時(shí)候resources總是不會(huì)被發(fā)布到tomcat下;二是,把WEB-INF下的classes改到target下的classes,但是不知道為什么MyEclipse要么仍然在WEB-INF下生成class。要么真不在WEB-INF生成classes了但是發(fā)布tomcat的時(shí)候,class文件一個(gè)都不會(huì)給你發(fā)布過(guò)去,超級(jí)郁悶。但是使用Eclipse構(gòu)建Maven項(xiàng)目后,使用MyEclipse打開就沒問(wèn)題了。
用maven的好處:我感覺最主要就是自動(dòng)下載jar包和它所依賴的包,這樣可以保證了多人開發(fā)時(shí)jar版本不同的問(wèn)題。再就是文件結(jié)構(gòu)清晰,java文件,資源文件,測(cè)試文件都分的很清楚。
將介紹兩種方法:一,直接建立Maven項(xiàng)目方法;二、建立Dynamic Web project轉(zhuǎn)成Maven項(xiàng)目方法。
一、直接建立Maven項(xiàng)目方法
1、建立Maven項(xiàng)目
接下來(lái)使用Eclipse的maven構(gòu)建一個(gè)web項(xiàng)目,以構(gòu)建SpringMVC項(xiàng)目為例:
1.1 選擇建立Maven Project
選擇File -> New -> Other,在New窗口中選擇 Maven -> Maven Project。點(diǎn)擊newxt。

1.2 選擇項(xiàng)目路徑
Use default Workspace location默認(rèn)工作空間。

1.3 選擇項(xiàng)目類型
在Artifact Id中選擇maven-archetype-webapp

1.4 輸入Group ID和 Artifact ID,以及Package
Group ID一般寫大項(xiàng)目名稱。Artifact ID是子項(xiàng)目名稱。
例如Spring的web包,Group ID:org.springframework,artifactId:spring-web。
Package是默認(rèn)給你建一個(gè)包,不寫也可以。

1.5 剛建立好后的文件結(jié)構(gòu)如下圖

如果這里顯示的內(nèi)容多,一般是Filters設(shè)置的問(wèn)題。或perspective為JavaEE模式,改成Java模式就可以了。
2、配置Maven項(xiàng)目
接下來(lái)就需要更改好多配置了。
2.1 添加Source文件夾
接下來(lái)需要添加src/main/java,src/test/java ,src/test/resources三個(gè)文件夾。右鍵項(xiàng)目根目錄點(diǎn)擊New -> Source Folder,
建出這三個(gè)文件夾。注意不是建普通的Folder,而是Source Folder。


2.2 更改class路徑
右鍵項(xiàng)目,Java Build Path -> Source
下面應(yīng)該有4個(gè)文件夾。src/main/java,src/main/resources,src/test/java ,src/test/resources。
雙擊每個(gè)文件夾的Output folder,選擇路徑。
src/main/java,src/main/resources,選擇target/classes;
src/test/java ,src/test/resources, 選擇target/test-classes;
選上Allow output folders for source folders.
在此處還要更改:
更改文件夾顯示的順序:點(diǎn)擊Order and Export。
更改JDK版本:在Libraries雙擊JRE System Library,要1.6版本。

2.3 把項(xiàng)目變成Dynamic Web項(xiàng)目
2.3.1 右鍵項(xiàng)目,選擇Project Facets,點(diǎn)擊Convert to faceted from

2.3.2 配置Project Facets
更改Dynamic Web Module的Version為2.5。(3.0為Java7的)。
如果提示錯(cuò)誤,可能需要在Java Compiler設(shè)置Compiler compliance level 為1.6。或者需要在此窗口的Java的Version改成1.6。

2.3.3 配置 Modify Faceted Project
點(diǎn)擊Further configuration available…,彈出Modify Faceted Project窗口
此處是設(shè)置web.xml文件的路徑,我們輸入src/main/webapp。
Generate web.xml deployment descriptor自動(dòng)生成web.xml文件,可選可不選。
2.4 設(shè)置部署程序集(Web Deployment Assembly)
上面步驟設(shè)置完成后,點(diǎn)擊OK,Properties窗口會(huì)關(guān)閉,在右鍵項(xiàng)目打開此窗口。在左側(cè)列表中會(huì)出現(xiàn)一個(gè)Deployment Assembly,點(diǎn)擊進(jìn)去后,如下圖:

此處列表是,部署項(xiàng)目時(shí),文件發(fā)布的路徑。
1,我們刪除test的兩項(xiàng),因?yàn)閠est是測(cè)試使用,并不需要部署。
2,設(shè)置將Maven的jar包發(fā)布到lib下。
Add -> Java Build Path Entries -> Maven Dependencies -> Finish
設(shè)置完成效果圖

3、向maven項(xiàng)目中添加jar包
maven可以管理項(xiàng)目依賴的jar包,通過(guò)groupID、artifactId以及版本號(hào)可以唯一確定一個(gè)jar包。這樣可以防止老式Web項(xiàng)目中WEB-INF/lib下jar包不一致的問(wèn)題。并且maven還會(huì)自動(dòng)下載添加進(jìn)的jar包所依賴的jar包。
3.1 在pom.xml中添加所需要的jar包
使用Maven POM editor打開項(xiàng)目中的pom.xml文件,選擇Dependencies,在Dependencies欄目點(diǎn)擊Add進(jìn)行,首先彈出一個(gè)搜索按鈕,例如輸入spring-web,就會(huì)自動(dòng)搜索關(guān)于spring-web相關(guān)的jar包,我們選擇3.0.5版本的spring。將spring包全部添加進(jìn)來(lái)。需要添加的其他jar包有:junit、jstl。或者點(diǎn)擊pom.xml直接編輯pom.xml文件。這樣可以直接copy過(guò)來(lái)dependencies內(nèi)容。

3.2設(shè)置jar包的scope

當(dāng)添加進(jìn)入一個(gè)jar包后,有一些屬性需要設(shè)置,最重要的就是scope,它有以下幾種取值:
1. compile,缺省值,適用于所有階段,會(huì)隨著項(xiàng)目一起發(fā)布。
2. provided,類似compile,期望JDK、容器或使用者會(huì)提供這個(gè)依賴。如servlet.jar。
3. runtime,只在運(yùn)行時(shí)使用,如JDBC驅(qū)動(dòng),適用運(yùn)行和測(cè)試階段。
4. test,只在測(cè)試時(shí)使用,用于編譯和運(yùn)行測(cè)試代碼。不會(huì)隨項(xiàng)目發(fā)布。
5. system,類似provided,需要顯式提供包含依賴的jar,Maven不會(huì)在 Repository中查找它。
通常SpringMVC項(xiàng)目所需要配置scope的jar包如下圖:

有的時(shí)候發(fā)現(xiàn)servlet-api還是被打包到lib下面了,此時(shí)肯定會(huì)報(bào)錯(cuò)。就需要把maven插件中的WTP也安裝一下。
Eclipse在線安裝路徑:http://m2eclipse.sonatype.org/sites/m2e-extras。選擇for Eclipse WTP。

4、構(gòu)建SpringMVC框架
4.1 編輯web.xml文件
需要添加log4j,字符過(guò)濾,Spring 的dispatcher等。
webx.xml代碼如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
- version="2.5" >
-
- <!-- 區(qū)分項(xiàng)目名稱,防止默認(rèn)重名 -->
- <context-param>
- <param-name>webAppRootKey</param-name>
- <param-value>maven.example.root</param-value>
- </context-param>
-
- <!-- Spring的log4j監(jiān)聽器 -->
- <listener>
- <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
- </listener>
-
- <!-- 字符集 過(guò)濾器 -->
- <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>
-
- <!-- Spring view分發(fā)器 -->
- <servlet>
- <servlet-name>dispatcher</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <init-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>dispatcher</servlet-name>
- <url-pattern>*.do</url-pattern>
- </servlet-mapping>
-
- </web-app>
4.2 編寫Spring配置文件dispatcher-servlet.xml
如要添加MVC驅(qū)動(dòng)、注解檢測(cè)、視圖解析等。dispatcher-servlet.xml代碼如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:mvc="http://www.springframework.org/schema/mvc"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/aop
- http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
- http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-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/mvc
- http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
- http://www.springframework.org/schema/tx
- http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
-
- <mvc:annotation-driven />
- <context:component-scan base-package="liming.maven.example" />
-
- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <property name="prefix" value="/WEB-INF/views/" />
- <property name="suffix" value=".jsp" />
- </bean>
-
- </beans>
4.3 編寫一個(gè)Controller層測(cè)試類
編寫一個(gè)SpringMVC的Controller層測(cè)試類。此類只有一個(gè)方法做地址映射,并向頁(yè)面?zhèn)鬟f一個(gè)數(shù)據(jù)。代碼如下:
- package liming.maven.example.view;
-
- import org.springframework.stereotype.Controller;
- import org.springframework.ui.Model;
- import org.springframework.web.bind.annotation.RequestMapping;
-
- @Controller
- public class GeneralController {
-
- @RequestMapping(value="index.do")
- public void index_jsp(Model model){
- model.addAttribute("liming", "黎明你好");
- System.out.println("index.jsp");
- }
- }
4.4 編寫index.jsp頁(yè)面
首先在src/main/webapp/WEB-INF下建文件夾views。此處和dispatcher-servlet.xml配置文件中的prefix屬性路徑要一樣。
在views下建index.jsp文件
我們使用jstl獲取Controlleradd的數(shù)據(jù)。
Jsp頁(yè)面代碼如下:
- <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
- <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>Insert title here</title>
- </head>
-
- <body>
- <c:out value="${liming}"></c:out>
- </body>
- </html>
5,發(fā)布到tomcat
這個(gè)就沒啥說(shuō)的了。
Eclipse下Tomcat常用設(shè)置:http://limingnihao.iteye.com/admin/blogs/825394
6,測(cè)試
訪問(wèn)地址:http://localhost:8080/liming.maven.example/index.do
訪問(wèn)的結(jié)果來(lái)個(gè)截圖:

二、建立Dynamic Web project轉(zhuǎn)成Maven項(xiàng)目方法
7、第二種方法DynamicWeb項(xiàng)目轉(zhuǎn)成Mavan
7.1 新建Dynamic Web Project
依次選擇選擇File -> New -> Other。在New窗口中選擇Web下的Dynamic Web Project。點(diǎn)擊next。

7.2 配置項(xiàng)目信息
7.2.1 輸入項(xiàng)目信息
首先輸入項(xiàng)目名稱。
Target runtime 一般選擇使用什么容器,tomcat之類的。可以先不選。
Dynamic web module version。就是版本號(hào)。選擇2.5(3.0是Java7的)。
Configuration 是選擇容易的配置。如果Target runtime選擇了tomcat。這里對(duì)應(yīng)也是選擇tomcat。
Next。

7.2.2 配置source和output的folder
此窗口輸入需要建立的Source folders。和默認(rèn)output folder。
這個(gè)我們的Source folders等建立完項(xiàng)目后在添加。
output folder可以順手改成target/classes。

7.2.3 配置web.xml文件的路徑

7.3 轉(zhuǎn)成maven項(xiàng)目
Dynamic web項(xiàng)目建立完后,首先將其轉(zhuǎn)成maven項(xiàng)目。
右鍵此項(xiàng)目,選擇maven -> Enable Dependency Management。彈出的窗口,直接finish就可以了。

7.4 其他配置
接下來(lái)的配置工作就和前面的基本一樣了。
請(qǐng)參考上面。
2.1添加Source文件夾
2.2更改class路徑。
2.3.3 配置 Modify Faceted Project
2.4 設(shè)置部署程序集(Web Deployment Assembly)
接著就是構(gòu)建SpringMVC框架,發(fā)布到tomcat,測(cè)試。