JAVA開發血淚之路:一步步搭建spring架構

來源:互聯網
上載者:User

標籤:create   java實現   facet   出現   做什麼   lse   包括   show   -name   

前言

作為一個服務端開發感覺一直挺排斥架構這種東西的,總覺得什麼實現邏輯都幫你封裝在裡面了,你只需要配置這配置那個,出了問題也不知道怎麼排查,之前即使寫web程式也寧願使用jetty這樣的嵌入式的web server實現,自己寫servlet,總感覺從main函數開始都在自己的掌控範圍之內,但是這樣的方式的確有點原始,也看到各種各樣的開源系統使用spring實現web服務,雖然代碼總是能夠看明白,但是還是不曉得一步步是怎麼搭建的,於是抽出一個周末折騰折騰,不搞不知道,原來這玩意能把一個不熟悉的使用者搞崩潰,本文主要介紹我是如何搭建一個spring環境的(話說還真的分不清spring和springmvn),雖然在大多數web開發看來這是雕蟲小技。

本文使用的環境是eclipse luna+spring比較新的一個版本(按照我選擇版本的規則是除非有什麼新功能新版本才用,否則盡量不使用最新的版本,然後選擇較新的N個版本中使用人數比較多的,例如本文選用的spring版本是4.3.7.RELEASE)。

下面就從純工程的角度上解釋如何一步步的搭建這樣的環境的,沒有原理,有原理也是我純屬猜測的,沒有看過源碼。

詳細步驟

第一步:建立一個maven工程

這是再熟悉不過的流程了,但是一般我不推薦選擇Archetype,只是建立一個simple project就可以了,前者總是建立失敗(建立Archetype模式的可以讓IDE做更多的事情)。其實在何謂maven工程,在我看來就是一個帶有pom.xml的java工程罷了,然後再把代碼的路徑設定為src/main/java類似這樣的結構,所以我們只需要用IDE幫我們建立一個帶有pom.xml的工程就可以了,我們自己寫一個dependency和build參數。

配置的時候除了填寫正確的group id 和artifact id,主要把packaging選擇為war,這樣可以在tomcat下運行。

第二步:修改工程配置

這裡需要修改的配置有兩個,只需要注意修改之後的樣子就可以了:

1、Project Facets:雖然不知道這裡配置什麼的,但是一次次的吃了這個的虧,這裡要配置的是Java選擇1.6以上(最好1.7吧),然後選擇Dynamic Web Module,下方出現如下的介面:
如果沒出現則可以先勾掉Dynamic Web Module,然後儲存,然後再次點進去Project Facets,選擇Dynamic Web Module,這時候就出現了這樣的介面,注意最好不要選擇3.0,之前遇到過3.0不相容的問題,jdk1.7 + 2.5版本是可以正常啟動並執行。

點進去“Further configuration avaliable…”進行配置,將Context directory修改成,並選擇產生web.xml,儲存。如:

此時你會看到你的工程結構如,src/main目錄下出現了java/resources/webapp三個目錄。

2、配置Deployment Assembly,這裡配置的Source和Deploy Path,表示在工程部署的時候會將source目錄下的內容拷貝到tomcat部署目錄/Deploy Path下。這裡需要配置的如所示:
例如第一條表示會將工程中src/main/java目錄下的原始碼編譯之後放到部署目錄/WEB-INF/classes目錄下,最後一條表示會將該工程的maven依賴拷貝到部署目錄/WEB-INF/lib目錄下。據我觀察發現,其實tomcat目錄運行過程中會將部署部署目錄/WEB-INF/classes、部署目錄/WEB-INF/lib加入到classpath中,所以將設定檔和編譯完成的class檔案放到classes下,依賴的jar放到lib目錄下都是可以在啟動java程式時找得到的。

第三步:下載spring依賴

spring的jar比較多,最基本的功能也需要如下的幾個dependency:

第四步:編寫代碼

我們寫一個簡單的controller,這個controller返回一個“Hello ${username}”字串。

第五步:spring設定檔

spring設定檔一般取名叫”applicationContext.xml”,當然這個不是spring預設的配置名,還是需要在web.xml中指定,這裡我們只配置spring的設定檔,其實spring配置中主要是對一些bean的配置,這裡我們暫時不需要建立任何bean,就只需要簡單地加一下掃描路徑就可以了。

<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

http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd ">

< context:annotation-config />

這種設定檔一般放在src/main/resources目錄下,前面我們已經配置部署拷貝的設定,他會在部署時被拷貝到WEB-INF/classes/目錄下,這裡只配置了兩項其中context:annotation-config是告訴spring識別註解配置,後面的scan表示要掃描的類的package。第六步:配置web.xmlweb.xml使我們第二步配置時自動產生的,它是tomcat啟動時需要依賴的配置,裡面可以配置一些servlet、filter、listener等,對於簡單使用spring而言,一般只配置一個servlet,所有的請求都有這個servlet進行路由處理。 DispatcherServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:applicationContext.xml 1 DispatcherServlet /可以看到我們只配置了一個DispatcherServlet,它處理所有的url請求,它初始化需要的設定檔會classpath下找applicationContext.xml,剛才已經介紹,在部署的時候resources下的檔案會拷貝到WEB-INF/classes目錄下並且加入到java啟動的classpath下。第七步:部署tomcat首先需要下載一個tomcat,tomcat 7.x是一個不錯的選擇,由於tomcat是綠色的(大多數java實現的都是綠色的),可以直接解壓,然後在eclipse中配置。在eclipse中Window->Server->Runtime Environment中Add一個tomcat執行個體,注意需要選擇jdk,需要選擇當前jdk支援的版本。然後再下方工作列裡面找到Servers,如果沒有可以再Window->Show View中選擇Servers添加,添加了之後可以在這裡create a new server。選擇剛剛建立的tomcat執行個體,然後從Avaliable的resources中選擇一個加入到右邊Configured中(Avaliable是根據工程中是否有web.xml產生的)。 第八步:配置tomcat雙擊新建立的Tomcat Server,進入Overview頁面,這個頁面可以配置這個工程運行tomcat執行個體,主要配置包括連接埠號碼,部署目錄等等,如果連接埠或檔案不衝突的話盡量不要修改,需要修改的一處是Server Options中勾選上“Publish module contexts to separate XML files”,雖然不知道這個是做什麼的,但是血和淚的教訓告訴我要選上這個,直接儲存。第九步:啟動tomcat這裡可能有人要問了,為什麼eclipse上沒有配置tomcat的外掛程式啊,我到哪裡去啟動tomcat!難道沒有那個貓頭就不行了嗎?說實話,配置那個貓頭經常遇到網路問題失敗,於是不再嘗試了,而直接通過右擊第七步建立的tomcat執行個體就可以完成貓頭所能完成的所有功能,為什麼還配置那個外掛程式呢?右鍵Start,然後祈禱啟動的時候不要出現什麼錯誤,出現錯誤就google一下吧,基本上spring的問題都有人踩過坑的。第十步:測試啟動完成之後,一般不會出現什麼錯誤,開啟瀏覽器輸入http://localhost:8080/SpringTest/test/hello?user=World,此時就可以看到如下的輸出:![](http://i2.51cto.com/images/blog/201808/04/901c622732b765360b907ac1119750c2.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)JAVA開發血淚之路:一步步搭建spring架構出現了我們想要的結果,此時的心情只能用愉悅來形容,但是我們指定了需要攜帶user參數,如果url中不帶參數則出現如下的錯誤:![](http://i2.51cto.com/images/blog/201808/04/57b24556b785dc467517d24f6c90ae2f.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)JAVA開發血淚之路:一步步搭建spring架構如果不希望出現這樣的情況可以再helloWorld這個參數的@RequestParam修改為@RequestParam(value=”user”,required=false, defaultValue=”World”),當然這隻是一個非常小的example說明註解的強大,spring還提供了豐富的註解來實現不同的需求,簡直就是用配置和註解來編程。第十一步:複雜資料結構上面的測試都是返回一個String,但是我們一般開發的時候會涉及到複雜的資料結構,大家一般都會用json來作為通訊的序列化工具,那麼怎麼在spring中支援json呢?在測試這個之前,先看一下現在對於複雜資料結構(例如Map)怎麼返回的。我們在Controller中添加一個函數:@RequestMapping(value = "helloMap" , method = RequestMethod.GET)@ResponseBodypublic Map helloMap(@RequestParam(value="user" ,required=false, defaultValue= "World") String userName) {Map ret = new HashMap();ret.put( "hello", userName );return ret ;}然後再瀏覽器中測試一下,出現如下的錯誤” The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request “accept” headers.”,這個感覺是因為accept預設只接受text格式,而這個介面的傳回值沒有返回text對象。如果要支援json,其實只需要在spring中配置一下message-converters就可以了,每一個json庫都提供這樣的Converter的,我們這裡以Fastjson作為樣本吧,首先需要在pom.xml添加fastjson的依賴。然後在applicationContext.xml中添加如下配置: text/html; charset=UTF-8 application/json; charset=UTF-8這時候再重試剛才的url發現可以返回map轉換成json的樣子了。![](http://i2.51cto.com/images/blog/201808/04/3d3fa1ee3a157fcfec9a3f97f2c0e5ac.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)第十一步:折騰好了,上面的樣本已經足夠完成一個比較簡單的web服務了,當然我們還沒有前端,只不過是通常作為服務端提供的Http服務罷了,不過有了spring我們可以省去大量的代碼,當然通過HTTP+JSON提供服務端介面比thrift等RPC架構要中一些,效率或許要低一些,但是它的優勢是比較簡單啊,調試比較方便啊。。。感覺大量的前端和服務端通訊大都使用這樣的方式。總結學會了spring架構的搭建,媽媽再也不用擔心我寫web介面了,當然spring還能夠適配各種各樣的組件,例如通常使用的mybatis串連資料庫,jedis串連redis等;還有豐富的功能讓你盡量通過配置和註解降低不必要的代碼。最近比較好的Spring boot貌似也是web開發神器。這個以後有時間再折騰。 當然本文只是記錄了血淚曆程,spring小白是如何一步步的搭建spring開發環境的,大神輕噴。。

JAVA開發血淚之路:一步步搭建spring架構

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.