【framework】spring3-mvc实例-redirect(请求转发)

简介:

前言
上篇文章为spring-mvc做了个开篇,并且讲解了第一个例子Sample. 这篇文章将简单说一下请求转发,并且简单解释部分注解 

相关信息

该项目例子是spirng-mvc-showcase的RedirectController类,位于org.springframework.samples.mvc.redirect 包内 

类信息

 
 
  1. @Controller   
  2. @RequestMapping("/redirect")   
  3. public class RedirectController {   
  4.     private final ConversionService conversionService;   
  5.  
  6.     @Inject   
  7.     public RedirectController(ConversionService conversionService) {   
  8.         this.conversionService = conversionService;   
  9.     }   
  10.  
  11.     //--完整路径为/redirect/uriTemplate   
  12.     @RequestMapping(value="/uriTemplate"method=RequestMethod.GET)   
  13.     public String uriTemplate(RedirectAttributes redirectAttrs) {   
  14.         redirectAttrs.addAttribute("account", "a123");  //--用作URI的模板参数 即{account}   
  15.         redirectAttrs.addAttribute("date", new LocalDate(2011, 12, 31));  // 追加的查询参数(queryParam)   
  16.         return "redirect:/redirect/{account}";   
  17.     }      
  18.  
  19.     //--完成路径为/redirect/uriComponentsBuilder   
  20.     @RequestMapping(value="/uriComponentsBuilder"method=RequestMethod.GET)   
  21.     public String uriComponentsBuilder() {   
  22.         String date = this.conversionService.convert(new LocalDate(2011, 12, 31), String.class);   
  23.         //UriComponentsBuilder 是用于构建URI的 builder   
  24.         UriComponents redirectUri = UriComponentsBuilder.fromPath("/redirect/{account}").queryParam("date", date)   
  25.                 .build().expand("a123")//--这里代替了show方法的{account}   
  26.                 .encode();   
  27.         return "redirect:" + redirectUri.toUriString();   
  28.     }   
  29.  
  30.     @RequestMapping(value="/{account}"method=RequestMethod.GET)   
  31.     public String show(@PathVariable String account, @RequestParam(required=false) LocalDate date) {   
  32.         return "redirect/redirectResults";//--跳转到/redirect/redirectResults.jsp   
  33.     }   
  34.  
  35. }   

 解读

这个例子主要讲解了通过注解@RequestMapping的一些请求转发工作。

a. @RequestMapping

@RequestMapping不仅用于类,还可以用于方法,并且是一种增量关系。

1. uriTemplate()方法实际被请求URI为/redirect/uriTemplate

2. uriComponentsBuilder() 方法实际被请求URI为 /redirect/uriComponentsBuilder

3. show()方法可以在这里用于接收其他两个方法的请求,并且最终跳转到redirectResults.jsp

b. 两种请求方式

uriTemplate()和uriComponentsBuilder()分别展示了两种请求方式,主要用到了RedirectAttributes 和 UriComponentsBuilder 


关注几个注解

1. @Inject

这个注解在这里功能是@Autowired一样的,@Autowired是spring的注解,而@Inject是JSR-330的注解,又叫java的标准注解(standard annotations)。

注:如果用maven,只需加入如下配置:

 
 
  1. <dependency>   
  2. <groupId>javax.inject</groupId>   
  3. <artifactId>javax.inject</artifactId>   
  4. <version>1</version>   
  5. </dependency> 

或者

自行下载,地址如下http://repo1.maven.org/maven2/javax/inject/javax.inject/1/ 点击javax.inject-1.jar 即可 

对比spring与标准注解JSR-330 

Spring

javax.inject.*

javax.inject 限制/说明

@Autowired

@Inject

@Inject has no 'required' attribute

@Component

@Named

#

@Scope("singleton")

@Singleton

The JSR-330 default scope is like Spring's

prototype. However, in order to keep it consistent

with Spring's general defaults, a JSR-330 bean

declared in the Spring container is a singleton by

default. In order to use a scope other than

singleton, you should use Spring's @Scope

annotation.

javax.inject also provides a @Scope annotation.

Nevertheless, this one is only intended to be used for

creating your own annotations.

@Qualifier

@Named

#

@Value

# 无等效注解

@Required

# 无等效注解

@Lazy

# 无等效注解

#代表不存在,或者不需说明。

2. @PathVariable

       在SpringMVC中,用@PathVariable注解在一个方法的参数上用于绑定这个参数到URI模板值。
       看例子中的show()方法(注意这里的{account}不是SPEL),那为何{account}能够作为被请求的URI?  答案便是@PathVariable注解。 而@RequestParam则是用于 查询参数(queryParam)

3. @RequestParam

    绑定请求参数Controller的方法参数 

3.1 相关注解

    除了@PathVariable和@RequestParam,相关注解还有:

    @RequestHeader

    @RequestBody

    @RequestPart

    HttpEntity<?> 这个简单描述一下:用于访问Servlet请求的HTTP头和content. 

收尾

        我相信,通过这篇文章,你对spring-mvc的请求转发,以及相关注解有了一定认识。修行在个人了,呵呵,这些确实比较简单,希望大家自己也动手熟悉一下。










本文转自 wws5201985 51CTO博客,原文链接:http://blog.51cto.com/yjplxq/977996,如需转载请自行联系原作者
目录
相关文章
|
3月前
|
缓存 安全 Java
Spring Get请求 与post请求
本文详细介绍了Spring框架中GET请求和POST请求的区别及应用场景。GET请求用于从服务器获取资源,参数附在URL末尾,适合查看非敏感信息;POST请求用于向服务器提交数据,参数在请求体中传输,适合处理敏感信息。Spring通过`@GetMapping`和`@PostMapping`注解分别处理这两种请求。此外,文章还提供了示例代码,展示了如何在Spring中实现这两种请求的处理。最后,文章总结了推荐使用POST请求的原因,包括更高的安全性、更大的数据传输量、更好的幂等性及灵活性。
Spring Get请求 与post请求
|
27天前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
103 2
|
2月前
|
设计模式 前端开发 Java
Spring MVC——项目创建和建立请求连接
MVC是一种软件架构设计模式,将应用分为模型、视图和控制器三部分。Spring MVC是基于MVC模式的Web框架,通过`@RequestMapping`等注解实现URL路由映射,支持GET和POST请求,并可传递参数。创建Spring MVC项目与Spring Boot类似,使用`@RestController`注解标记控制器类。
51 1
Spring MVC——项目创建和建立请求连接
|
2月前
|
前端开发 Java Spring
【Spring】“请求“ 之后端传参重命名,传递数组、集合,@PathVariable,@RequestPart
【Spring】“请求“ 之后端传参重命名,传递数组、集合,@PathVariable,@RequestPart
41 2
|
2月前
|
JSON 前端开发 Java
【Spring】“请求“ 之传递 JSON 数据
【Spring】“请求“ 之传递 JSON 数据
98 2
|
2月前
|
前端开发 Java Spring
【Spring】“请求“ 之传递单个参数、传递多个参数和传递对象
【Spring】“请求“ 之传递单个参数、传递多个参数和传递对象
143 2
|
2月前
|
XML Java 应用服务中间件
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
232 2
|
4月前
|
Java API UED
【实战秘籍】Spring Boot开发者的福音:掌握网络防抖动,告别无效请求,提升用户体验!
【8月更文挑战第29天】网络防抖动技术能有效处理频繁触发的事件或请求,避免资源浪费,提升系统响应速度与用户体验。本文介绍如何在Spring Boot中实现防抖动,并提供代码示例。通过使用ScheduledExecutorService,可轻松实现延迟执行功能,确保仅在用户停止输入后才触发操作,大幅减少服务器负载。此外,还可利用`@Async`注解简化异步处理逻辑。防抖动是优化应用性能的关键策略,有助于打造高效稳定的软件系统。
81 2
|
4月前
|
安全 Java 应用服务中间件
如何在 Spring Boot 3.3 中实现请求 IP 白名单拦截功能
【8月更文挑战第30天】在构建Web应用时,确保应用的安全性是至关重要的。其中,对访问者的IP地址进行限制是一种常见的安全措施,特别是通过实施IP白名单策略,可以只允许特定的IP地址或IP段访问应用,从而有效防止未授权的访问。在Spring Boot 3.3中,我们可以通过多种方式实现这一功能,下面将详细介绍几种实用的方法。
313 1
|
2月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
244 2