一起學(xué)SpringMVC之一:使用maven起項(xiàng)目

網(wǎng)上看了很多springMVC helloworld的教程寇钉,非常不滿意刀疙;首先,maven構(gòu)建的就很少扫倡,再者谦秧,絕大部分都是斷章取義,讓人不明就里撵溃。其中有幾篇講的好的疚鲤,我摘錄了一些,自己試著構(gòu)建了一下項(xiàng)目缘挑,發(fā)現(xiàn)里面還是有很多需要注意的地方集歇,就記錄在這里吧。
我是一個(gè)喜歡刨根問(wèn)底的人语淘,所以我打算從手動(dòng)maven搭建項(xiàng)目開(kāi)始诲宇,然后導(dǎo)入IDEA际歼,一直到配置并且運(yùn)行起Helloworld

1 . 安裝maven,并配置環(huán)境變量

這個(gè)就不說(shuō)了焕窝,網(wǎng)上一搜一大把蹬挺。使用mvn -v檢查maven是否安裝
安裝完成后建議修改一下倉(cāng)庫(kù)為國(guó)內(nèi),要不然速度就呵呵了它掂,這里推薦一個(gè)速度杠杠的國(guó)內(nèi)鏡像(阿里云)巴帮,看見(jiàn)這篇文章你就偷著樂(lè)吧,不知道哪天就不能用了

<mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>

2 . 使用maven archetype 構(gòu)建項(xiàng)目腳手架

//隨便找個(gè)文件夾運(yùn)行以下命令
mvn archetype:generate -DarchetypeCatalog=internal

mvn archetype:generate根據(jù)項(xiàng)目腳手架建立相對(duì)應(yīng)的java項(xiàng)目虐秋,運(yùn)行完這個(gè)命令以后將搭建起springMVC項(xiàng)目雛形榕茧。
-DarchetypeCatalog=internal這個(gè)說(shuō)一下,還是那句話客给,謝謝偉大的墻用押,謝謝方校長(zhǎng),讓我們中國(guó)程序員獲得了這么多黑技能...不加這個(gè)的話靶剑,你的mvn必然會(huì)卡死在Generating project in Interactive mode...這一步,以下是完整解釋:

archetype是一個(gè)插件名稱,generate是一個(gè)目標(biāo)名稱.mvn archetype:generate 命令會(huì)從遠(yuǎn)程拉取所有的原型(大約1575個(gè))供你選擇蜻拨,使用-DarchetypeArtifavtId=[archetype]參數(shù)可以指定archetype類型。如果卡在Generating project in Interactive mode這一步桩引,是因?yàn)閙aven在從遠(yuǎn)程拉取信息缎讼,使用 -DarchetypeCatalog=internal 參數(shù)讓它不要從遠(yuǎn)程服務(wù)器上取catalog。 添加這句話之后,就不會(huì)卡死了.就會(huì)進(jìn)入交互階段,一步步詢問(wèn).每一步如果有默認(rèn)選項(xiàng)直接按enter即可坑匠。

然后根據(jù)命令行提示填寫groupId,artifactId,version,package血崭。這樣在當(dāng)前目錄下就生成了一個(gè)項(xiàng)目。
另:附上一鍵生成項(xiàng)目命令:

mvn archetype:generate -DgroupId=com.mycompany.helloworld -DartifactId=helloworld -Dpackage=com.mycompany.helloworld -Dversion=1.0-SNAPSHOT -DarchetypeCatalog=internal 

不管怎么樣厘灼,我們最終生成了標(biāo)準(zhǔn)的基于maven的Springmvc項(xiàng)目夹纫。其實(shí)也可以不用archetype,我們自己建立文件夾遵守maven規(guī)定即可:

//建立工程目錄
src/main/java/com/monodev/mvcstudy
//建立test目錄
src/test/java/com/monodev/mvcstudy
//建立resources文件夾
src/main/resources
//建立webapp目錄和配置文件(名字可隨意)
src/main/webapp/WEB-INF/web.xml
src/main/webapp/index.jsp

2. 添加pom依賴

打開(kāi)pom.xml设凹,添加:

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>3.2.3.RELEASE</version>
    </dependency>

是的舰讹,你沒(méi)有看錯(cuò),就一個(gè)依賴闪朱。
這個(gè)地方我也繞了很久跺涤,手動(dòng)加各種依賴,然后各種編譯期出錯(cuò)监透。桶错。。各種頭大胀蛮。最后上了spring官網(wǎng)院刁,發(fā)現(xiàn)就這一個(gè)依賴就夠了。粪狼。退腥。

另外任岸,在IDEA中有一個(gè)炒雞好用的maven面板,我們稍后說(shuō)

3.maven安裝依賴

項(xiàng)目根目錄運(yùn)行mvn clean installmaven會(huì)自動(dòng)下載所有依賴并編譯項(xiàng)目狡刘,完成后會(huì)在根目錄下生成target文件夾享潜。

4. 是時(shí)候?qū)隝DEA了

其實(shí)個(gè)人覺(jué)得idea好用是真的,慢也是真的嗅蔬。剑按。。我打算研究下用sublime3寫java澜术,試試行不行艺蝴,idea太笨重了。什么鸟废?為什么不用eclipse猜敢?我只能說(shuō)顏值太差好么?一個(gè)一看就像上個(gè)世紀(jì)的IDE盒延,怎么讓人提起使用他的興趣...

打開(kāi)idea缩擂,import項(xiàng)目,沒(méi)啥好說(shuō)的添寺,導(dǎo)入以后要做這幾件事:

  1. 右鍵單擊src文件夾胯盯,Mark Directory as->Source Root,否則寫代碼時(shí)找不到引用
  2. 右鍵單擊resources文件夾,Mark Directory as->Resource Root
  3. 右鍵工程設(shè)置SDK為你安裝的java sdk
  4. 配置tom貓:


    運(yùn)行配置

    這里選擇打開(kāi)面板畦贸,點(diǎn)+號(hào),從左側(cè)列表選擇Tomcat server - local

tom

然后選擇你的tomcat安裝位置楞捂,設(shè)置如下:

tom

這里沒(méi)有tomcat server薄坏?

File-settings-Plugins,搜索tomcat,并啟用:

tom

5. 配置

到了這里寨闹,你以為就能開(kāi)始寫controller了胶坠?呵呵,太naive繁堡,這是java沈善,沒(méi)那么容易的。
首先椭蹄,在resources下建立config文件夾闻牡,下建立spring-mvc-config.xml文件,也就是mvc的配置文件,它長(zhǎng)這個(gè)熊樣:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">

    <!--規(guī)定組件bean掃描的基礎(chǔ)包位置-->
    <context:component-scan base-package="com.monodev.mvc.controller"/>
    <!-- 靜態(tài)資源(js、image等)的訪問(wèn) -->
    <mvc:default-servlet-handler/>
    <!--啟用注解-->
    <mvc:annotation-driven/>
    <!--ViewResolver 視圖解析器-->
    <!--用于支持Servlet绳矩、JSP視圖解析-->
    <bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

繼續(xù)打開(kāi)WEB-INF下的web.xml文件罩润,添加以下內(nèi)容:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app version="2.5" 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_2_5.xsd">
  <servlet>
    <servlet-name>springmvc-app</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
   <!--使用剛才的配置文件,classpath就是resources目錄-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:config/spring-mvc-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup><!--這個(gè)不用解釋了翼馆,數(shù)字越小越靠前割以,DispatcherServlet是SpringMVC的基礎(chǔ)金度,必然是第一個(gè)處理的-->
  </servlet>

  <servlet-mapping>
    <servlet-name>springmvc-app</servlet-name>
    <url-pattern>/</url-pattern><!--映射根路徑-->
  </servlet-mapping>
</web-app>

5. helloworld

終于可以寫代碼了!
終于可以寫代碼了严沥!
終于可以寫代碼了猜极!
終于可以寫代碼了!
終于可以寫代碼了消玄!

web開(kāi)發(fā)我用過(guò)c#的.net跟伏,javascript的express,python的flask莱找,現(xiàn)在寫java酬姆,我感受最深的就是這句話,配置配到死奥溺,基本上辞色,你學(xué)會(huì)了各種配置方法,就學(xué)會(huì)了spring

以下是我的其他體會(huì):

1 .Spring的精髓不是IoC浮定,也不是AOP相满,而是xml

2. 我深深的體會(huì)到 spring boot是一項(xiàng)偉大的創(chuàng)舉,是java世界里的未來(lái)之星桦卒,將拯救無(wú)數(shù)java程序員于水火之中立美!

src下建包、建文件:

first controller
@Controller 
public class HelloworldController {
    @RequestMapping("/index")
   public  String test(){
       return "index";
   }
}

返回的是index視圖名稱方灾,所以根據(jù)spring-mvc-config.xml中的配置建蹄,在webapp下建立views/jsp目錄,并建立index.jsp文件:

<html>
<body>
<h2>Hello World!</h2>
</body>
</html>

點(diǎn)擊運(yùn)行裕偿,idea將把項(xiàng)目deploy到tomcat容器的ROOT文件夾下洞慎,瀏覽器中運(yùn)行就可以看到helloworld了。

7. 補(bǔ)充

前面提到idea的maven面板嘿棘。就在右上角劲腿,點(diǎn)擊Maven Projects打開(kāi)

maven projects
依賴的庫(kù)
dependency detail

這個(gè)工具可以讓我們很好的看到依賴的關(guān)系,此處就能看到鸟妙,雖然我們只引了一個(gè)spring-webmvc依賴焦人,但其實(shí)一環(huán)套一環(huán),有很多重父。
使用spring boot起的項(xiàng)目花椭,這里的依賴多到驚人
總之,這個(gè)面板是一個(gè)很強(qiáng)大的依賴管理面板

后記:
寫了一段時(shí)間java房午,最大的感覺(jué)就是像極了八股文个从。繁文縟節(jié)頗多。這樣一個(gè)helloworld不管用任何其它語(yǔ)言都是分分鐘的事,到j(luò)ava這里就難了嗦锐。
不過(guò)java的開(kāi)源庫(kù)也是巨量的嫌松,這個(gè)又是.net沒(méi)法比的,其實(shí)現(xiàn)在docker的出現(xiàn)奕污,java的“一次編寫萎羔,處處運(yùn)行”也就不是什么優(yōu)勢(shì)了。以后java這門語(yǔ)言的優(yōu)勢(shì)恐怕就僅僅剩下輪子的數(shù)量了碳默。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末贾陷,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子嘱根,更是在濱河造成了極大的恐慌髓废,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件该抒,死亡現(xiàn)場(chǎng)離奇詭異慌洪,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)凑保,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門冈爹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人欧引,你說(shuō)我怎么就攤上這事频伤。” “怎么了芝此?”我有些...
    開(kāi)封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵憋肖,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我婚苹,道長(zhǎng)岸更,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任租副,我火速辦了婚禮坐慰,結(jié)果婚禮上较性,老公的妹妹穿的比我還像新娘用僧。我一直安慰自己,他們只是感情好赞咙,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布责循。 她就那樣靜靜地躺著,像睡著了一般攀操。 火紅的嫁衣襯著肌膚如雪院仿。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音歹垫,去河邊找鬼剥汤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛排惨,可吹牛的內(nèi)容都是我干的吭敢。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼暮芭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鹿驼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起辕宏,我...
    開(kāi)封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤畜晰,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后瑞筐,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體凄鼻,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年面哼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了野宜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡魔策,死狀恐怖匈子,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情闯袒,我是刑警寧澤虎敦,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站政敢,受9級(jí)特大地震影響其徙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜喷户,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一唾那、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧褪尝,春花似錦闹获、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至璃谨,卻和暖如春沙庐,著一層夾襖步出監(jiān)牢的瞬間鲤妥,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工拱雏, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留棉安,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓铸抑,卻偏偏與公主長(zhǎng)得像垂券,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子羡滑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理菇爪,服務(wù)發(fā)現(xiàn),斷路器柒昏,智...
    卡卡羅2017閱讀 134,715評(píng)論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,865評(píng)論 6 342
  • Maven編譯代碼的相關(guān)命令 第一凳宙、main目錄下的主代碼編寫完畢后,使用Maven進(jìn)行編譯职祷,在項(xiàng)目根目錄下運(yùn)行命...
    加油小杜閱讀 1,198評(píng)論 0 2
  • 1.編寫POM Maven項(xiàng)目的核心文件是pom.xml氏涩,POM(Project Objcet Model)項(xiàng)目對(duì)...
    zlcook閱讀 5,914評(píng)論 7 26
  • 畢業(yè)之后開(kāi)始喜歡讀書的。此時(shí)有了經(jīng)濟(jì)基礎(chǔ)有梆,少了考試的功利心是尖。純粹的喜歡。讀的也比較雜泥耀,散文饺汹、小說(shuō)、勵(lì)志痰催、育兒兜辞、菜譜...
    換個(gè)活法007閱讀 915評(píng)論 0 0