Spring 4.x官方参考文档中文版——第21章 Web MVC框架(4)

21.3实现Controller控制器

       Controller控制器可以为你在一个服务接口中定义好的应用行为提供访问权。controller控制器可以理解用户的输入行为,并且把其转化为一个可以通过视图呈现给用户的model模型。Spring以一种高度抽象的方式来实现controller控制器,这样,你就能创建多样化的controller控制器。

        在Spring 2.5中,介绍了在MVC controller控制器中,基于注解编程的model模型,这些模型运用了诸如@RequestMapping,  @RequestParam,@ModelAttribute等的注解。这些注解同时支持Servlet MVC和Portlet MVC。这些Controller在实现时,不需要去继承特定的基础类或者实现特定的接口,除此以外,一般情况下,这些controller也不直接依赖于Servlet和Portlet的API,所以,你可以轻松地配置它,来访问Servlet和Portlet的设备。

小提示:

       在spring-projects Org on Github上可以获取大量使用了注解的Web应用示例,包括 MVCShowcase, MvcAjax, MvcBasic,PetClinic, PetCare等等。

 

        如上所示,@Controller和@RequestMapping注解允许使用灵活的方法名,在这个例子中,这个方法接受了一个Model,并且返回了一个String类型的视图名。在下文中,还将会解释多种方法参数和返回值。@Controller和@RequestMapping等等许多注解组成了Spring MVC的基本实现。这部分文章将介绍这些注解,并且介绍在Servlet环境中这些注解的一般使用方法。

 

以@Controller注解来定义一个controller控制器

        @Controller注解代表某个特定类会被当作controller控制器。Spring不要求你去继承任何controller基类或者去引用Servlet API,当然,如果需要,你也可以引用特定的Servlet特性。

        @Controller作为被注解的类的构造型,代表着这个类所扮演的角色。Dispatcher(分派器)将会为这些注解了的类扫描对应映射的方法,并且检测@RequestMapping注解(详见下一节)。

        你能够利用在dispatcher(分派器)的 context中,使用标准的Springbean定义,显式地定义这些带注解的controller控制器bean。然而,@Controller的构造型,也可以利用在Spring中提供的一种普遍支持的特性(检测在classpath路径下的类并且自动注册它们)来自动检测这些controller bean。

为了启用对这些注解controller控制器的自动检测功能,你需要再你的配置文档中添加组件扫描,见下方XML的spring-context的schema。

 

 

运用@RequestMapping注解映射Request请求

        你可以在整个类上,或者特定的handler处理器方法上使用@RequestMapping注解,来映射例如”/appointments”这样的的URL链接。一般来说,类级别的注解用来映射特定的request请求路径(或者路径类型)到一个整体controller控制器上,通过在类中的方法上添加额外的@RequestMapping注解,来缩窄主要映射的URL,用来处理不同条件的request请求,这些request请求包含如HTTP方法,request的GET,POST方法,或者HTTP的请求参数。

下方的例子(取自于Petcare的样例)展示了在Spring MVC应用中使用这个注解的controller控制器:

 

        在上面的例子中,@RequestMapping在很多地方都用到了,第一个注解是在类上,这表示在这个controller里的所有处理方法都与“/appointments”这个路径有关。get()方法上的@RequestMapping,表示仅接受GET类型的request请求,意味着在”/appointments”下面的HTTP GET请求将实现这个方法。同样的,add()方法也与get()方法解释一致。getNewForm()方法把定义的HTTP方法和路径结合到了一起,所以在”/appointments/new”下的GET请求就能被这个方法处理。

GetForDay()这个方法展示了@RequestMapping方法的另一种用法:URL模板(详见下一节)。

        在类上的@RequestMapping注解并不是必须的,如果没有它,所有路径将是独立的,而不是相关的。以下取自于PetClinic的样例展示了使用了@RequestMapping注解的多行为的controller处理器:

     上方例子中,没有定义GET,PUT,POST等等,因为@RequesstMapping默认会映射所有的HTTP方法,使用@RequestMapping(method=GET)可以缩窄这个映射接受的request请求方法。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Web MVC 框架中,URI Builder 是一个用于构建 URI 的工具类。它可以让你在构建 URI 时更加方便和灵活。 下面我们通过一个例子来演示如何使用 URI Builder。 假设我们有一个控制器方法,它的访问路径为 `/users/{id}`,其中 `{id}` 是一个路径变量,表示用户 ID。我们想要构建这个路径的 URI,同时还想为这个 URI 添加一些查询参数,比如 `name` 和 `age`。我们可以使用 URI Builder 来完成这个任务,代码如下: ```java import org.springframework.web.util.UriComponentsBuilder; ... @RequestMapping("/users/{id}") public String getUser(@PathVariable int id, @RequestParam String name, @RequestParam int age) { UriComponentsBuilder builder = UriComponentsBuilder.fromPath("/users/{id}") .queryParam("name", name) .queryParam("age", age); String uri = builder.buildAndExpand(id).toUriString(); // ... return "user"; } ``` 在上面的代码中,我们首先使用 `UriComponentsBuilder.fromPath()` 方法创建一个 URI Builder 对象,并指定路径为 `/users/{id}`,这里的 `{id}` 是一个路径变量。接着,我们使用 `queryParam()` 方法添加查询参数。最后,我们调用 `buildAndExpand()` 方法来替换路径变量,并构建最终的 URI。 需要注意的是,在使用 `buildAndExpand()` 方法时,我们将用户 ID 作为参数传递给了这个方法。这是因为我们在 URI 中使用了路径变量 `{id}`,需要将其替换为实际的值。 最终,我们调用 `toUriString()` 方法将 URI Builder 对象转换为字符串形式,返回给浏览器。 除了上面的例子,URI Builder 还提供了很多其他的方法,可以让你更加灵活地构建 URI。如果你想要了解更多信息,可以查看 Spring 官方文档中关于 URI Builder 的介绍。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值