Spring學(xué)習(xí)手冊(cè)(15)—— Hello Spring MVC

目前為止我們通過Sprint學(xué)習(xí)手冊(cè)系列缨伊,學(xué)習(xí)了Spring核心框架技術(shù): IOCAOP技術(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),如下圖所示:

創(chuàng)建Web項(xiàng)目

這樣完成項(xiàng)目創(chuàng)建后,IDEA會(huì)自動(dòng)創(chuàng)建webapp目錄并設(shè)置好build.gradle文件情臭。

二竟秫、增加依賴jar包

我們的項(xiàng)目需要增加spring-mvcspring-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)便疾就。

Servlet內(nèi)部邏輯流轉(zhuǎ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è)面:

打開配置項(xiàng)

將彈出如下圖所示結(jié)果:
配置頁(yè)面

點(diǎn)擊+號(hào)蚀浆,選擇Tomcat Server/Local缀程,將彈出如下配置頁(yè)面:
配置Tomcat

我們首先為該配置命名為HelloSpringMVC,然后點(diǎn)擊Configure設(shè)置Tomcat根目錄市俊。這個(gè)時(shí)候你會(huì)發(fā)現(xiàn)右下角有一個(gè)紅色Fix按鈕杨凑,點(diǎn)擊它,選擇將要部署的war包摆昧,頁(yè)面會(huì)跳轉(zhuǎn)到Deployment選項(xiàng)卡:
Deployment

在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)完成。


啟動(dòng)項(xiàng)目

訪問項(xiàng)目

啟動(dòng)瀏覽器勇吊,將http://localhost:8080/HelloSpringMVC/hello輸入到地址欄,我們將看到如下界面:

HelloSpringMVC訪問結(jié)果

恭喜你窍仰,你已經(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)目源碼地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末昆禽,一起剝皮案震驚了整個(gè)濱河市蝗蛙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌醉鳖,老刑警劉巖歼郭,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異辐棒,居然都是意外死亡病曾,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門漾根,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泰涂,“玉大人,你說我怎么就攤上這事辐怕”泼桑” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵寄疏,是天一觀的道長(zhǎng)是牢。 經(jīng)常有香客問我,道長(zhǎng)陕截,這世上最難降的妖魔是什么驳棱? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮农曲,結(jié)果婚禮上社搅,老公的妹妹穿的比我還像新娘。我一直安慰自己乳规,他們只是感情好形葬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著暮的,像睡著了一般笙以。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上冻辩,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天猖腕,我揣著相機(jī)與錄音,去河邊找鬼微猖。 笑死谈息,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的凛剥。 我是一名探鬼主播侠仇,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了逻炊?” 一聲冷哼從身側(cè)響起互亮,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎余素,沒想到半個(gè)月后豹休,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡桨吊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年威根,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片视乐。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡洛搀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出佑淀,到底是詐尸還是另有隱情留美,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布伸刃,位于F島的核電站谎砾,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏捧颅。R本人自食惡果不足惜景图,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望隘道。 院中可真熱鬧症歇,春花似錦、人聲如沸谭梗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)激捏。三九已至喇嘱,卻和暖如春坑资,著一層夾襖步出監(jiān)牢的瞬間鸿脓,已是汗流浹背拆座。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工褒翰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宛琅,地道東北人闪水。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓报破,卻偏偏與公主長(zhǎng)得像任连,于是被迫代替她去往敵國(guó)和親蚤吹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)裁着,斷路器繁涂,智...
    卡卡羅2017閱讀 134,659評(píng)論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,822評(píng)論 6 342
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司二驰,掛了不少扔罪,但最終還是拿到小米、百度桶雀、阿里矿酵、京東、新浪矗积、CVTE全肮、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,253評(píng)論 11 349
  • 牛奶是絲絲入扣成如鯁在喉不覺五十七度的溫柔面包是五谷豐收成糟糠零碎糟踐味蕾豐滿的舌頭煎蛋是性感靈肉成味同嚼蠟少了油...
    尹渝釋閱讀 286評(píng)論 2 2
  • 今天是第三天,開始練倒車漠魏。原來在駕駛座看后視鏡的效果跟在副駕完全不同倔矾,心里真的踏實(shí)了很多。 教練夸我后視鏡觀察得好...
    楊一同學(xué)閱讀 222評(píng)論 0 1