JAVA開(kāi)發(fā)血淚之路:一步步搭建spring框架-創(chuàng)新互聯(lián)

前言

作為一個(gè)服務(wù)端開(kāi)發(fā)感覺(jué)一直挺排斥框架這種東西的,總覺(jué)得什么實(shí)現(xiàn)邏輯都幫你封裝在里面了,你只需要配置這配置那個(gè),出了問(wèn)題也不知道怎么排查,之前即使寫web程序也寧愿使用jetty這樣的嵌入式的web server實(shí)現(xiàn),自己寫servlet,總感覺(jué)從main函數(shù)開(kāi)始都在自己的掌控范圍之內(nèi),但是這樣的方式的確有點(diǎn)原始,也看到各種各樣的開(kāi)源系統(tǒng)使用spring實(shí)現(xiàn)web服務(wù),雖然代碼總是能夠看明白,但是還是不曉得一步步是怎么搭建的,于是抽出一個(gè)周末折騰折騰,不搞不知道,原來(lái)這玩意能把一個(gè)不熟悉的用戶搞崩潰,本文主要介紹我是如何搭建一個(gè)spring環(huán)境的(話說(shuō)還真的分不清spring和springmvn),雖然在大多數(shù)web開(kāi)發(fā)看來(lái)這是雕蟲(chóng)小技。

創(chuàng)新互聯(lián)從2013年開(kāi)始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元漢壽做網(wǎng)站,已為上家服務(wù),為漢壽各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108

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

下面就從純工程的角度上解釋如何一步步的搭建這樣的環(huán)境的,沒(méi)有原理,有原理也是我純屬猜測(cè)的,沒(méi)有看過(guò)源碼。

詳細(xì)步驟

第一步:創(chuàng)建一個(gè)maven工程
這是再熟悉不過(guò)的流程了,但是一般我不推薦選擇Archetype,只是創(chuàng)建一個(gè)simple project就可以了,前者總是創(chuàng)建失?。▌?chuàng)建Archetype模式的可以讓IDE做更多的事情)。其實(shí)在何謂maven工程,在我看來(lái)就是一個(gè)帶有pom.xml的java工程罷了,然后再把代碼的路徑設(shè)置為src/main/java類似這樣的結(jié)構(gòu),所以我們只需要用IDE幫我們創(chuàng)建一個(gè)帶有pom.xml的工程就可以了,我們自己寫一個(gè)dependency和build參數(shù)。

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

第二步:修改工程配置
這里需要修改的配置有兩個(gè),只需要注意修改之后的樣子就可以了:

1、Project Facets:雖然不知道這里配置什么的,但是一次次的吃了這個(gè)的虧,這里要配置的是Java選擇1.6以上(最好1.7吧),然后選擇Dynamic Web Module,下方出現(xiàn)如下的界面:
這里寫圖片描述
如果沒(méi)出現(xiàn)則可以先勾掉Dynamic Web Module,然后保存,然后再次點(diǎn)進(jìn)去Project Facets,選擇Dynamic Web Module,這時(shí)候就出現(xiàn)了這樣的界面,注意最好不要選擇3.0,之前遇到過(guò)3.0不兼容的問(wèn)題,jdk1.7 + 2.5版本是可以正常運(yùn)行的。

點(diǎn)進(jìn)去“Further configuration avaliable…”進(jìn)行配置,將Context directory修改成,并選擇生成web.xml,保存。如下圖:

這里寫圖片描述
此時(shí)你會(huì)看到你的工程結(jié)構(gòu)如下圖,src/main目錄下出現(xiàn)了java/resources/webapp三個(gè)目錄。

這里寫圖片描述
2、配置Deployment Assembly,這里配置的Source和Deploy Path,表示在工程部署的時(shí)候會(huì)將source目錄下的內(nèi)容拷貝到tomcat部署目錄/Deploy Path下。這里需要配置的如下圖所示:
這里寫圖片描述
例如第一條表示會(huì)將工程中src/main/java目錄下的源代碼編譯之后放到部署目錄/WEB-INF/classes目錄下,最后一條表示會(huì)將該工程的maven依賴拷貝到部署目錄/WEB-INF/lib目錄下。據(jù)我觀察發(fā)現(xiàn),其實(shí)tomcat目錄運(yùn)行過(guò)程中會(huì)將部署部署目錄/WEB-INF/classes、部署目錄/WEB-INF/lib加入到classpath中,所以將配置文件和編譯完成的class文件放到classes下,依賴的jar放到lib目錄下都是可以在啟動(dòng)java程序時(shí)找得到的。

第三步:下載spring依賴
spring的jar比較多,最基本的功能也需要如下的幾個(gè)dependency:

<properties >
<spring.version >4.3.7.RELEASE </spring.version>
</properties >

<dependencies >
<dependency>
<groupId> org.springframework</groupId >
<artifactId> spring-context</artifactId >
<version> ${spring.version}</version >
</dependency>
<dependency>
<groupId> org.springframework</groupId >
<artifactId> spring-core</artifactId >
<version> ${spring.version}</version >
</dependency>
<dependency>
<groupId> org.springframework</groupId >
<artifactId> spring-beans</artifactId >
<version> ${spring.version}</version >
</dependency>
<dependency >
<groupId> org.springframework</groupId >
<artifactId> spring-web</artifactId >
<version> ${spring.version}</version >
</dependency>
<dependency>
<groupId> org.springframework</groupId >
<artifactId> spring-webmvc </artifactId>
<version> ${spring.version}</version >
</dependency>
</dependencies >

spring的不同的依賴使用的版本要保持一致。

第四步:編寫代碼
我們寫一個(gè)簡(jiǎn)單的controller,這個(gè)controller返回一個(gè)“Hello ${username}”字符串。

package com.fengyu.test;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/test" )
public class SimpleController {
@RequestMapping(value = "hello", method = RequestMethod.GET)@ResponseBody
br/>@ResponseBody
return "Hello " + userName + " !" ;
}
}

第五步:spring配置文件
spring配置文件一般取名叫”applicationContext.xml”,當(dāng)然這個(gè)不是spring默認(rèn)的配置名,還是需要在web.xml中指定,這里我們只配置spring的配置文件,其實(shí)spring配置中主要是對(duì)一些bean的配置,這里我們暫時(shí)不需要?jiǎng)?chuàng)建任何bean,就只需要簡(jiǎn)單地加一下掃描路徑就可以了。

<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 />
<!-- 自動(dòng)掃描web包 ,將帶有注解的類 納入spring容器管理 -->  
<context:component-scan base-package="com.fengyu.test"></context:component-scan>

</beans>

這種配置文件一般放在src/main/resources目錄下,前面我們已經(jīng)配置部署拷貝的設(shè)置,他會(huì)在部署時(shí)被拷貝到WEB-INF/classes/目錄下,這里只配置了兩項(xiàng)其中context:annotation-config是告訴spring識(shí)別注解配置,后面的scan表示要掃描的類的package。

第六步:配置web.xml
web.xml使我們第二步配置時(shí)自動(dòng)生成的,它是tomcat啟動(dòng)時(shí)需要依賴的配置,里面可以配置一些servlet、filter、listener等,對(duì)于簡(jiǎn)單使用spring而言,一般只配置一個(gè)servlet,所有的請(qǐng)求都有這個(gè)servlet進(jìn)行路由處理。

<?xml version= "1.0" encoding ="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id= "WebApp_ID" version ="2.5">
<servlet >
<servlet-name> DispatcherServlet</servlet-name >
<servlet-class> org.springframework.web.servlet.DispatcherServlet</servlet-class >
<init-param>
<param-name> contextConfigLocation</param-name >
<param-value> classpath:applicationContext.xml</param-value >
</init-param>
<load-on-startup> 1</ load-on-startup>
</servlet >
<servlet-mapping >
<servlet-name> DispatcherServlet</servlet-name >
<url-pattern> /</ url-pattern>
</servlet-mapping >
</web-app>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
可以看到我們只配置了一個(gè)DispatcherServlet,它處理所有的url請(qǐng)求,它初始化需要的配置文件會(huì)classpath下找applicationContext.xml,剛才已經(jīng)介紹,在部署的時(shí)候resources下的文件會(huì)拷貝到WEB-INF/classes目錄下并且加入到j(luò)ava啟動(dòng)的classpath下。

第七步:部署tomcat
首先需要下載一個(gè)tomcat,tomcat 7.x是一個(gè)不錯(cuò)的選擇,由于tomcat是綠色的(大多數(shù)java實(shí)現(xiàn)的都是綠色的),可以直接解壓,然后在eclipse中配置。在eclipse中Window->Server->Runtime Environment中Add一個(gè)tomcat實(shí)例,注意需要選擇jdk,需要選擇當(dāng)前jdk支持的版本。

然后再下方任務(wù)欄里面找到Servers,如果沒(méi)有可以再Window->Show View中選擇Servers添加,添加了之后可以在這里create a new server。選擇剛剛創(chuàng)建的tomcat實(shí)例,然后從Avaliable的resources中選擇一個(gè)加入到右邊Configured中(Avaliable是根據(jù)工程中是否有web.xml生成的)。

第八步:配置tomcat
雙擊新創(chuàng)建的Tomcat Server,進(jìn)入Overview頁(yè)面,這個(gè)頁(yè)面可以配置這個(gè)工程運(yùn)行tomcat實(shí)例,主要配置包括端口號(hào),部署目錄等等,如果端口或文件不沖突的話盡量不要修改,需要修改的一處是Server Options中勾選上“Publish module contexts to separate XML files”,雖然不知道這個(gè)是做什么的,但是血和淚的教訓(xùn)告訴我要選上這個(gè),直接保存。

第九步:?jiǎn)?dòng)tomcat
這里可能有人要問(wèn)了,為什么eclipse上沒(méi)有配置tomcat的插件啊,我到哪里去啟動(dòng)tomcat!難道沒(méi)有那個(gè)貓頭就不行了嗎?說(shuō)實(shí)話,配置那個(gè)貓頭經(jīng)常遇到網(wǎng)絡(luò)問(wèn)題失敗,于是不再嘗試了,而直接通過(guò)右擊第七步創(chuàng)建的tomcat實(shí)例就可以完成貓頭所能完成的所有功能,為什么還配置那個(gè)插件呢?右鍵Start,然后祈禱啟動(dòng)的時(shí)候不要出現(xiàn)什么錯(cuò)誤,出現(xiàn)錯(cuò)誤就google一下吧,基本上spring的問(wèn)題都有人踩過(guò)坑的。

第十步:測(cè)試
啟動(dòng)完成之后,一般不會(huì)出現(xiàn)什么錯(cuò)誤,打開(kāi)瀏覽器輸入http://localhost:8080/SpringTest/test/hello?user=World,此時(shí)就可以看到如下的輸出:

這里寫圖片描述
出現(xiàn)了我們想要的結(jié)果,此時(shí)的心情只能用愉悅來(lái)形容,但是我們指定了需要攜帶user參數(shù),如果url中不帶參數(shù)則出現(xiàn)如下的錯(cuò)誤:

這里寫圖片描述
如果不希望出現(xiàn)這樣的情況可以再helloWorld這個(gè)參數(shù)的@RequestParam修改為@RequestParam(value=”user”,required=false, defaultValue=”World”),當(dāng)然這只是一個(gè)非常小的example說(shuō)明注解的強(qiáng)大,spring還提供了豐富的注解來(lái)實(shí)現(xiàn)不同的需求,簡(jiǎn)直就是用配置和注解來(lái)編程。

第十一步:復(fù)雜數(shù)據(jù)結(jié)構(gòu)
上面的測(cè)試都是返回一個(gè)String,但是我們一般開(kāi)發(fā)的時(shí)候會(huì)涉及到復(fù)雜的數(shù)據(jù)結(jié)構(gòu),大家一般都會(huì)用json來(lái)作為通信的序列化工具,那么怎么在spring中支持json呢?在測(cè)試這個(gè)之前,先看一下現(xiàn)在對(duì)于復(fù)雜數(shù)據(jù)結(jié)構(gòu)(例如Map)怎么返回的。
我們?cè)贑ontroller中添加一個(gè)函數(shù):

@RequestMapping(value = "helloMap" , method = RequestMethod.GET)
@ResponseBody
public Map<String, String> helloMap(@RequestParam(value="user" ,required=false, defaultValue= "World") String userName) {
      Map<String, String> ret = new HashMap<String, String>();
       ret.put( "hello", userName );
       return ret ;

}
1
2
3
4
5
6
7
8
然后再瀏覽器中測(cè)試一下,出現(xiàn)如下的錯(cuò)誤” The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request “accept” headers.”,這個(gè)感覺(jué)是因?yàn)閍ccept默認(rèn)只接受text格式,而這個(gè)接口的返回值沒(méi)有返回text對(duì)象。

如果要支持json,其實(shí)只需要在spring中配置一下message-converters就可以了,每一個(gè)json庫(kù)都提供這樣的Converter的,我們這里以Fastjson作為示例吧,首先需要在pom.xml添加fastjson的依賴。然后在applicationContext.xml中添加如下配置:

<mvc:annotation-driven>
<mvc:message-converters register-defaults="false" >
<bean
class= "com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter" >
<property name= "supportedMediaTypes">
<list>
<value> text/html; charset=UTF-8</value >
<value> application/json; charset=UTF-8</value >
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
這時(shí)候再重試剛才的url發(fā)現(xiàn)可以返回map轉(zhuǎn)換成json的樣子了。

這里寫圖片描述
第十一步:折騰
好了,上面的示例已經(jīng)足夠完成一個(gè)比較簡(jiǎn)單的web服務(wù)了,當(dāng)然我們還沒(méi)有前端,只不過(guò)是通常作為服務(wù)端提供的Http服務(wù)罷了,不過(guò)有了spring我們可以省去大量的代碼,當(dāng)然通過(guò)HTTP+JSON提供服務(wù)端接口比thrift等RPC框架要中一些,效率或許要低一些,但是它的優(yōu)勢(shì)是比較簡(jiǎn)單啊,調(diào)試比較方便啊。。。感覺(jué)大量的前端和服務(wù)端通信大都使用這樣的方式。

總結(jié)
學(xué)會(huì)了spring框架的搭建,媽媽再也不用擔(dān)心我寫web接口了,當(dāng)然spring還能夠適配各種各樣的組件,例如通常使用的mybatis連接數(shù)據(jù)庫(kù),jedis連接redis等;還有豐富的功能讓你盡量通過(guò)配置和注解降低不必要的代碼。最近比較好的Spring boot貌似也是web開(kāi)發(fā)神器。這個(gè)以后有時(shí)間再折騰。
當(dāng)然本文只是記錄了血淚歷程,spring小白是如何一步步的搭建spring開(kāi)發(fā)環(huán)境的,大神輕噴。。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

當(dāng)前名稱:JAVA開(kāi)發(fā)血淚之路:一步步搭建spring框架-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://bm7419.com/article8/hcjip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、建站公司、網(wǎng)站策劃品牌網(wǎng)站設(shè)計(jì)、定制開(kāi)發(fā)、網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)