Struts2中Action通配符的配置

1.在我的一篇文章中,介绍了Struts2中Action的动态调用方法:http://blog.csdn.net/u012561176/article/details/44347429 

但是那样子还不是最简单的,最简单的是使用通配符,将配置量降到最低,但是这个也比较难已理解,在使用通配符时,一定要遵守“约定优于配置”的原则。


2.接下来介绍一下通配符,使用星号(*)表示所有,{数字}表示第几个通配符,例如: *Action,那么{1}就表示第一个星号(*),如果是 *_* 的话,那么{1}就代表第一个星号(*),那么{2}就代表第二个星号(*)。


3.接下来附上一个小实例,首先新建一个struts2项目ActionTest3,搭建好环境之后,在src目录下新建一个UserAction类,放在com.gk.user包下,UserAction.java文件代码如下:

package com.gk.user;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {

	public String add(){
		return "success";
	}
	
	public String delete(){
		return "success";
	}
	
	public String update(){
		return "success";
	}
	
	public String find(){
		return "success";
	}
	
	
}


然后我们打开WebRoot目录下的index.jsp页面,把编码方式设置成utf-8,然后使用通配符,将配置降到最低,具体代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
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="User_add">添加用户</a><br>
    <a href="User_delete">删除用户</a><br>
    <a href="User_update">修改用户</a><br>
    <a href="User_find">查询用户</a><br>
  </body>
</html>

接下来我们就可以配置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.enable.DynamicMethodInvocation" value="true"></constant>
<constant name="struts.devMode" value="true"></constant>
	<package name="user" namespace="/" extends="struts-default">
		<action name="*_*" class="com.gk.user.{1}Action" method="{2}">
			<result name="success">/{1}_{2}.jsp</result>
		</action>
	</package>
</struts>


struts.xml文件配置中,action中的name属性设置为 *_* ,其中{1}就代表第一个星号,{2}就代表第二个星号。然后class属性设置为com.gk.user.{1}Action,在index.jsp文件下我们使用通配符,将配置降到最低,如User_add,所以这个class属性应该是为com.gk.user.UserAction,然后{1}又代表第一个星号,所以第一个星号即为User。

然后method属性有为{2},{2}又代表第二个星号,其中index.jsp页面下我们使用通配符,如User_add等等,所以method属性可以指定为UserAction类里面的方法,有add(),delete(),update(),find()方法,所以第二个星号也代表UserAction类下的四个方法名。

后面的result属性,转发到/{1}_{2}.jsp页面,而这里我们就可以根据上面的分析理解为转发到的页面分别为User_add.jsp,User_delete.jsp,User_update.jsp,User_find.jsp。


所以我们便新建4个页面,分别为User_add.jsp,User_delete.jsp,User_update.jsp,User_find.jsp页面,编码方式改为utf-8,代码如下,比较简单,成功转发的话,就显示一句话:

User_add.jsp代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
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 'user_add.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>
  	  添加用户成功
  </body>
</html>


User_delete.jsp代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
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 'user_del.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>
  	删除用户成功
  </body>
</html>


User_update代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
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 'user_update.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>
    	修改成功
  </body>
</html>


User_find.jsp代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
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 'user_find.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>
    	查询成功
  </body>
</html>


然后我们部署这项目到Tomcat服务器上,开启Tomcat服务器,在地址栏下输入http://localhost:8083/ActionTest3/index.jsp ,效果如下:

点击添加用户出现下图:

看见上图跳转到我们使用配置符的action名字,点击删除用户就输出删除用户成功,就不一一展示了。


4.总结一下:上面我们的例子中 Action 的名称 name=”*_*” method=”{2}” class=”…action.{1}Action” 表示所有 Action中包含下划线(“_”) 都会执行这个 Action,例如:Teacher_add,那么会执行这个 Action, 并且 Action 对应的类为 TeacherAction,且执行 Action 中的 add 方法,返回结果页面为/Teacher_add_success.jsp,因为在这里的{1}表示 Teacher,{2}表示 add。


5.以上内容仅供大家学习参考,通配符的配置大家可以灵活应用,可以减少struts.xml配置文件的代码量,提高效率,写得不好,请见谅,如有错误,请指出,谢谢!



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值