码迷,mamicode.com
首页 > 其他好文 > 详细

Struts2中Action通配符的配置

时间:2015-03-20 12:59:01      阅读:153      评论:0      收藏:0      [点我收藏+]

标签: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配置文件的代码量,提高效率,写得不好,请见谅,如有错误,请指出,谢谢!



Struts2中Action通配符的配置

标签:struts2   action通配符的配置   

原文地址:http://blog.csdn.net/u012561176/article/details/44465695

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!