目前為止我們通過Sprint學(xué)習(xí)手冊(cè)系列缨伊,學(xué)習(xí)了Spring核心框架技術(shù): IOC和AOP技術(shù),同時(shí)我們學(xué)習(xí)了如何在Spring框架體系下整合mybatis數(shù)據(jù)持久框架和log4j2日志框架谭胚。通過這些學(xué)習(xí)和實(shí)踐扳剿,我們已經(jīng)可以使用Spring核心框架完成JAVA后臺(tái)服務(wù)開發(fā)工作。本文我們學(xué)習(xí)Spring MVC框架的使用入門。
一、 創(chuàng)建Web項(xiàng)目
本文依然使用IDEA創(chuàng)建WEB項(xiàng)目,使用旗艦版(官網(wǎng)提供30天試用版)可以直接創(chuàng)建web項(xiàng)目亚隅,當(dāng)然我們也可以使用社區(qū)版創(chuàng)建項(xiàng)目然后修改相應(yīng)配置。若安裝的為社區(qū)版套像,建議直接下載文末提供的工程示例柳譬,在此工程基礎(chǔ)上進(jìn)行編寫自己的代碼销部。
我們?cè)?a href="" target="_blank">HelloSpring一文中比較詳細(xì)的介紹了IDEA創(chuàng)建Gradle工程的步驟擂涛,若有疑惑可在此查看此文甥雕。IDEA創(chuàng)建WEB項(xiàng)目需要注意的是我們需要勾選Web
選項(xiàng),如下圖所示:
這樣完成項(xiàng)目創(chuàng)建后,IDEA會(huì)自動(dòng)創(chuàng)建webapp目錄并設(shè)置好
build.gradle
文件情臭。
二竟秫、增加依賴jar包
我們的項(xiàng)目需要增加spring-mvc
和spring-webmvc
兩個(gè)jar包的依賴肥败,增加完成往史,build.gradle
文件內(nèi)依賴關(guān)系配置如下:
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
testCompile group: 'junit', name: 'junit', version: '4.12'
compile 'org.springframework:spring-webmvc:4.3.6.RELEASE'
compile 'org.springframework:spring-web:4.3.6.RELEASE'
compile 'org.springframework:spring-core:4.3.6.RELEASE'
}
項(xiàng)目工程目錄下運(yùn)行如下命令
gradle build
或等待IDEA自動(dòng)下載并加載解析相關(guān)依賴jar包订歪。
三、Spring MVC基礎(chǔ)知識(shí)
Spring MVC(model-view-controller)框架圍繞著DispatcherServlet
進(jìn)行設(shè)計(jì)肆捕,該Servlet將請(qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的控制器慎陵,然后使用控制器處理后的模型進(jìn)行視圖渲染席纽。像大多數(shù)MVC框架一樣,它很好的將業(yè)務(wù)邏輯和視圖解耦竟纳,除此之外鬼悠,它還完美的支持Spring核心框架技術(shù):IOC和AOP溯泣,在Spring MVC框架中你可以像簡(jiǎn)單的通過配置使用Spring的IOC和AOP技術(shù)垃沦。
Spring 3.0以后收夸,提供了@Controller
忱详、@RequestMapping
等注解的方式來完成控制器的定義等工作糯钙,這使開發(fā)更加簡(jiǎn)便疾就。
四撇叁、Hello Spring MVC實(shí)戰(zhàn)
配置DispatcherServlet(定義web.xml)
在webapp/WEB-INF
文件夾下(若不存在WEB-INF文件夾則創(chuàng)建)下創(chuàng)建web.xml
文件繁堡,文件配置如下:
<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_3_0.xsd"
version="3.0">
<display-name>Spring MVC Application</display-name>
<servlet>
<servlet-name>HelloWeb</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>HelloWeb</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
如上所示,我們使用<servlet>
標(biāo)簽配置DispatcherServlet并且使用<servlet-name>
標(biāo)簽為該servlet命名為HelloWeb。接下來我們使用<servlet-mapping>
標(biāo)簽為該servlet配置映射關(guān)系嗜桌,如上所示匿又,所有路徑以/
開始的都會(huì)被名為HelloWeb的servlet進(jìn)行處理旭绒。
定義HelloWeb-servlet.xml文件
我們?cè)趙eb.xml文件里定義了名為HelloWeb的servlet歪沃,Spring MVC框架啟動(dòng)是會(huì)初始化該Servlet,默認(rèn)情況下框架使用[servlet-name]-servlet.xml
的文件格式查找該servlet的配置信息顶燕。為簡(jiǎn)便起見,我們使用該約束方式創(chuàng)建HelloWeb-servlet.xml
并配置坐慰,該文件內(nèi)容如下:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
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">
<context:component-scan base-package="com.liangwei.learning" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
如上所示糟港,該配置文件與以前學(xué)習(xí)到的Spring配置文件相同秸抚,這里值得一提的是,Spring 3.0 增加了@Controller
等注解谴麦,使得我們可以直接使用注解的方式進(jìn)行定義配置控制器,而Spring MVC也提供一種配置方式,使得Spring MVC在加載時(shí)自動(dòng)掃描所有有@Controller
和@RequestMapping
注解的類闹获,并將其注冊(cè)為控制器(bean)期犬。我們使用該配置<context:component-scan base-package="com.liangwei.learning" />
,并制定base-package
避诽,框架會(huì)自動(dòng)在該包名下掃描并注冊(cè)控制器龟虎。
除上述配置外,我們需要配置為該Servlet配置ViewResolver
茎用,這里我們使用InternalResourceViewResolver
,并且配置前綴為/WEB-INF/jsp/
遣总,后綴為.jsp
睬罗,這樣當(dāng)控制器返回一個(gè)hello的String類型實(shí)例時(shí),框架會(huì)將其解析為/WEB-INF/jsp/hello.jsp
旭斥,然后查找該視圖文件并使用渲染器渲染視圖容达。
定義控制器(HelloController)
前面我們定義了Servlet并且完成了其配置工作,接下來我們定義一個(gè)控制器:HelloController:
@Controller
@RequestMapping("/hello")
public class HelloController {
@RequestMapping(method = RequestMethod.GET)
public String printHello(ModelMap model) {
model.addAttribute("message", "Hello Spring MVC Framework!");
return "hello";
}
}
如上所示垂券,我們使用@Controller
注解注解HelloController花盐,由于我們前面已經(jīng)配置了<context:component-scan>
標(biāo)簽,框架會(huì)自動(dòng)掃描并注冊(cè)控制器菇爪。我們使用@RequestMapping
注解并設(shè)置"/hello"
值算芯,這是的所有的請(qǐng)求路徑為/hello
的請(qǐng)求被分發(fā)到該控制器。這里我們將@RequestMapping
路徑設(shè)置在類上凳宙,當(dāng)然我們也可以將該注解設(shè)置在具體方法上熙揍,我們會(huì)在后面的文章講解它們之間的區(qū)別。我們的控制器類提供了printHello
方法氏涩,該方法簽名擁有一個(gè)ModelMap
類型參數(shù)届囚,并且返回String類型值。該方法使用@RequestMapping(method = RequestMethod.GET)
設(shè)置只接受GET方法是尖。這樣的配置使得我們的控制器會(huì)接受/hello路徑的GET請(qǐng)求意系。
定義視圖文件hello.jsp
我們配置好了Servlet,且定義了控制器饺汹,接下來我們需要配置視圖文件hello.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<head>
<title>Hello World</title>
</head>
<body>
<h2>${message}</h2>
</body>
</html>
該文件存儲(chǔ)在/WEB-INF/jsp路徑下蛔添,命名為hello.jsp:這跟我們前面的HelloWeb-servlet.xml的配置有關(guān)。該文件為簡(jiǎn)單的JSP視圖文件兜辞,它會(huì)從模型中獲取名為message
的信息迎瞧,并交給渲染器進(jìn)行渲染。
以上我們就完成了Hello Spring MVC項(xiàng)目的開發(fā)和配置工作弦疮。接下來我們需要學(xué)習(xí)如何將它部署在Tomcat服務(wù)上并通過瀏覽器訪問夹攒。
五、部署到Tomcat
安裝配置Tomcat
本文非Tomcat學(xué)習(xí)文章胁塞,所以這里我們只簡(jiǎn)單介紹如何安裝和配置Tomcat咏尝。我們可以直接訪問官網(wǎng)查找下載相應(yīng)版本。該項(xiàng)目我使用的是Tomcat9.0版啸罢,在該頁(yè)面下下載Core下的.zip
包编检,當(dāng)然如果你是windows環(huán)境可下載相應(yīng)版本。下載完成后我將其解壓到~/Library/Tomcat9/
目錄下扰才,然后將該路徑設(shè)置到Path路徑下:
export PATH=$HOME/Library/Tomcat9/bin:$PATH
作者使用的是zsh允懂,因此該命令配置在~
路徑下的.zshrc
文件內(nèi),如果讀者使用不同的shell或使用windows平臺(tái)需使用相應(yīng)設(shè)置方式衩匣。
這樣我們就完成了Tomcat的安裝和簡(jiǎn)單配置蕾总。這個(gè)時(shí)候我們進(jìn)入~/Library/Tomcat9/
目錄粥航,使用如下命令可以看到tomcat啟動(dòng)信息。
startup.sh
我們可以使用shutdown.sh
來關(guān)閉服務(wù)生百。
Tip :在Unix或Linux系統(tǒng)情況下递雀,可能出現(xiàn)無法啟動(dòng),此時(shí)需要使用如下命令修改文件權(quán)限
chmod 755 ~/Library/Tomcat9/bin/*.sh
IDEA 部署項(xiàng)目設(shè)置
選擇Run/EditConfigurations
打開配置頁(yè)面:
將彈出如下圖所示結(jié)果:
點(diǎn)擊+號(hào)蚀浆,選擇Tomcat Server/Local缀程,將彈出如下配置頁(yè)面:
我們首先為該配置命名為HelloSpringMVC,然后點(diǎn)擊Configure設(shè)置Tomcat根目錄市俊。這個(gè)時(shí)候你會(huì)發(fā)現(xiàn)右下角有一個(gè)紅色Fix按鈕杨凑,點(diǎn)擊它,選擇將要部署的war包摆昧,頁(yè)面會(huì)跳轉(zhuǎn)到Deployment選項(xiàng)卡:
在Application context配置上/HelloSpringMVC ,點(diǎn)擊OK撩满,完成配置。這樣我們的項(xiàng)目根目錄將為
localhost:8080/HelloSpringMVC
啟動(dòng)項(xiàng)目
回到IDEA工程目錄下据忘,點(diǎn)擊綠色按鈕將啟動(dòng)項(xiàng)目并將項(xiàng)目war包部署到Tomcat,控制臺(tái)會(huì)輸出啟動(dòng)日志鹦牛,稍等一會(huì)項(xiàng)目啟動(dòng)完成。
訪問項(xiàng)目
啟動(dòng)瀏覽器勇吊,將http://localhost:8080/HelloSpringMVC/hello
輸入到地址欄,我們將看到如下界面:
恭喜你窍仰,你已經(jīng)完成了helloSpringMVC項(xiàng)目的開發(fā)和部署工作汉规。
直接部署到Tomcat安裝目錄
除了上述部署方式外,我們可以直接將war包拷貝到~/Library/Tomcat9/webapps/
目錄下驹吮,然后啟動(dòng)Tomcat服務(wù)器针史,服務(wù)器會(huì)自動(dòng)將war包解壓。如HelloSpringMVC.war 包碟狞,會(huì)被解壓~/Library/Tomcat9/webapps/HelloSpringMVC
目錄下啄枕,此時(shí)我們可以使用localhost:8080/HelloSpringMVC/hello
來訪問,其中HelloSpringMVC為解壓后的名字族沃。另外我們可以在工程build/libs目錄下找到編譯好的war包频祝。
六、總結(jié)
本文我們學(xué)習(xí)了Spring MVC框架的實(shí)用脆淹,通過實(shí)戰(zhàn)的方式定義Servlet常空、配置Servlet、定義Controller和定義視圖文件完成HelloSpringMVC項(xiàng)目的開發(fā)盖溺,最后我們通過使用IDEA部署和直接Tomcat部署的方式完成項(xiàng)目的部署漓糙。這樣我們就完成了一個(gè)最簡(jiǎn)單的Spring MVC項(xiàng)目,通過HelloSpringMVC項(xiàng)目我們踏入了Spring MVC框架的大門烘嘱。
項(xiàng)目源碼地址