1. 程式人生 > >基於IDEA+Maven+SpringMVC的入門web程序分析(一)

基於IDEA+Maven+SpringMVC的入門web程序分析(一)

tco pid nbsp throw 編碼 es2017 ctr 文件中 存在

第一步: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程序分析(一)