一、本課目標
image.png
二、參數傳遞
如何把參數從view層傳遞給controller
示例代碼:
package cn.smbms.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
import com.sun.istack.internal.logging.Logger;
@Controller
public class IndexController {
private Logger logger = Logger.getLogger(IndexController.class);
@RequestMapping("/index")
public String index() {
logger.info("hello, springmvc");
return "index";
}
@RequestMapping("/welcome")
public String welcome(@RequestParam String username) {
logger.info("hello, springmvc! username:" + username);
return "index";
}
}
image.png
此時如果使用第一個訪問地址,則可以正常運行,如果采用第二個,則會出錯。所以就引出這個問題:實際業務需求中,對參數的需求并不是必須的,怎么解決?
2.1RequestMapping
image.png
在之前的學習中,如果一個普通的javaBean要變成一個控制器,則在他上面要加上controller注解,針對不同的業務需求,要建立不同的controller,在不同的controller里面有不同的方法,如何把不同的請求與相應的方法對應起來呢?此時就需要@requestMapping注解。所以@requestMapping注解的映射必須是全局唯一的,不可能一個請求映射到兩個處理方法上。
示例代碼:
在添加一個controller:
package cn.smbms.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.sun.istack.internal.logging.Logger;
@Controller
@RequestMapping("/user")
public class UserController {
private Logger logger = Logger.getLogger(IndexController.class);
@RequestMapping("/welcome")
public String welcome(@RequestParam String username){
logger.info("hello, springmvc! username:" + username);
return "index";
}
}
在這個controller中,在類的前面也添加了注解requestMapping,這個里面有一個參數,這個參數的意思是在welcome前面還有一集目錄user,此時再去訪問的話就正常了。
在整個web應用中,requestMapping映射的請求信息必須保持唯一性。在實際開發中,我們經常在類前面加上requestMapping,這樣的話就可以把同一個controller下的方法都安排在同一個請求下。
映射規則
- 通過請求url進行映射
- 通過請求參數進行映射:如果選擇方法參數直接入參的話,方法入參名必須與請求中參數名保持一致
- 通過請求方法進行映射(get、post)
package cn.smbms.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
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.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
import com.sun.istack.internal.logging.Logger;
@Controller
public class IndexController {
private Logger logger = Logger.getLogger(IndexController.class);
@RequestMapping("/index")
public String index() {
logger.info("hello, springmvc");
return "index";
}
@RequestMapping(value="/welcome", method=RequestMethod.GET, params="username")
public String welcome(@RequestParam String username) {
logger.info("hello, springmvc! username:" + username);
return "index";
}
}
2.2RequestParam
image.png