spring mvc 入門(xml配置方式)

spring mvc執(zhí)行流程

請(qǐng)求旅行的第一站是Spring的前端控制器 DispacherServlet,DispacherServlet的任務(wù)是將請(qǐng)求發(fā)送給Spring MVC控制器(Controller)化撕。控制器是一個(gè)用于處理請(qǐng)求的Spring組件。在典型的應(yīng)用中可能會(huì)有多個(gè)控制器了牛,DispacherServlet需要知道應(yīng)該將請(qǐng)求發(fā)送給哪個(gè)控制器觅捆,所以DispacherServlet會(huì)查詢一個(gè)或多個(gè)處理器映射(handler mapping)來確定請(qǐng)求的下一站會(huì)是在哪里盗飒。處理器映射會(huì)根據(jù)請(qǐng)求所攜帶的URL信息來進(jìn)行決策置鼻。
一旦選中了合適的控制器,DispacherServlet會(huì)將請(qǐng)求發(fā)送給選中的控制器取逾。到了控制器庆械,請(qǐng)求會(huì)卸下其負(fù)載(用戶提交的信息)并耐心等待控制器處理這些信息。(實(shí)際上設(shè)計(jì)良好的控制器本身只處理很少菌赖,甚至不處理工作缭乘,而是將業(yè)務(wù)邏輯委托給一個(gè)或多個(gè)服務(wù)對(duì)象進(jìn)行處理)
控制器在完成邏輯處理后,通常會(huì)產(chǎn)生一些信息琉用,這些信息需要返回給用戶并在瀏覽器上顯示堕绩。這些信息被稱為模型(model)。不過僅僅給用戶返回原始的信息是不夠的邑时。這些信息需要以用戶友好的方式進(jìn)行格式化奴紧,一般會(huì)是HTML。所以晶丘,信息需要發(fā)送給一個(gè)視圖(view),通常會(huì)是JSP黍氮。
控制器所做的最后一件事就是將模型數(shù)據(jù)打包,并且標(biāo)示出用于渲染輸出的視圖名浅浮。它接下來會(huì)將請(qǐng)求連同模型和視圖名發(fā)送回DispacerServlet沫浆。
這樣,控制器就不會(huì)與特定的視圖相耦合滚秩,傳遞給DispacherServlet的視圖名并不直接表示某個(gè)特定的JSP,實(shí)際上专执,它并不能確定視圖就是JSP,相反,它僅僅傳遞了一個(gè)邏輯名稱郁油,這個(gè)名字將會(huì)用來查找產(chǎn)生結(jié)果的真正視圖本股。DispacherServlet將會(huì)使用視圖解析器(view resolver)來將邏輯視圖名匹配為一個(gè)特定的視圖實(shí)現(xiàn),它可能是也可能不是JSP桐腌。
既然DispacherServlet已經(jīng)知道由哪個(gè)視圖渲染結(jié)果拄显,那請(qǐng)求的任務(wù)也就基本完成了,它的最后一站是視圖的實(shí)現(xiàn)(可能是JSP)案站,在這里它交付模型數(shù)據(jù)躬审。請(qǐng)求的任務(wù)就完成了。視圖使用模型數(shù)據(jù)渲染輸出,這個(gè)輸出會(huì)通過響應(yīng)對(duì)象傳遞給客戶端(不會(huì)像聽上去那樣硬編碼)

配置前端控制器

web.xml中配置前端控制器

<!--spring mvc 前端控制器-->
<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframe.web.servlet.DispatcherServlet</servlet-class>
    <!-- contextConfigLocation配置spring mvc 加載的配置文件盒件,在加載的配置文件中需要配置處理器映射器蹬碧、適配器等等,如果不配置的話,默認(rèn)加載的WEB-INFO目錄下的servlet名稱-serlvet.xml炒刁。此處不配置的話默認(rèn)加載WEB-INFO/springmvc-servlet.xml-->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springmvc.xml</param-value><!--配置文件所在的路徑-->
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <!--
        第一種:*.action 訪問以.action結(jié)尾由DispatcherServlet進(jìn)行解析
        第二種:/            所有訪問的地址都由DispacherServlet進(jìn)行解析恩沽,對(duì)于靜態(tài)文件(圖片、js等文件)的解析需要配置不讓DispacherServlet進(jìn)行解析翔始,使用此種方法可以實(shí)現(xiàn)RESTful風(fēng)格的url
        第三種:/*          這樣配置不對(duì)罗心,使用這種配置,最終要轉(zhuǎn)發(fā)到一個(gè)jsp頁(yè)面時(shí)城瞎,仍然會(huì)由DispacherServlet解析jsp地址渤闷,不能根據(jù)jsp頁(yè)面找到hander,會(huì)報(bào)錯(cuò)
    -->
    <url-pattern>*.action</url-pattern>
<servlet-mapping>

配置處理器映射器脖镀、處理器適配器飒箭、Handler、視圖解析器

在classpath下的springmvc.xml中配置處理器映射器

<!--beans此處省去約束內(nèi)容蜒灰,代碼中需要寫上-->
<beans>

    <!--處理器映射器
        將bean的name作為url進(jìn)行查找弦蹂,需要在配置Handler時(shí)指定beanname(就是url)
    -->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    <!--處理器適配器
        所有處理器適配器都實(shí)現(xiàn)HandlerAdapter接口,框架將會(huì)根據(jù)這個(gè)接口判斷它是不是一個(gè)適配器
    -->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
    <!--視圖解析器
        需要配置解析jsp的視圖解析器,默認(rèn)使用jstl標(biāo)簽强窖,classpath下面要由jstl的包
    -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!--配置Handler-->
    <bean name="/queryItems.action" class="com.zhangjinbang.springmvcdemo.controller.ItemsController"></bean>

</beans>

通過查看源代碼

public class SimpleControllerHandlerAdapter implements HandlerAdapter{
    
    public boolean support(Object handler){
        return (handler instanceof Controller)
    }
}

此適配器能執(zhí)行實(shí)現(xiàn)Controller接口的Handler

public interface Controller{
    ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response) throws Exception;
}

編寫Handler

Handler需要實(shí)現(xiàn)Controller接口凸椿,才能被SimpleControllerHandlerAdapter適配器執(zhí)行

package com.zhangjinbang.springmvcdemo.controller;

//實(shí)現(xiàn)Controller接口的處理器
public class ItemsController implements Controller{
    @Override
    public ModeAndView handleRequest(HttpServletRequest request,HttpServletResponse response) throws Exception{
        //調(diào)用service查詢數(shù)據(jù)庫(kù),查詢商品列表翅溺,這里作為示例使用靜態(tài)數(shù)據(jù)模擬
        List<Items> itemsList =new ArrayList<Items>();
        //向List中填充靜態(tài)數(shù)據(jù)
        ...省略n行代碼...
        
        
        //返回ModelAndView
        ModelAndView modelAndView =new ModelAndView();
        //相當(dāng)于request.setAttribut方法,在jsp頁(yè)面中通過itemsList取數(shù)據(jù)
        modelAndView.addObject("itemsList",itemsList);//指定數(shù)據(jù)
        //指定視圖
        modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp" );
        return modelAndView;
        
    }
}

視圖編寫

省略n行關(guān)于jsp的筆記脑漫,過

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市咙崎,隨后出現(xiàn)的幾起案子优幸,更是在濱河造成了極大的恐慌,老刑警劉巖叙凡,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劈伴,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡握爷,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門严里,熙熙樓的掌柜王于貴愁眉苦臉地迎上來新啼,“玉大人,你說我怎么就攤上這事刹碾≡镒玻” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)物舒。 經(jīng)常有香客問我色洞,道長(zhǎng),這世上最難降的妖魔是什么冠胯? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任火诸,我火速辦了婚禮,結(jié)果婚禮上荠察,老公的妹妹穿的比我還像新娘置蜀。我一直安慰自己,他們只是感情好悉盆,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布盯荤。 她就那樣靜靜地躺著,像睡著了一般焕盟。 火紅的嫁衣襯著肌膚如雪秋秤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天脚翘,我揣著相機(jī)與錄音航缀,去河邊找鬼。 笑死堰怨,一個(gè)胖子當(dāng)著我的面吹牛芥玉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播备图,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼灿巧,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了揽涮?” 一聲冷哼從身側(cè)響起抠藕,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蒋困,沒想到半個(gè)月后盾似,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡雪标,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年零院,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片村刨。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡告抄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嵌牺,到底是詐尸還是另有隱情打洼,我是刑警寧澤龄糊,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站募疮,受9級(jí)特大地震影響炫惩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜阿浓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一他嚷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧搔扁,春花似錦爸舒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至苛聘,卻和暖如春涂炎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背设哗。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工唱捣, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人网梢。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓震缭,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親战虏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拣宰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)烦感,斷路器巡社,智...
    卡卡羅2017閱讀 134,628評(píng)論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,773評(píng)論 6 342
  • 本章內(nèi)容: 映射請(qǐng)求到Spring控制器 透明地綁定表單參數(shù) 校驗(yàn)表單提交 狀態(tài)管理、工作流以及驗(yàn)證都是Web 開...
    謝隨安閱讀 8,587評(píng)論 0 4
  • 1.Spring web mvc介紹 Spring web mvc和Struts2都屬于表現(xiàn)層的框架,它是Spri...
    七弦桐語(yǔ)閱讀 11,509評(píng)論 2 38
  • 當(dāng)你在抱怨工作不順心手趣,生活不如意時(shí)晌该,常常感慨自己與別人的差距越來越大,一度羨慕他人時(shí)绿渣,是否思考過差距為何如此之大朝群?...
    奔跑的大寶閱讀 172評(píng)論 0 0