SpringMVC之:常用注解

@Controller

在 SpringMVC 中,控制器 Controller 负责处理由 DispatcherServlet 分发的请求,SpringMVC 中提供了一个非常简便的定义 Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用 @Controller 标记一个类是 Controller ,这样的 Controller 就能被外界访问到。
先来看一下不使用 @Controller 注解的情况,我们通常要写一个类去实现 Controller 接口:

public class HelloController implements Controller {

    @Override
    public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg", "Hello SpringMVC");
        mv.setViewName("hello");
        return mv;
    }
}

然后需要将这个类交给 SpringIOC 容器,在 xml 中注册 bean:

<bean id="/hello" class="com.jackma.controller.HelloController" />

你会发现,实现 Controller 接口的方式使得每个类只能有一个方法用来处理返回一个视图,并且每写一个Controller 就要注册一次 bean 。若直接使用 @Controller 注解就十分地省心,可以在一个类中处理返回多个视图:

@Controller
public class HelloController {
    @RequestMapping("/hello1")
    public String hello1(Model model) {
        model.addAttribute("msg", "Hello,SpringMVC1!");
        return "hello";
    }

    @RequestMapping("/hello2")
    public String hello2(Model model) {
        model.addAttribute("msg", "Hello,SpringMVC2!");
        return "hello";
    }

    @RequestMapping("/hello3")
    public String hello3(Model model) {
        model.addAttribute("msg", "Hello,SpringMVC3!");
        return "hello";
    }
}

同时搭配上 SpringIOC 的自动扫描,可以省去注册 bean 的步骤:

<!-- 自动扫描:注意修改包名 -->
<context:component-scan base-package="com.jackma.controller"/>

@RequestMapping

基本使用

SpringMVC 使用 @RequestMapping 注解为控制器指定可以处理哪些 URL 请求,DispatcherServlet 截获请求后,就通过控制器上 @RequestMapping 提供的映射信息确定请求所对应的处理方法。该可以定义在类或者方法处,二者的区别是:

  1. 类定义处:提供初步的请求映射信息。相对于 WEB 应用的根目录
  2. 方法处:提供进一步的细分映射信息。相对于类定义处的 URL。若类定义处未标注 @RequestMapping,则方法处标记的 URL 相对于 WEB 应用的根目录

看不懂直接看例子:

@Controller
@RequestMapping("hello") // 定义在类上
public class HelloController {
    @RequestMapping("/h1") // 定义在方法上
    public String hello(Model model) {
        model.addAttribute("msg", "Hello,SpringMVC!");
        return "hello";
    }
}

在这里插入图片描述

属性

  1. value:指定请求的实际地址。
  2. method: 指定请求的method类型, GET、POST、PUT、DELETE 等。
  3. params:指定处理请求的提交内容类型(Content-Type),例如 application/json ,text/html。
  4. headers:指定返回的内容类型,仅当 request 请求头中的(Accept)类型中包含该指定类型才返回。
  5. consumes:指定 request 中必须包含某些参数值时,才让该方法处理。
  6. produces:指定 request 中必须包含某些指定的 header 值,才能让该方法处理请求。

@PathVariable

通过 @PathVariable 注解可以将 URL 中占位符参数绑定到控制器处理方法的入参中:

@Controller
@RequestMapping("hello")
public class HelloController {
    @RequestMapping("/h2/{name}")
    public String hello2(@PathVariable String name, Model model) {
        String str = "欢迎光临 " + name + " ~~~";
        model.addAttribute("msg", str);
        return "hello";
    }
}

然后在 http://localhost:8080/hello/h2/ 后填写 name:
在这里插入图片描述
换一个 name:
在这里插入图片描述
与此类似的有百度百科,修改 URL 最后的名字,就能跳转到相应的资料:
在这里插入图片描述
在这里插入图片描述

后面遇到其他注解再进行补充

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值