Spring MVC 使用Restful風(fēng)格的URL

Restful 是一種web軟件架構(gòu)風(fēng)格赌朋,它不是標(biāo)準(zhǔn)也不是協(xié)議图筹,它倡導(dǎo)的是一個(gè)資源定位及資源操作的風(fēng)格。Restful風(fēng)格的url分別對(duì)應(yīng)了GET菲饼、POST肾砂、PUT、DELETE 四種請(qǐng)求宏悦。一般使用時(shí)主要還是使用GET和POST請(qǐng)求镐确,PUT和DELETE基本不會(huì)使用。

    GET:一般用于查詢饼煞,獲取資源源葫;
    POST:一般用于增加,新建資源砖瞧;
    PUT:一般用于更新息堂,修改資源;
    DELETE:一般用于刪除資源块促。

Restful風(fēng)格的url中可以包含請(qǐng)求參數(shù)變量荣堰,SpringMVC的Handle可以使用@PathVariable注解從url中獲取參數(shù)變量。
事例代碼:
前端頁(yè)面無(wú)法直接發(fā)送PUT和DELETE請(qǐng)求竭翠,如果想要使用PUT和DELETE請(qǐng)求振坚,需要使用POST請(qǐng)求,并在請(qǐng)求中攜帶_method參數(shù)斋扰,在 _method參數(shù)中指定當(dāng)前請(qǐng)求的方式是PUT還是DELETE渡八。同時(shí)還需要在web.xml中配置請(qǐng)求方式過(guò)濾器,在請(qǐng)求方式過(guò)濾器中解析出_method參數(shù)传货,并將請(qǐng)求轉(zhuǎn)換成對(duì)應(yīng)的請(qǐng)求方式屎鳍。

  • 前端 jsp 頁(yè)面代碼
<div>
    <h2>SpringMVC對(duì)Restful風(fēng)格url的支持</h2>
    <fieldset>
        <p>測(cè)試用例:SpringMVC對(duì)Restful風(fēng)格url的支持</p>
        <a href="/demo/handle/15">rest_get測(cè)試</a>
        <form method="post" action="/demo/handle">
            <input type="text" name="username"/>
            <input type="submit" value="提交rest_post請(qǐng)求"/>
        </form>
        <form method="post" action="/demo/handle/15/lisi">
            <input type="hidden" name="_method" value="put"/>
            <input type="submit" value="提交rest_put請(qǐng)求"/>
        </form>
        <form method="post" action="/demo/handle/15">
            <input type="hidden" name="_method" value="delete"/>
            <input type="submit" value="提交rest_delete請(qǐng)求"/>
        </form>
    </fieldset>
</div>
  • 后臺(tái) Handle 代碼
@Controller
@RequestMapping("/demo")
public class DemoController {

    @RequestMapping(value = "/handle/{id}", method = {RequestMethod.GET})
    public ModelAndView handleGet(@PathVariable("id") int id) {
        //服務(wù)器時(shí)間
        Date date = new Date();
        //返回服務(wù)器時(shí)間到前端頁(yè)面
        //封裝了數(shù)據(jù)和頁(yè)面信息的modelAndView
        ModelAndView modelAndView = new ModelAndView();
        //addObject 其實(shí)是向請(qǐng)求域中request.setAttribute("date",date)
        modelAndView.addObject("date", date);
        //視圖信息(封裝跳轉(zhuǎn)的頁(yè)面信息)
        modelAndView.setViewName("success");
        System.out.println("date: " + date);
        System.out.println("id: " + id);
        System.out.println("get 請(qǐng)求執(zhí)行了......");
        return modelAndView;
    }

    @RequestMapping(value = "/handle", method = {RequestMethod.POST})
    public ModelAndView handlePost(String username) {
        //服務(wù)器時(shí)間
        Date date = new Date();
        //返回服務(wù)器時(shí)間到前端頁(yè)面
        //封裝了數(shù)據(jù)和頁(yè)面信息的modelAndView
        ModelAndView modelAndView = new ModelAndView();
        //addObject 其實(shí)是向請(qǐng)求域中request.setAttribute("date",date)
        modelAndView.addObject("date", date);
        //視圖信息(封裝跳轉(zhuǎn)的頁(yè)面信息)
        modelAndView.setViewName("success");
        System.out.println("date: " + date);
        System.out.println("username: " + username);
        System.out.println("post 請(qǐng)求執(zhí)行了......");
        return modelAndView;
    }

    @RequestMapping(value = "/handle/{id}/{username}", method = {RequestMethod.PUT})
    public ModelAndView handlePut(@PathVariable("id") int id , @PathVariable("username") String username) {
        //服務(wù)器時(shí)間
        Date date = new Date();
        //返回服務(wù)器時(shí)間到前端頁(yè)面
        //封裝了數(shù)據(jù)和頁(yè)面信息的modelAndView
        ModelAndView modelAndView = new ModelAndView();
        //addObject 其實(shí)是向請(qǐng)求域中request.setAttribute("date",date)
        modelAndView.addObject("date", date);
        //視圖信息(封裝跳轉(zhuǎn)的頁(yè)面信息)
        modelAndView.setViewName("success");
        System.out.println("date: " + date);
        System.out.println("id: " + id);
        System.out.println("username: " + username);
        System.out.println("put 請(qǐng)求執(zhí)行了......");
        return modelAndView;
    }

    @RequestMapping(value = "/handle/{id}", method = {RequestMethod.DELETE})
    public ModelAndView handleDelete(@PathVariable("id") int id) {
        //服務(wù)器時(shí)間
        Date date = new Date();
        //返回服務(wù)器時(shí)間到前端頁(yè)面
        //封裝了數(shù)據(jù)和頁(yè)面信息的modelAndView
        ModelAndView modelAndView = new ModelAndView();
        //addObject 其實(shí)是向請(qǐng)求域中request.setAttribute("date",date)
        modelAndView.addObject("date", date);
        //視圖信息(封裝跳轉(zhuǎn)的頁(yè)面信息)
        modelAndView.setViewName("success");
        System.out.println("date: " + date);
        System.out.println("id: " + id);
        System.out.println("delete 請(qǐng)求執(zhí)行了......");
        return modelAndView;
    }
}
  • web.xml配置請(qǐng)求方式過(guò)濾器
<!--springmvc提供的針對(duì)post請(qǐng)求的編碼過(guò)濾器-->
<filter>
  <filter-name>encoding</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
  </init-param>
</filter>

<!--配置springmvc請(qǐng)求方式轉(zhuǎn)換過(guò)濾器,會(huì)檢查請(qǐng)求參數(shù)中是否有_method參數(shù)损离,如果有就 按照指定的請(qǐng)求方式進(jìn)行轉(zhuǎn)換-->
<filter>
  <filter-name>hiddenHttpMethodFilter</filter-name>
  <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>

<filter-mapping>
  <filter-name>encoding</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
  <filter-name>hiddenHttpMethodFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末哥艇,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子僻澎,更是在濱河造成了極大的恐慌貌踏,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窟勃,死亡現(xiàn)場(chǎng)離奇詭異祖乳,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)秉氧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門眷昆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事亚斋∽髅模” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵帅刊,是天一觀的道長(zhǎng)纸泡。 經(jīng)常有香客問(wèn)我,道長(zhǎng)赖瞒,這世上最難降的妖魔是什么女揭? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮栏饮,結(jié)果婚禮上吧兔,老公的妹妹穿的比我還像新娘。我一直安慰自己袍嬉,他們只是感情好境蔼,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著冬竟,像睡著了一般欧穴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上泵殴,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天涮帘,我揣著相機(jī)與錄音,去河邊找鬼笑诅。 笑死调缨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吆你。 我是一名探鬼主播弦叶,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼妇多!你這毒婦竟也來(lái)了伤哺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤者祖,失蹤者是張志新(化名)和其女友劉穎立莉,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體七问,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蜓耻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了械巡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片刹淌。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡饶氏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出有勾,到底是詐尸還是另有隱情疹启,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布蔼卡,位于F島的核電站皮仁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏菲宴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一趋急、第九天 我趴在偏房一處隱蔽的房頂上張望喝峦。 院中可真熱鬧,春花似錦呜达、人聲如沸谣蠢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)眉踱。三九已至,卻和暖如春霜威,著一層夾襖步出監(jiān)牢的瞬間谈喳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工戈泼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留婿禽,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓大猛,卻偏偏與公主長(zhǎng)得像扭倾,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子挽绩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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