溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

基于spring mvc請(qǐng)求controller訪問(wèn)方式的示例分析

發(fā)布時(shí)間:2021-09-08 13:36:09 來(lái)源:億速云 閱讀:168 作者:小新 欄目:開發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)基于spring mvc請(qǐng)求controller訪問(wèn)方式的示例分析的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

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"  >編輯</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;

感謝各位的閱讀!關(guān)于“基于spring mvc請(qǐng)求controller訪問(wèn)方式的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI