Structs2 HelloWorld-04 Result和通配符

本文介绍了Struts2框架中结果处理机制的详细内容,包括result节点的作用、不同类型的响应方式及其配置方法,并探讨了如何通过通配符映射简化大量相似action的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、result

1). result 是 action 节点的子节点

2). result 代表 action 方法执行后, 可能去的一个目的地

3). 一个 action 节点可以配置多个 result 子节点. 

4). result 的 name 属性值对应着 action 方法可能有的一个返回值. 

<result name="index">/index.jsp</result>

5). result 一共有 2 个属性, 还有一个是 type: 表示结果的响应类型

6). result 的 type 属性值在 struts-default 包的 result-types 节点的 name 属性中定义.

常用的有 

  • dispatcher(默认的): 转发. 同 Servlet 中的转发. 
  • redirect: 重定向
  • redirectAction: 重定向到一个 Action
    注意: 通过 redirect 的响应类型也可以便捷的实现 redirectAction 的功能!  
<result name="index" type="redirectAction">
		<param name="actionName">testAction</param>
		<param name="namespace">/test</param>
</result>
或者
<result name="index" type="redirect">/test/testAction.do</result>
<ul><li><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">chain: 转发到一个 Action</span></li></ul>
    注意: 不能通过 type=dispatcher 的方式转发到一个 Action
   
         只能是:
         
<result name="test" type="chain">
		<param name="actionName">testAction</param>
		<param name="namespace">/test</param>
</result>

不能是:

<result name="test">/atguigu/testAction.do</result>

<action name="testResult" class="com.weixuan.structs2.TestResult">
	<result name="success" type="dispatcher">/login-success.jsp</result>
	<result name="login" type="redirect">/Login.jsp</result>
</action>

二、通配符

这个通配符是指通配符映射

一个 Web 应用可能有成百上千个 action 声明. 可以利用 struts 提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系

通配符映射规则

  • 若找到多个匹配, 没有通配符的那个将胜出
  • 若指定的动作不存在, Struts 将会尝试把这个 URI 与任何一个包含着通配符 * 的动作名及进行匹配    
  • 被通配符匹配到的 URI 字符串的子串可以用 {1}, {2} 来引用. {1} 匹配第一个子串, {2} 匹配第二个子串…
  • {0} 匹配整个 URI
  • 若 Struts 找到的带有通配符的匹配不止一个, 则按先后顺序进行匹配
  • * 可以匹配零个或多个字符, 但不包括 / 字符. 如果想把 / 字符包括在内, 需要使用 **. 如果需要对某个字符进行转义, 需要使用 \.
三、项目代码
structs.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" 
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>

	<!-- 配置structs2 可以受理的请求的扩展名 使用constant来设置 -->

	<constant name="structs.action.extension" value="action,do,"></constant>

	<package name="loginUI" namespace="/" extends="struts-default">

		<action name="login-ui">
			<result>/Login.jsp</result>
		</action>
		<action name="userlogin" class="com.weixuan.structs2.UserLogin">
			<result name="login-success">/login-success.jsp</result>
		</action>
		<action name="logout" class="com.weixuan.structs2.UserLogin"
			method="logout">
			<result name="logout-success">/Login.jsp</result>
		</action>

		<action name="testResult" class="com.weixuan.structs2.TestResult">
			<result name="success" type="dispatcher">/login-success.jsp</result>
			<result name="login" type="redirect">/Login.jsp</result>
		</action>


		<!-- 普通的写法 ,为每一个action注册 -->

		<!-- 
		<action name="userAction-save" class="com.weixuan.structs2.UserAction"
			method="save">
			<result name="savesuccess">/save.jsp</result>
		</action>
		<action name="userAction-delete" class="com.weixuan.structs2.UserAction"
			method="delete">
			<result name="deletesuccess">/delete.jsp</result>
		</action>

		<action name="userAction-update" class="com.weixuan.structs2.UserAction"
			method="update">
			<result name="updatesuccess">/update.jsp</result>
		</action>
		<action name="userAction-query" class="com.weixuan.structs2.UserAction"
			method="query">
			<result name="querysuccess">/query.jsp</result>
		</action> -->
		
		<!-- 通配符的写法 -->
		
		<action name="userAction-*" class="com.weixuan.structs2.UserAction" method="{1}">
		
			<result name="{1}success">/{1}.jsp</result>
		</action>
	</package>
</struts>    
action类
package com.weixuan.structs2;

public class UserAction {

	//这是一个action类
	//普通情况下,需要在structs.xml中注册四个action结点
	public String save() {
		System.out.println("save");
		return "savesuccess";
	}

	public String delete() {
		System.out.println("delete");
		return "deletesuccess";
	}

	public String update() {
		System.out.println("update");
		return "updatesuccess";
	}

	public String query() {
		System.out.println("query");
		return "querysuccess";
	}
}

index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
</head>

<body>
	<a href="login-ui.action">Login in</a>
	<br>
	<br>
	<br>
	<br>

	<a href="userAction-save.action">user save</a>
	<br>
	<br>
	<br>
	<br>
	<a href="userAction-delete.action">user delete</a>
	<br>
	<br>
	<br>
	<br>
	<a href="userAction-update.action">user update</a>
	<br>
	<br>
	<br>
	<br>
	<a href="userAction-query.action">user query</a>
	<br>
	<br>
	<br>
	<br>


</body>
</html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值