Eclipse maven構建springmvc項目
一.背景介紹
對於初學者,用maven構建項目並不是一件容易的事,springmvc並不是MVC中的主流,但是本人覺得springmvc比struts要好用,真正做到了零配置。一次使用,就放不下了。
二.準備工作
1.Eclipse 3.7
2.maven
3.Eclipse 需要安裝maven插件。url:maven - https://download.eclipse.org/technology/m2e/releases 。安裝maven-3.0.4。並且選擇本地的maven,如下圖:
三.構建工程
1.用maven插件構建項目框架
maven具有強大構建功能,使用maven可以構建多種不同類型的工程。這裏我們構建maven-archetype-webapp類型的項目。在Eclipse->New中選擇other,找到maven Project型。如下圖:
在選完路徑之後,我們選擇構建類型,如下圖:
接下來,填寫工程的Group Id,Artifact Id,如下圖:
這裏的Group Id就是大項目的id,Arifact Id就是該項目的Id。就像一個大項目中有許多小項目組成一樣。此時,我們的項目已經成型了,樣子如下圖:
接下來,我們要完善項目的目錄,配置。
2.完善項目
首先,完善目錄,增加重要的source Folder,這個不是簡單的Floder,這些文件夾是會參與編譯的。增加src/main/java,src/test/resources,src/test/java目錄。讓目錄變成標準的maven結構。如下圖:
接下來,改變一些配置:
讓工程的JDK用本地的jdk;
讓工程的字符集為UTF-8;
改變工程的目錄順序;
這些都完成之後,工程目錄應該是如下的樣子:
3.將工程變成web工程
此時,我們的工程還不是標準的web工程,可以在eclipse中增加web工程的特性,選擇工程的Properties,選Project Facets,如下圖:
這裏,我們選擇Dynamic Web Module,版本選擇2.4,這個版本比較通用。如下圖:
此時,我們看到目錄中多了一個WebContent目錄,由於使用maven構建,web目錄是src/main/webapp,所以我們刪除WebContent目錄。接下來,要配置web項目的發布目錄,就是Deployment Assembly,如圖:
test目錄不要發布,WebContent目錄沒有了,所以這三項都刪掉。並且增加src/main/webapp目錄,和Maven Dependenices,完成之後如下圖:
於是,我們的工程就完全是一個web工程了。
4.賦予工程的springmvc特性
配置web.xml,使其具有springmvc特性,主要配置兩處,一個是ContextLoaderListener,一個是DispatcherServlet。代碼如下:

1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.4" xmlns="https://java.sun.com/xml/ns/j2ee" 3 xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="https://java.sun.com/xml/ns/j2ee 5 https://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 6 7 <listener> 8 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 9 </listener> 10 11 <servlet> 12 <servlet-name>exam</servlet-name> 13 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 14 </servlet> 15 16 <servlet-mapping> 17 <servlet-name>exam</servlet-name> 18 <url-pattern>/</url-pattern> 19 </servlet-mapping> 20 21 <welcome-file-list> 22 <welcome-file>index.jsp</welcome-file> 23 </welcome-file-list> 24 </web-app>
配置ContextLoaderListener表示,該工程要以spring的方式啟動。啟動時會默認在/WEB-INF目錄下查找applicationContext.xml作為spring容器的配置文件,這裏可以初始化一些bean,如DataSource。我們這裏什麼也不做。代碼如下:

1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "https://www.springframework.org/dtd/spring-beans.dtd"> 3 <beans> 4 </beans>
配置DispatcherServlet表示,該工程將采用springmvc的方式。啟動時也會默認在/WEB-INF目錄下查找XXX-servlet.xml作為配置文件,XXX就是DispatcherServlet的名字,該文件中將配置兩項重要的mvc特性:
HandlerMapping,負責為DispatcherServlet這個前端控製器的請求查找Controller;
ViewResolver,負責為DispatcherServlet查找ModelAndView的視圖解析器。
代碼如下:

1 <?xml version="1.0" encoding="UTF-8"?> 2 <!-- Bean頭部 --> 3 <beans xmlns="https://www.springframework.org/schema/beans" 4 xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns:p="https://www.springframework.org/schema/p" 5 xmlns:mvc="https://www.springframework.org/schema/mvc" xmlns:context="https://www.springframework.org/schema/context" 6 xmlns:util="https://www.springframework.org/schema/util" 7 xsi:schemaLocation="https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans-3.0.xsd 8 https://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context-3.0.xsd 9 https://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 10 https://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util-3.0.xsd"> 11 12 <!-- 激活@Controller模式 --> 13 <mvc:annotation-driven /> 14 <!-- 對包中的所有類進行掃描,以完成Bean創建和自動依賴注入的功能 需要更改 --> 15 <context:component-scan base-package="cc.monggo.web.controller" /> 16 17 <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> 18 19 <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 20 <property name="prefix"> 21 <value>/WEB-INF/jsp/</value> 22 </property> 23 <property name="suffix"> 24 <value>.jsp</value> 25 </property> 26 </bean> 27 </beans>
5.讓maven自動配置jar包
在用maven生成框架時,就生成了pop.xml,這就是maven的配置文件。我們要引入spring-web,servlet等特性的包。代碼如下:

1 <project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd"> 3 <modelVersion>4.0.0</modelVersion> 4 <groupId>exam</groupId> 5 <artifactId>exam_3</artifactId> 6 <packaging>war</packaging> 7 <version>0.0.1-SNAPSHOT</version> 8 <name>exam_3 Maven Webapp</name> 9 <url>https://maven.apache.org</url> 10 <dependencies> 11 <dependency> 12 <groupId>junit</groupId> 13 <artifactId>junit</artifactId> 14 <version>3.8.1</version> 15 <scope>test</scope> 16 </dependency> 17 18 <dependency> 19 <groupId>org.springframework</groupId> 20 <artifactId>spring-web</artifactId> 21 <version>3.0.5.RELEASE</version> 22 </dependency> 23 24 <dependency> 25 <groupId>org.springframework</groupId> 26 <artifactId>spring-webmvc</artifactId> 27 <version>3.0.5.RELEASE</version> 28 </dependency> 29 30 <dependency> 31 <groupId>org.apache.geronimo.specs</groupId> 32 <artifactId>geronimo-servlet_2.5_spec</artifactId> 33 <version>1.2</version> 34 </dependency> 35 36 </dependencies> 37 <build> 38 <finalName>exam_3</finalName> 39 </build> 40 </project>
maven就是這麼簡單,一旦保存,maven就會自動下載pop.xml的jar包。此時可以看到目錄中Maven Dependencies下生成了jar包。
更多的jar包可以在maven中心庫下載:https://mvnrepository.com。
6.做個測試
說了一大堆,隻有運行起來才有意思,下麵寫個簡單的測試。先寫Controller。編寫兩個類,LoginControler.java,LoginForm.java。代碼如下:

1 package cc.monggo.web.controller; 2 3 4 import javax.servlet.http.HttpServletRequest; 5 import javax.servlet.http.HttpServletResponse; 6 7 import org.springframework.stereotype.Controller; 8 import org.springframework.web.bind.annotation.RequestMapping; 9 import org.springframework.web.servlet.ModelAndView; 10 11 import cc.monggo.domain.LoginForm; 12 13 @Controller 14 public class LoginController { 15 @RequestMapping(value="login") 16 public ModelAndView login(HttpServletRequest request,HttpServletResponse response,LoginForm command ){ 17 String username = command.getUsername(); 18 ModelAndView mv = new ModelAndView("/index/index","command","LOGIN SUCCESS, " + username); 19 return mv; 20 } 21 }

1 package cc.monggo.domain; 2 3 4 public class LoginForm { 5 private String username; 6 private String password; 7 public String getUsername() { 8 return username; 9 } 10 public void setUsername(String username) { 11 this.username = username; 12 } 13 public String getPassword() { 14 return password; 15 } 16 public void setPassword(String password) { 17 this.password = password; 18 } 19 }
再增加一些jsp,首頁的index.jsp,主要是做跳轉,代碼如下:

1 <% 2 request.getRequestDispatcher("/WEB-INF/jsp/login/login.jsp").forward(request,response); 3 %>
還有兩個jsp,做些簡單的功能,一個表單login.jsp,一個表單提交的返回index.jsp,代碼如下:

1 <%@ page language="java" contentType="text/html; charset=utf-8" 2 pageEncoding="utf-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 <div> 11 <form action="login" methed="get"> 12 <input type="text" name="username"> 13 <input type="submit" value="SUBMIT"> 14 </form> 15 </div> 16 </body> 17 </html>

1 <%@ page language="java" contentType="text/html; charset=utf-8" 2 pageEncoding="utf-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 ${command} 11 </body> 12 </html>
整個項目的目錄結構如下:
在tomcat中運行,即可。不要使用Tomcat插件,可能有問題。就用普通的方式。運行效果如下圖:
最後更新:2017-04-03 05:39:25