Struts - 结果和结果类型
-
简述
如前所述,<results> 标签扮演一个角色 view在 Struts2 MVC 框架中。该操作负责执行业务逻辑。执行业务逻辑后的下一步是使用<results> 标签。结果通常会附带一些导航规则。例如,如果操作方法是对用户进行身份验证,则存在三种可能的结果。- 登录成功
- 登录失败 - 用户名或密码不正确
- 帐户被锁定
在这种情况下,操作方法将配置三个可能的结果字符串和三个不同的视图来呈现结果。我们已经在前面的例子中看到了这一点。但是,Struts2 不会束缚您使用 JSP 作为视图技术。毕竟 MVC 范式的整个目的是保持层分离和高度可配置。例如,对于 Web2.0 客户端,您可能希望返回 XML 或 JSON 作为输出。在这种情况下,您可以为 XML 或 JSON 创建一个新的结果类型并实现这一点。Struts 自带了一些预定义的 result types 以及我们已经看到的默认结果类型 dispatcher,用于分派到 JSP 页面。Struts 允许您使用其他标记语言作为视图技术来呈现结果,流行的选择包括Velocity, Freemaker, XSLT 和 Tiles. -
调度程序结果类型
这 dispatcher 结果类型是默认类型,如果未指定其他结果类型,则使用该类型。它用于转发到服务器上的 servlet、JSP、HTML 页面等。它使用RequestDispatcher.forward()方法。我们在前面的示例中看到了“速记”版本,其中我们提供了一个 JSP 路径作为结果标记的主体。<result name = "success"> /HelloWorld.jsp </result>
我们还可以使用 <result...> 元素中的 <param name = "location"> 标签指定 JSP 文件,如下所示 -<result name = "success" type = "dispatcher"> <param name = "location"> /HelloWorld.jsp </param > </result>
我们还可以提供 parse参数,默认为真。parse 参数决定了是否为OGNL 表达式解析location 参数。 -
FreeMaker 结果类型
在这个例子中,我们将看到如何使用 FreeMaker作为视图技术。Freemaker 是一种流行的模板引擎,用于使用预定义模板生成输出。现在让我们创建一个名为的 Freemaker 模板文件hello.fm 具有以下内容 -Hello World ${name}
上面的文件是一个模板,其中 name是一个参数,它将使用定义的动作从外部传递。你将把这个文件保存在你的 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.jc2182.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 文件。现在右键单击项目名称并单击 Export > WAR File 创建一个战争文件。然后将此 WAR 部署到 Tomcat 的 webapps 目录中。最后,启动Tomcat服务器并尝试访问URLhttp://localhost:8080/HelloWorldStruts2/index.jsp. 这将产生以下屏幕。输入值“Struts2”并提交页面。您应该会看到下一页。如您所见,这与 JSP 视图完全相同,只是我们不依赖于使用 JSP 作为视图技术。我们在这个例子中使用了 Freemaker。 -
重定向结果类型
这 redirect结果类型调用标准response.sendRedirect()方法,导致浏览器向给定位置创建新请求。我们可以在 <result...> 元素的主体中或作为 <param name = "location"> 元素提供位置。重定向还支持parse范围。这是一个使用 XML 配置的示例 -<action name = "hello" class = "com.jc2182.struts2.HelloWorldAction" method = "execute"> <result name = "success" type = "redirect"> <param name = "location"> /NewWorld.jsp </param > </result> </action>
因此,只需修改您的 struts.xml 文件以定义如上所述的重定向类型,并创建一个新文件 NewWorld.jpg,您将在 hello 操作返回成功时重定向到该文件。您可以查看Struts 2 Redirect Action示例以更好地理解。