網(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 install
maven會(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)入以后要做這幾件事:
- 右鍵單擊src文件夾胯盯,Mark Directory as->Source Root,否則寫代碼時(shí)找不到引用
- 右鍵單擊resources文件夾,Mark Directory as->Resource Root
- 右鍵工程設(shè)置SDK為你安裝的java sdk
-
配置tom貓:
運(yùn)行配置
這里選擇打開(kāi)面板畦贸,點(diǎn)+號(hào),從左側(cè)列表選擇Tomcat server - local
然后選擇你的tomcat安裝位置楞捂,設(shè)置如下:
這里沒(méi)有tomcat server薄坏?
File-settings-Plugins,搜索tomcat,并啟用:
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下建包、建文件:
@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)
這個(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ù)量了碳默。