Struts2之Action的配置

一、Action的动态调用方法

Action执行的时候并不一定要执行execute方法,我们可以指定Action执行哪个方法:

方法一:通过methed属性指定执行方法:

<package name="user" extends="struts-default" namespace="/user">
    <!-- method="add"表明调用该action时是执行该action对象的add方法 -->
    <action name="userAdd" class="com.chongqing.action.UserAction" method="add">
        <result>/user_add_success.jsp</result>
    </action>
</package>

这样,只要在action的对象中有一个add的方法,并且返回类型为String就可以了。如果没有使用method属性,则默认执行execute方法

package com.chongqing.action;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {
	public String add() {
		return SUCCESS;
	}

}

方法二:动态方法调用DMI(推荐)

可以在URL地址中动态指定Action执行那个方法。URL地址如下:

http://localhost:8080/Struts2_ActionMethod/user/user!add

方法:action + ! + 方法名
注:只要Action对象中有这个方法,并且返回类型为String就可以调用

这样struts.xml配置文件中不需要配置methed属性。代码如下:

<action name="user" class="com.chongqing.action.UserAction">
            <result>/user_add_success.jsp</result>
        </action>

Action类:

package com.chongqing.action;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {
	public String add() {
		return SUCCESS;
	}
}

总结:推荐使用第二种动态方法调用DMI,因为第一种需要大量的Action配置,后者可以在URL中动态指定执行action中哪个方法。

二、Action通配符(wildcard)的配置

随着Web应用程序的增加,所需的Action也会更多,会导致大量的action映射,使用通配符可以减少action配置的数量,使一些具有类似行为的Action或者Action方法可以使用通用的样式来配置

通配符即星号(*),用于匹配0个或多个字符,在配置action时,可以在action元素的name属性中使用星号(*)来匹配任意的字符。

不过,一定要遵守"约定优于配置"的原则

用法:

星号(*) :表示所有
{数字}:表示第几个通配符
例如:name="Student*": 那么{1}代表第一个星号(*)
         name="*_*"        : 那么{1}代表第一个星号(*) ,{2}代表第二个星号(*)

例子: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="actions" extends="struts-default" namespace="/actions">    <!-- 这个action将匹配所有Student*的名字,比如说星号可以是add,delete等等,对应的action调用方法为add,delete,对应的jsp为:Studentadd_success.jsp和Studentdelete_success.jsp-->
        <action name="Student*" class="com.chongqing.action.StudentAction" method="{1}">
            <result>/Student{1}_success.jsp</result>
        </action>

    <!-- 这个action将匹配所有*_*的名字,-->
        <action name="*_*" class="com.chongqing.action.{1}Action" method="{2}">
            <result>/{1}_{2}_success.jsp</result>
        </action>
    </package>
</struts>

action类的代码:

package com.chongqing.action;

import com.opensymphony.xwork2.ActionSupport;

public class StudentAction extends ActionSupport {
	public String add() {
		return SUCCESS;
	}
	public String delete() {
		return SUCCESS;
	}
}
package com.chongqing.action;

import com.opensymphony.xwork2.ActionSupport;

public class TeacherAction extends ActionSupport {
	public String add() {
		return SUCCESS;
	}

	public String delete() {
		return SUCCESS;
	}
}

相应的jsp页面有:
Course_add_seccess.jsp
Course_delete_success.jsp
Teacher_add_seccess.jsp
Teacher_delete_success.jsp
Studentadd_success.jsp
Studentdelete_success.jsp

解释:

第一个Action的名称为name="Student*" method="{1}",表示所有Action以Student开始的都会执行这个Action(就此程序而言),并且执行Student后字符为方法名的方法,例如:访问的Action为Studentadd,会执行这个Action(Student*),并且执行add的方法.因为{1}在这里代表add,并且返回/Studentadd_success.jsp页面。

第二个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

匹配顺序:当匹配的Action有两个以上时,则会按匹配精确度高的那个Action,当有个相同的匹配精确度时,则按先后顺序进行。

时间: 2024-11-08 18:30:46

Struts2之Action的配置的相关文章

Struts2(四)Action二配置

一.method参数 action package com.pb.web.action; public class HourseAction { public String add(){ System.out.println("执行添加操作!"); return "success"; } public String update(){ System.out.println("执行更新操作!"); return "success"

struts2默认Action配置

在项目中,需要在输入错误的url的时候,弹出友好的错误提示页面 在struts2中可以通过配置默认的action达到这个目的 配置方法: <package name="default" namespace="/" extends="struts-default"> <default-action-ref name="index"></default-action-ref> <actio

struts2 ,web.xml中配置为/*.action,运行报错Invalid &lt;url-pattern&gt; /*.action in filter mapp

首先,修改成: <filter-mapping>  <filter-name>struts2</filter-name>  <url-pattern>/*</url-pattern></filter-mapping> 是可以的. 引起此错误的原因如下: 这个对filter的基础知识的理解:容器只认 全名匹配,路径匹配,扩展名匹配./*.action  又是路径匹配,有时扩展名匹配. 容器没办法区分 解决方法:写*.action <

关于Struts2中 Action 配置method的解读

为Action配置method属性: 将Action类中的每一个处理方法都定义成一个逻辑Action方法. <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="

Struts2中Action通配符的配置

1.在我的一篇文章中,介绍了Struts2中Action的动态调用方法:http://blog.csdn.net/u012561176/article/details/44347429 但是那样子还不是最简单的,最简单的是使用通配符,将配置量降到最低,但是这个也比较难已理解,在使用通配符时,一定要遵守"约定优于配置"的原则. 2.接下来介绍一下通配符,使用星号(*)表示所有,{数字}表示第几个通配符,例如: *Action,那么{1}就表示第一个星号(*),如果是 *_* 的话,那

Struts2学习第一天——struts2基本流程与配置

struts2框架 什么是框架,框架有什么用? 框架 是 实现部分功能的代码 (半成品),使用框架简化企业级软件开发 ,提高开发效率. 学习框架 ,清楚的知道框架能做什么? 还有哪些工作需要自己编码实现 ? 什么是struts2框架,它有什么用? Struts 2是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架. 其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大.Struts 2以WebWork为核心 struts2=struts1+

struts2的action是线程安全的,struts1的action不是线程安全的真正原因

为什么struts2的action是线程安全的,struts1的action不是线程安全的? 先对struts1和struts2的原理做一个简单的讲解 对于struts1 ,当第一次**.do的请求过来时,在内存中的actionmapping中找到相对应的action,然后new出这个action放在缓存中,当第二次一样的请求过来时,还是找的这个action,所以对于struts1来说,action是单实例的 ,只有一个,如果在action中定义变量,就要非常小心了,因为并发问题,可能带来灾难性

解决struts2中validation.xml配置无效的问题

解决struts2中validation.xml配置无效的问题,我使用了xml的验证,却始终发现无法生效,后面发现才是xml的头文件的格式问题,修改了一下就好了. 成功的xml <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"> <val

【Struts2】★☆之struts2对Action提交方法进行验证

[Struts2]★☆之struts2对Action提交方法进行验证 在实际的开发项目中,我们通常采用的是js对我们输入的值进行验证,例如,用户名的长度,密码长度,等等.但是这样做,不好之处就是我们可以通过人为的将开发者的验证js注掉,这样就导致验证失败,对后台安全性是一个很大的威胁,在采用struts2进行开发时,我们可以采用框架内置的校验器,对我们的Action进行校验.本文所讲诉的就是如何使用重写struts2中的ActionSupport里面的validate方法对输入值进行校验. ok