基于spring mvc請(qǐng)求controller訪問(wèn)方式
spring mvc請(qǐng)求controller訪問(wèn)
1.一個(gè)Controller里含有不同的請(qǐng)求url
@Controller //類似Struts的Action public class TestController { @RequestMapping("test/login.do") // 請(qǐng)求url地址映射,類似Struts的action-mapping public String testLogin(@RequestParam(value="username")String username, String password, HttpServletRequest request) { // @RequestParam是指請(qǐng)求url地址映射中必須含有的參數(shù)(除非屬性required=false) // @RequestParam可簡(jiǎn)寫為:@RequestParam("username") if (!"admin".equals(username) || !"admin".equals(password)) { return "loginError"; // 跳轉(zhuǎn)頁(yè)面路徑(默認(rèn)為轉(zhuǎn)發(fā)),該路徑不需要包含spring-servlet配置文件中配置的前綴和后綴 } return "loginSuccess"; } }
2.采用一個(gè)url訪問(wèn)
通過(guò)url參數(shù)來(lái)區(qū)分訪問(wèn)不同的方法
@Controller @RequestMapping("/test2/login.do") // 指定唯一一個(gè)*.do請(qǐng)求關(guān)聯(lián)到該Controller public class TestController2 { @RequestMapping public String testLogin(String username, String password, int age) { // 如果不加任何參數(shù),則在請(qǐng)求/test2/login.do時(shí),便默認(rèn)執(zhí)行該方法 if (!"admin".equals(username) || !"admin".equals(password) || age < 5) { return "loginError"; } return "loginSuccess"; } @RequestMapping(params = "method=1", method=RequestMethod.POST) public String testLogin2(String username, String password) { // 依據(jù)params的參數(shù)method的值來(lái)區(qū)分不同的調(diào)用方法 // 可以指定頁(yè)面請(qǐng)求方式的類型,默認(rèn)為get請(qǐng)求 if (!"admin".equals(username) || !"admin".equals(password)) { return "loginError"; } return "loginSuccess"; } @RequestMapping(params = "method=2") public String testLogin3(String username, String password, int age) { if (!"admin".equals(username) || !"admin".equals(password) || age < 5) { return "loginError"; } return "loginSuccess"; } }
3.RequestMapping在Class上
可看做是父Request請(qǐng)求url,而RequestMapping在方法上的可看做是子Request請(qǐng)求url,父子請(qǐng)求url最終會(huì)拼起來(lái)與頁(yè)面請(qǐng)求url進(jìn)行匹配
@Controller @RequestMapping("/test3/*") // 父request請(qǐng)求url public class TestController3 { @RequestMapping("login.do") // 子request請(qǐng)求url,拼接后等價(jià)于/test3/login.do public String testLogin(String username, String password, int age) { if (!"admin".equals(username) || !"admin".equals(password) || age < 5) { return "loginError"; } return "loginSuccess"; } }
4.在SpringMVC中常用的注解
還有@PathVariable,@RequestParam,@PathVariable標(biāo)記在方法的參數(shù)上,利用它標(biāo)記的參數(shù)可以利用請(qǐng)求路徑傳值
@Controller //類似Struts的Action public class TestController { @RequestMapping(value="/comment/{blogId}", method=RequestMethod.POST) public void comment(Comment comment,@PathVariable int blogId) throws IOException { } }
springmvc請(qǐng)求一次,訪問(wèn)多個(gè)controller方法
有一個(gè)需求:請(qǐng)求一次,訪問(wèn)多個(gè)controller中的方法
比如:先執(zhí)行查詢操作,再將查詢出來(lái)的內(nèi)容更新(當(dāng)然也可以將方法寫到bo中,在controller中直接調(diào)用bo的方法,這里只是舉個(gè)例子)
舉例
JSP頁(yè)面
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>在一個(gè)action中執(zhí)行兩個(gè)方法</title> </head> <body> 1 哈哈 7000 <a href="${pageContext.request.contextPath}/emp/find?id=1" rel="external nofollow" style="text-decoration:none">編輯</a> </body> </html>
Controller頁(yè)面
@Controller @RequestMapping("/emp") public class EmpAction { @RequestMapping(value="/find") public String findEmpById(int id) throws Exception{ System.out.println("查詢"+id+"號(hào)員工信息"); //轉(zhuǎn)發(fā)到EmpAction的另一個(gè)方法中去,即再次發(fā)送請(qǐng)求 // return "forward:/emp/update"; //重定向到EmpAction的另一個(gè)方法中去,即再次發(fā)送請(qǐng)求 return "redirect:/emp/update.action?id=" + id; } @RequestMapping(value="/update") public String updateEmpById(int id,Model model) throws Exception{ System.out.println("更新" + id +"號(hào)員工信息"); model.addAttribute("message","更新員工信息成功"); return "success"; } }
結(jié)論
1. ModelAndView并不能實(shí)現(xiàn)兩個(gè)方法之間的數(shù)據(jù)傳遞;
2. 可以通過(guò)Session來(lái)進(jìn)行傳遞。
有多種方法可以實(shí)現(xiàn)Session傳遞
方法1:將HttpServletRequest作為方法形參 通過(guò)request.getSession().addAttribute
方法2:將HttpSession作為方法形參
方法3:通過(guò)@SessionAttribute+@ModelAttribute來(lái)進(jìn)行傳遞
使用HttpSession來(lái)存取數(shù)據(jù),不過(guò)這樣又在springmvc中使用了servlet的內(nèi)容,并不好
3. 使用轉(zhuǎn)發(fā)。在轉(zhuǎn)發(fā)情況下,共享request域?qū)ο?,?huì)將參數(shù)從第一個(gè)業(yè)務(wù)控制方法傳入第二個(gè)業(yè)務(wù)控制方法
return"forward:/emp/update.action";
4. 重定向不共享參數(shù),所以要帶參數(shù)才行
return "redirect:/emp/update.action?id="+ id;
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 使用springmvc的controller層獲取到請(qǐng)求的數(shù)據(jù)方式
- SpringMVC框架中使用Filter實(shí)現(xiàn)請(qǐng)求日志打印方式
- Java Spring MVC獲取請(qǐng)求數(shù)據(jù)詳解操作
- springmvc接口接收參數(shù)與請(qǐng)求參數(shù)格式的整理
- SpringMVC 重新定向redirect請(qǐng)求中攜帶數(shù)據(jù)方式
- 關(guān)于SpringMVC請(qǐng)求域?qū)ο蟮臄?shù)據(jù)共享問(wèn)題
- Java?spring?mvc請(qǐng)求詳情介紹
相關(guān)文章
java學(xué)習(xí)筆記_關(guān)于字符串概述
下面小編就為大家?guī)?lái)一篇java學(xué)習(xí)筆記_關(guān)于字符串概述。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05SpringBoot服務(wù)監(jiān)控機(jī)制原理解析(面試官常問(wèn))
這篇文章主要介紹了SpringBoot服務(wù)監(jiān)控機(jī)制原理解析(面試官常問(wèn)),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04Java實(shí)現(xiàn)文件上傳與文件下載的示例代碼
在開(kāi)發(fā)中項(xiàng)目難免會(huì)遇到文件上傳和下載的情況,這篇文章主要為大家詳細(xì)介紹了Java中實(shí)現(xiàn)文件上傳與文件下載的示例代碼,希望對(duì)大家有所幫助2023-07-07解決java junit單元測(cè)試@Test報(bào)錯(cuò)的問(wèn)題
今天小編就為大家分享一篇解決java junit單元測(cè)試@Test報(bào)錯(cuò)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11Java運(yùn)算符從見(jiàn)過(guò)到掌握下
計(jì)算機(jī)的最基本用途之一就是執(zhí)行數(shù)學(xué)運(yùn)算,作為一門計(jì)算機(jī)語(yǔ)言,Java也提供了一套豐富的運(yùn)算符來(lái)操縱變量,本篇對(duì)大家的學(xué)習(xí)或工作具有一定的價(jià)值,緊接上篇,需要的朋友可以參考下2021-09-09