基於IDEA+Maven+SpringMVC的入門web程序分析(一)
第一步:Maven項目的創建【手動創建Maven項目而沒有使用Maven的自動構建web項目】
使用Maven模板自動構建web項目圖如下,這裏不細講:
手動創建Maven Web項目流程如下:
1.1 File->New->Project 出現下圖:
1.2 然後點擊next,出現下圖
由GroupId、ArtifactId、Version三個元素直接確定了唯一的一個Maven模塊
填寫相應的GroupId、ArtifactId
註意,上面的三個屬性會出現在Maven的pom.xml文件中
1.3 點擊next,出現如下所示的圖片
這裏的Project name(上面)和Module name(下面)根據上一步的ArtifactId默認生成,這裏自己可以隨意修改的。這裏的項目名稱和模塊名稱是一樣的,也可以不一樣。
1.4 點擊finish,出現如下圖所示界面:
中間顯示的是pom.xml文件,可以看見之前所選擇的GroupId、ArtifactId和Version都出現在pom.xml文件中,右下角這個小標簽提示Maven projects need to be imported(Maven項目需要導入),可以點擊下面的Import Changes選項,導入所發生的變化,以後的Maven項目的pom.xml文件發生變化時,右下角都會提醒,自己可以選擇性的導入相應的變化。
第二步:構建基於Maven和SpringMVC的Web項目目錄結構
2.1 在上面點擊finish後的Web項目目錄結構如下圖所示:
1.2 現在對上面的Web項目目錄結構做相應的更改,得到如下所示的項目目錄結構
第三步:一些必須的準備工作
3.1 File->Project Stricture設置(在整個軟件界面的上方也能看到Project Structure前面的圖標,點擊進去,同樣設置),如下圖:
3.2 先進行Project的設置,這裏最重要的就是Project SDK的設置,其他的默認就可以了。下面的Project compiler output指示了項目編譯後,生成的相應文件都放在哪!所以編譯後整個目錄結構是會多一個out文件夾的。
3.2 現在進行Modules的設置
3.2.1 可以看到Modules有三個重要標簽,Source標簽已經顯示出來了,這裏不用設置,默認就好,如下如所示:
3.2.2 再來看Path標簽,重要的Compile output標簽,選著第二項,可以發現,項目編譯後的classes文件都放在target目錄下,所以後面的目錄結構也新增了一個target文件夾。
3.2.3 設置Dependecies標簽,這裏很重要
(1) 導入依賴JAR包,點擊右邊的+,然後選擇第一個選項Jars or Directories
方框1:裏面的jar包路徑,選擇自己jar包所在的位置就好
方框2:選擇相應的jar包,然後點擊OK導入
導入後的結果如下所示:
這裏的導入的Jar包是作為外部庫(External Librarise)存在的,可以在Web項目目錄結構中看到:
(2) 這裏先新增一個web結構,開發web項目必須要添加此配置,主要是對Web.xml和Web根目錄做一個配置,否則最後項目運行時,會出現404錯誤
新增前:
新增後:
新增後以及配置前:
這裏要根據你實際的Web項目目錄來進行路徑設置:
實際Web項目目錄結構如下:
配置後的結果如下:
路徑設置好後:
會發現相應的圖標發生了變化,主要是web.xml和文件夾webapp:
配置前:
配置後:
到目前為止,Modules部分就全都配置好了,不過可以看到上面的圖裏面有一個警告:Web Facet resources are not included in an artifact,這裏我們在Artifact設置部分(下面)來解決;
3.3 Artifact部分設置: 這裏設置的主要是看最後我們的項目是以怎麽一種形式發布,web項目的發布一般選擇war包的形式進行發布,不需要直接發布源代碼。
配置前,可以發現中間部分什麽都沒有:
點擊+,進行配置:
選擇From Modules:
點擊OK:
到此為止,Project Structure就全部設置好了
第四步,代碼、配置文件整理
4.1 控制器Controller相關代碼,這裏是基於XML配置的方式,控制器的實現需要實現Controller接口
1 package com.wangfei.firstspringmvc.controller; 2 3 4 import org.springframework.web.servlet.ModelAndView; 5 import org.springframework.web.servlet.mvc.Controller; 6 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 10 public class IndexController implements Controller{ 11 12 public IndexController(){ 13 14 } 15 16 17 public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { 18 19 ModelAndView mv = new ModelAndView("index.jsp"); 20 mv.addObject("message","Hello Spring MVC"); 21 22 return mv; 23 } 24 }View Code
1 package com.wangfei.firstspringmvc.controller; 2 3 4 import org.springframework.web.servlet.ModelAndView; 5 import org.springframework.web.servlet.mvc.Controller; 6 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 10 public class IndexController implements Controller{ 11 12 public IndexController(){ 13 14 } 15 16 17 public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { 18 19 ModelAndView mv = new ModelAndView("index.jsp"); 20 mv.addObject("message","Hello Spring MVC"); 21 22 return mv; 23 } 24 }
4.2 web.xml文件配置,這裏主要配置的是處理客戶端瀏覽器發出請求的前端控制器DispatcherServlet,既然是一個Servlet,所以就和Servlet的配置很類似:
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 8 <!-- 配置SpringMVC的請求處理接口 前端控制器--> 9 <servlet> 10 <servlet-name>firstspringmvc</servlet-name> 11 <servlet-class> 12 org.springframework.web.servlet.DispatcherServlet 13 </servlet-class> 14 <load-on-startup>1</load-on-startup> 15 </servlet> 16 <servlet-mapping> 17 <servlet-name>firstspringmvc</servlet-name> 18 <url-pattern>/</url-pattern> 19 </servlet-mapping> 20 </web-app>View Code
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 8 <!-- 配置SpringMVC的請求處理接口 前端控制器--> 9 <servlet> 10 <servlet-name>firstspringmvc</servlet-name> 11 <servlet-class> 12 org.springframework.web.servlet.DispatcherServlet 13 </servlet-class> 14 <load-on-startup>1</load-on-startup> 15 </servlet> 16 <servlet-mapping> 17 <servlet-name>firstspringmvc</servlet-name> 18 <url-pattern>/</url-pattern> 19 </servlet-mapping> 20 </web-app>
註意這裏的<servlet-name>標簽裏面的名字firstspringmvc是可以隨便取的,不是固定的;但是下面的<servlet-mapper>標簽裏面的<servlet-name>裏面的名字要和上面的一致
4.3 firstspringmvc-servlet.xml的配置;這裏的文件名格式為: 模塊名-servlet.xml 這裏絕不不能錯,錯了以後你會發現tomact可以正常運行,但是訪問index.jsp文件時就會報錯:報錯如下所示
具體錯誤如下:
1 Could not open ServletContext resource [/WEB-INF/firstspringmvc-servlet.xml]
這裏已經提示你找不到firstspringmvc-servlet.xml文件,所以只需要把你的.xml文件改成firstspringmvc-servlet.xml這個名字就好
具體的firstspringmvc-servlet.xml配置如下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <beans xmlns="http://www.springframework.org/schema/beans" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 6 7 <!--[註意]此處的xml文件的名稱為 模塊名-servlet.xml,而不是 項目名-servlet.xml--> 8 <!-- vivo-firstspringmvc這個是項目名 旁邊的firstspringmvc為模塊名--> 9 10 <!--編寫處理器映射器:攔截URL--> 11 <bean id="simpleUrlHandlerMapping" 12 class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 13 <property name="mappings"><!--這裏的name值不是隨便寫的--> 14 <props> 15 <!--對於瀏覽器發出的url(/index)請求,通過前端控制器交給處理器映射器,然後找到合適的控制器(handler)來進行處理--> 16 <prop key="/index">indexController</prop> 17 </props> 18 </property> 19 </bean> 20 21 <!--通過XML裝配bean--> 22 <!--這裏聲明bean的id名稱,是為了方便引用(見上面的處理器攔截器)--> 23 24 <bean id="indexController" class="com.vivo.firstspringmvc.controller.IndexController"></bean> 25 </beans>View Code
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <beans xmlns="http://www.springframework.org/schema/beans" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 6 7 <!--[註意]此處的xml文件的名稱為 模塊名-servlet.xml,而不是 項目名-servlet.xml--> 8 9 10 <!--編寫處理器映射器:攔截URL--> 11 <bean id="simpleUrlHandlerMapping" 12 class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 13 <property name="mappings"><!--這裏的name值不是隨便寫的--> 14 <props> 15 <!--對於瀏覽器發出的url(/index)請求,通過前端控制器交給處理器映射器,然後找到合適的控制器(handler)來進行處理--> 16 <prop key="/index">indexController</prop> 17 </props> 18 </property> 19 </bean> 20 21 <!--通過XML裝配bean--> 22 <!--這裏聲明bean的id名稱,是為了方便引用(見上面的處理器攔截器)--> 23 24 <bean id="indexController" class="com.wangfei.firstspringmvc.controller.IndexController"></bean> 25 </beans>
代碼中的備註,都是很重要的地方
4.4 JSP代碼,裏面用JSTL語法,來讀取ModelAndView中的message
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8" isELIgnored="false"%> 3 4 <h1>${message}</h1>View Code
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8" isELIgnored="false"%> 3 4 <h1>${message}</h1>
4.5 pom.xml文件不改也可以,web應用可以正常運行,但是模塊編譯的時候會出現錯誤:
pom.xml文件配置如下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 5 <modelVersion>4.0.0</modelVersion> 6 7 <groupId>com.vivo.firstspringmvc</groupId> 8 <artifactId>vivo-firstspringmvc</artifactId> 9 <version>1.0-SNAPSHOT</version> 10 11 <!--下面的這一部分不是必須的,但是沒有會影響maven模塊的編譯--> 12 <build> 13 <defaultGoal>compile</defaultGoal> 14 <finalName>vivo-firstspringmvc</finalName> 15 </build> 16 17 18 </project>View Code
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 5 <modelVersion>4.0.0</modelVersion> 6 7 <groupId>com.wangfei.firstspringmvc</groupId> 8 <artifactId>vivo-firstspringmvc</artifactId> 9 <version>1.0-SNAPSHOT</version> 10 11 <!--下面的這一部分不是必須的,但是沒有會影響maven模塊的編譯--> 12 <build> 13 <defaultGoal>compile</defaultGoal> 14 <finalName>firstspringmvc</finalName> 15 </build> 16 17 18 </project>
第五步,配置運行環境,主要是Maven的配置和Tomcat的配置,如下圖所示1處,2處是之前的Project Structure設置(快捷鍵Shift+Alt+Ctrl+S)
5.1 Maven的配置
1處的名字可以隨便取,2處的配置很重要,這裏需要根據你自己的maven版本以及settings.xml文件和repository文件所在的路徑進行配置
5.2 Tomcat的配置
5.2.1 首先是server的配置:
方框1: 名字可以隨便取
方框2:tomcat的版本根據自己的設定
方框3:這裏主要是對虛擬機VM的設置,比如字符編碼設置-Dfile.encoding=UTF-8
方框4:這是很重要,主要是選取什麽War包進行Deployment,【這裏和之前的Project Structure裏面Modulers的Web設置有很大關系】點擊Fix後如下圖所示:
第六步,運行:
基於IDEA+Maven+SpringMVC的入門web程序分析(一)