一、本课目标
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";
}
}
网友评论