Spring Forward 教程展示了如何在 Spring Web 应用中转发请求。
Spring 是用于创建企业应用的流行 Java 应用框架。
转发
视图名称中的特殊forward:
前缀将转发到其他 URL。 转发 URL 可在同一服务器内部内部传输请求,而无需涉及客户端浏览器。 转发的执行频率少于重定向。
重定向与转发
基本上可以通过三种方式处理请求:a)由 Spring 在控制器动作中解决,b)转发至其他控制器动作,c)重定向至客户端以获取另一个 URL。
向前:
- 由 Spring 内部执行
- 浏览器完全不知道转发,因此其原始 URL 保持不变
- 浏览器重新加载结果页面会重复原始请求,并带有原始 URL
- 请求中发送的数据可用于转发的操作
重定向:
- 是一个两步过程
- Spring 指示浏览器获取另一个 URL,该 URL 与原始 URL 不同
- 浏览器重新加载第二个 URL 不会重复原始请求,而是获取第二个 URL
- 在原始请求范围内发送的数据不适用于第二个请求
Spring 转发的例子
提交表单后,以下应用使用转发到其他 URL。 它执行带有forward:
前缀的转发。
这是项目结构。
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
配置 Freemarker。 我们将模板文件的位置设置为 classpath 上的templates
目录。 (resources
在类路径上。)
com/zetcode/controller/MyController.java
MyController
提供了两个 GET 映射。
的请求发送至/sendname
由send()
操作处理。 读取请求参数并将其添加到模型。 最后,它被转发到新的控制器操作。
newpage()
操作将请求解析为show
视图。
resources/templates/show.ftl
show.ftl
显示用户名。
我们运行服务器并找到localhost:8080/sendname?name=Peter
。
服务器日志包含这些行。
在本教程中,我们在 Spring 控制器中执行了正向操作。