- Struts 2 教程
- Struts2 - 首页
- Struts2 - 基本 MVC 架构
- Struts2 - 概述
- Struts2 - 环境设置
- Struts2 - 架构
- Struts2 - 示例
- Struts2 - 配置
- Struts2 - Action
- Struts2 - 拦截器
- Struts2 - 结果类型
- Struts2 - 值栈/OGNL
- Struts2 - 文件上传
- Struts2 - 数据库访问
- Struts2 - 发送邮件
- Struts2 - 验证
- Struts2 - 国际化
- Struts2 - 类型转换
- Struts2 - 主题/模板
- Struts2 - 异常处理
- Struts2 - 注解
- Struts 2 标签
- Struts2 - 控制标签
- Struts2 - 数据标签
- Struts2 - 表单标签
- Struts2 - Ajax 标签
- Struts 2 集成
- Struts2 - Spring
- Struts2 - Tiles
- Struts2 - Hibernate
- Struts 2 有用资源
- Struts2 - 问题与解答
- Struts2 - 快速指南
- Struts2 - 有用资源
- Struts2 - 讨论
Struts 2 - 结果 & 结果类型
如前所述,<results> 标签在 Struts2 MVC 框架中扮演着视图的角色。Action 负责执行业务逻辑。执行业务逻辑后的下一步是使用<results> 标签显示视图。
通常,结果会附带一些导航规则。例如,如果 Action 方法用于验证用户,则可能有三种可能的结果。
- 登录成功
- 登录失败 - 用户名或密码错误
- 账户锁定
在这种情况下,Action 方法将配置三种可能的结果字符串和三种不同的视图来呈现结果。我们在前面的示例中已经看到了这一点。
但是,Struts2 并没有强迫你必须使用 JSP 作为视图技术。毕竟,MVC 范式的全部目的是保持层之间的分离并使其高度可配置。例如,对于 Web2.0 客户端,你可能希望返回 XML 或 JSON 作为输出。在这种情况下,你可以为 XML 或 JSON 创建一个新的结果类型来实现这一点。
Struts 带有一系列预定义的结果类型,我们已经看到的默认结果类型是dispatcher,它用于分派到 JSP 页面。Struts 允许你使用其他标记语言作为视图技术来呈现结果,流行的选择包括Velocity、Freemaker、XSLT 和Tiles。
Dispatcher 结果类型
dispatcher 结果类型是默认类型,如果未指定其他结果类型,则使用它。它用于转发到服务器上的 servlet、JSP、HTML 页面等。它使用RequestDispatcher.forward() 方法。
我们在之前的示例中看到了“简写”版本,我们在其中将 JSP 路径作为结果标签的主体提供。
<result name = "success"> /HelloWorld.jsp </result>
我们还可以使用 <param name = "location"> 标签在 <result...> 元素内指定 JSP 文件,如下所示:
<result name = "success" type = "dispatcher"> <param name = "location"> /HelloWorld.jsp </param > </result>
我们还可以提供一个parse 参数,默认值为 true。parse 参数决定是否解析 location 参数以获取 OGNL 表达式。
FreeMaker 结果类型
在这个例子中,我们将看到如何使用FreeMaker 作为视图技术。Freemaker 是一个流行的模板引擎,用于使用预定义的模板生成输出。现在让我们创建一个名为hello.fm 的 Freemaker 模板文件,内容如下:
Hello World ${name}
以上文件是一个模板,其中name 是一个参数,它将从外部使用定义的 Action 传递。你将把此文件保存在你的 CLASSPATH 中。
接下来,让我们修改struts.xml 以指定如下结果:
<?xml version = "1.0" Encoding = "UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name = "struts.devMode" value = "true" /> <package name = "helloworld" extends = "struts-default"> <action name = "hello" class = "com.tutorialspoint.struts2.HelloWorldAction" method = "execute"> <result name = "success" type = "freemarker"> <param name = "location">/hello.fm</param> </result> </action> </package> </struts>
让我们保留 HelloWorldAction.java、HelloWorldAction.jsp 和 index.jsp 文件,就像我们在示例章节中创建它们一样。
现在右键单击项目名称并单击导出 > WAR 文件以创建 WAR 文件。
然后将此 WAR 部署到 Tomcat 的 webapps 目录中。最后,启动 Tomcat 服务器并尝试访问 URL https://127.0.0.1:8080/HelloWorldStruts2/index.jsp。这将产生以下屏幕。
输入值“Struts2”并提交页面。你应该看到下一页。
如你所见,这与 JSP 视图完全相同,只是我们没有绑定到使用 JSP 作为视图技术。在这个例子中,我们使用了 Freemaker。
重定向结果类型
redirect 结果类型调用标准response.sendRedirect() 方法,导致浏览器向给定位置创建新的请求。
我们可以在 <result...> 元素的主体中或作为 <param name = "location"> 元素提供位置。Redirect 也支持parse 参数。以下是一个使用 XML 配置的示例:
<action name = "hello" class = "com.tutorialspoint.struts2.HelloWorldAction" method = "execute"> <result name = "success" type = "redirect"> <param name = "location"> /NewWorld.jsp </param > </result> </action>
因此,只需修改你的 struts.xml 文件以定义上面提到的重定向类型,并创建一个名为 NewWorld.jpg 的新文件,每当 hello action 返回成功时,你将被重定向到该文件。你可以查看Struts 2 重定向 Action 示例以更好地理解。