Spring 重定向教程展示了如何在 Spring Web 应用中重定向请求。
Spring 是用于创建企业应用的流行 Java 应用框架。
重定向
视图名称中的特殊redirect:
前缀将重定向到其他 URL。 最终效果与控制器已返回RedirectView
的效果相同。 重定向应用于发布/重定向/获取(PRG)场景; PGR 是一种 Web 开发设计模式,可防止重复提交表单。 默认情况下,发送状态代码 302。 如果要更改,可以使用@ResponseStatus
注释处理程序方法的返回类型。
RedirectAttributes
是 Model 接口的一种特殊化,控制器可以用来选择重定向方案的属性。
重定向与转发
基本上可以通过三种方式处理请求:a)由 Spring 在控制器动作中解决,b)转发至其他控制器动作,c)重定向至客户端以获取另一个 URL。
向前:
- 由 Spring 内部执行
- 浏览器完全不知道转发,因此其原始 URL 保持不变
- 浏览器重新加载结果页面会重复原始请求,并带有原始 URL
- 请求中发送的数据可用于转发的操作
重定向:
- 是一个两步过程
- Spring 指示浏览器获取另一个 URL,该 URL 与原始 URL 不同
- 浏览器重新加载第二个 URL 不会重复原始请求,而是获取第二个 URL
- 在原始请求范围内发送的数据不适用于第二个请求
Spring Redirect 示例
提交表单后,以下应用使用重定向到其他 URL。 它使用redirect:
前缀执行重定向。
这是项目结构。
pom.xml
在pom.xml
中,我们具有必要的依赖性。
resources/logback.xml
logback.xml
是 Logback 日志库的配置文件。
com/zetcode/config/MyWebInitializer.java
MyWebInitializer
注册 Spring DispatcherServlet
,它是 Spring Web 应用的前端控制器。
getServletConfigClasses()
返回 Web 配置类。
com/zetcode/config/WebConfig.java
WebConfig
配置 Thymeleaf 模板引擎。 我们将模板文件的位置设置为 classpath 上的templates
目录。 (resources
在类路径上。)
com/zetcode/bean/User.java
这是User
bean。 它填充有来自表单的数据。
com/zetcode/controller/MyController.java
MyController
提供请求路径和处理程序方法之间的映射。
该映射将表单发送给用户。
此映射处理表单。 新用户被“保存”并执行重定向。 用户名通过addAttribute()
添加到重定向属性中。
resources/templates/addUser.html
addUser.html
模板向用户提供表格。 输入的字段将自动插入到User's
属性中。
resources/templates/showUserAdded.html
提交表单后,此模板向用户显示一条消息。 它使用${#request.getParameter('name')}
读取 redirect 属性。
我们运行服务器并找到localhost:8080/addUser
。
在本教程中,我们在 Spring 控制器中执行了重定向。