標籤:user word type arc control package c項目 maven string
一.背景介紹
對於初學者,用maven構建項目並不是一件容易的事,springmvc並不是MVC中的主流,但是本人覺得springmvc比struts要好用,真正做到了零配置。一次使用,就放不下了。
二.準備工作
1.Eclipse 3.7
2.maven
3.Eclipse 需要安裝maven外掛程式。url:maven - http://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="http://java.sun.com/xml/ns/j2ee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 5 http://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" "http://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="http://www.springframework.org/schema/beans" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" 5 xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" 6 xmlns:util="http://www.springframework.org/schema/util" 7 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 8 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 9 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 10 http://www.springframework.org/schema/util http://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="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://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>http://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中心庫下載:http://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 @Controller14 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" "http://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" "http://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外掛程式,可能有問題。就用普通的方式。運行效果如:
Eclipse maven構建springmvc項目