SpringMVC--注解驱动的控制器

使用基于注解的控制器类,在POJO类定义处标注@Controller,再通过<\context:component-scan/>扫描相应的类包,即可使POJO成为一个能处理HTTP请求的控制器。

DispatcherServlet所提供的默认DefaultAnnotationHandlerMapping就可以满足需求。它将请求映射到使用@RequestMapping注解的方法。

1、@RequestMapping
在控制器的类定义和方法定义处都可以标注@RequestMapping,类定义处的@RequestMapping提供初步的请求映射信息,方法定义处的@RequestMapping提供进一步的细分映射信息。

DispatcherServlet截获请求后,就通过控制器上@RequestMapping提供的映射信息确定请求所对应的处理方法。

1.1、通过请求URL进行映射
@RequestMapping在类定义处指定的URL相对于Web应用的部署路径,而在方法定义处指定的URL则相对于在类定义处指定的URL。

如果在类处未标注@RequestMapping,那么方法处标注的@RequestMapping的URL是相对于Web**应用的部署路径**。

@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/register")
    public String register(){
        return "user/login";
    }
 }

@RequestMapping不但支持标准的URL,还支持Ant风格(?:匹配文件名中的一个字符、*:匹配文件名中的任意字符、**:匹配多层路径),也支持带{xxx}占位符的URL:

//访问路径:http://localhost:8080/spitter/user/aaa/login

@RequestMapping("/*/login")
    public String login(){
        return "user/login";
    }

//访问路径:http://localhost:8080/spitter/user/aaa/bbb/login
@RequestMapping("/**/login")
    public String login(){
        return "user/login";
    }


//访问路径:http://localhost:8080/spitter/user/12343/test/login
@RequestMapping("/{pass}/{userName}/login")
    public ModelAndView login(@PathVariable("pass") String password,@PathVariable String userName){
        User user=new User();
        user.setPassword(password);
        user.setUserName(userName);
        ModelAndView mv=new ModelAndView();
        mv.addObject("user",user);
        mv.setViewName("user/createSuccess");
        return mv;
    }

2、通过请求参数、请求方法类型、请求头进行映射
@RequestMapping的value、method、params、headers,它们可以组合使用,它们之间是 与 的关系,联合使用可以让请求更加精确。

//1、请求方法类型进行映射
@RequestMapping(method = RequestMethod.POST)
    public ModelAndView createUser(User user){
        ModelAndView mv=new ModelAndView();
        mv.addObject("user",user);
        mv.setViewName("user/createSuccess");
        return mv;
    }

//2、请求参数进行映射
//请求参数可以是报文体和URL包含的请求参数
//请求路径:http://localhost:8080/spitter/user?username=zhangsan
@RequestMapping(params = "username")
    public ModelAndView login(@RequestParam("username") String userName){
        User user=new User();
        user.setUserName(userName);
        ModelAndView mv=new ModelAndView();
        mv.addObject("user",user);
        mv.setViewName("user/createSuccess");
        return mv;
    }

//请求头进行映射
 @RequestMapping(headers = "content-type=text/*")
    public String register(){
        return "user/login";
    }

//组合使用,同时满足
@RequestMapping(value = "/register",method = RequestMethod.POST,params = {"param1=value1","param2=value2"},headers = "content-type=text/*")
    public String register(){
        return "user/login";
    }

二、请求处理方法签名

1、使用@RequestParam绑定请求参数值


//它有三个参数:value:参数名;
           //required:是否必须,默认是true;
     //defaultValue:默认参数名,在设置该参数时,required设置为false;
@RequestMapping(value="index",params = "username")
    public ModelAndView login(@RequestParam(value = "username",required = false,defaultValue = "user") String userName){
        User user=new User();
        user.setUserName(userName);
        ModelAndView mv=new ModelAndView();
        mv.addObject("user",user);
        mv.setViewName("user/createSuccess");
        return mv;
    }

2、使用@CookieValue绑定请求中的Cookie值

//它也有相同的三个参数:value、required、defaultValue
@RequestMapping("/index")
    public String getSession(@CookieValue(value = "sessionId",required = false) String sessionId){
        return "user/success";
    }

3、使用@RequestHeader绑定请求报文头的属性值

@RequestMapping(value = "/index",method = RequestMethod.POST)
    public String handle02(@RequestHeader("Accept-Encoding")String encoding){
        return "user/success";
    }

利用PostMan工具测试:
这里写图片描述
4、使用命令/表单对象绑定请求参数值
Spring MVC会按照请求参数名和对象属性名匹配的方式,自动为该对象填充属性值,支持级联的属性名

@RequestMapping(method = RequestMethod.POST)
    public ModelAndView createUser(User user){
        ModelAndView mv=new ModelAndView();
        mv.addObject("user",user);
        mv.setViewName("user/createSuccess");
        return mv;
    }

5、使用Servlet API对象作为入参

public void handle03(HttpServletRequest request, HttpServletResponse response){
        String username= WebUtils.findParameterValue(request,"username");
        response.addCookie(new Cookie("username",username));
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值