Struts2的核心功能是action,对于开发人员来说,使用Struts2主要就是编写action,action类通常都要实现com.opensymphony.xwork2.Action接口,并实现该接口中的execute()方法。

该方法如下:

public String execute() throws Exception

Struts2并不是要求所有编写的action类都要实现Action接口,也可以直接编写一个普通的Java类作为action,只要实现一个返回类型为String的无参的public方法即可:

public String  xxx()

在实际开发中,action类很少直接实现Action接口,通常都是从com.opensymphony.xwork2.ActionSupport类继承,ActionSupport实现了Action接口和其他一些可选的接口,提供了输入验证,错误信息存取,以及国际化的支持,选择从ActionSupport继承,可以简化action的定义。

开发好action之后,好需要对action进行配置,以告诉Struts2框架,针对某个URL的请求应该交由哪个action进行处理。

1.    Action映射:
  action映射是Struts2框架中的基本” 工作单元”,action映射就是将一个请求URL(即action的名字)映射到一个action类,当一个请求匹配某个action的名字时,框架就使用这个映射来确定如何处理请求。
                   action元素的完整属性表

属性

是否必须

说明

name

action的名字,用于匹配URL

class

Action实现类的完整类名

method

执行Action类时调用的方法

convert

应用于action的类型转换的完整类名

例如:
<action name="user" class="org.lesson05.UserAction">

<result name="success">/user.jsp</result>

</action>

2. 使用method属性
           在配置action时,我们可以通过action元素的method属性来指定action调用的
        方法,所指定的方法,必须遵循与execute方法相同的格式。
           在Struts2.xml文件中,我们可以为同一个action类配置不同的别名,并使用
        method属性。
           在Struts.xml文件中为同一个Action类配置不同的别名
            <!-- 使用method属性 -->

<package name="methods" namespace="/"

extends="struts-default">

<!-- 对应着MethodAction里面的execute方法 -->

<action name="list" class="org.lesson05.MethodAction">

<result name="success">/Methods/list.jsp</result>

</action>

<!-- 对应着MethodAction里面的add方法 -->

<action name="add" class="org.lesson05.MethodAction"

method="add">

<result name="success">/Methods/add.jsp</result>

</action>

<!-- 对应着MethodAction里面的edit方法 -->

<action name="edit" class="org.lesson05.MethodAction"

method="edit">

<result name="success">/Methods/edit.jsp</result>

</action>

<!-- 对应着MethodAction里面的delete方法 -->

<action name="delete"

class="org.lesson05.MethodAction"

method="delete">

<result name="success">/Methods/delete.jsp</result>

</action>

</package>

对应的MethodAction类,代码如下:
            importcom.opensymphony.xwork2.ActionSupport;

public class MethodAction extends ActionSupport

{

@Override

public String execute() throws Exception

{

return SUCCESS;

}

public String add() throws Exception

{

return SUCCESS;

}

public String edit() throws Exception

{

return SUCCESS;

}

public String delete() throws Exception

{

return SUCCESS;

}

}

使用action的method属性可以任意指定处理请求的方法(只要该方法和execute

方法具有相同的格式),这样就可以在同一个类中完成相关的任务,而不需要去编写不

同的Action类。

注意:Struts2在根据action元素的method属性查找方法时有两种途径:

1.查找与method属性值完全一致的方法.
2.查找doMethod()形式的方法.

3.动态方法调用:

另外一种无需配置就可以直接调用Action中的非execute方法的方式,是使用

Struts2的动态方法调用。

动态方法调用是在action的名字中使用感叹号(!)来标识要调用的方法名,其语法格

式为 actionName!methodName.action

例如,我们配置了如下的action

<action name="user" class="org.lesson05.UserAction">

<result name="success">/Methods/list.jsp</result>

</action>

当请求/user!delete.action时,就会自动调用UserAction中的delete()方

提示,这种调用方式会带来安全隐患!

4.模拟Struts1中的ForwardAction
             <action name="user">

<result>/index.jsp</result>

</action>

这样写就可以了.

5.默认的action

         如果请求一个不存在的action,结果将是HTTP404错误。在Struts2中,可以指定一个默认的action,如果一个请求没有其他的action匹配,那么默认的action将被执行。

默认的action使用default-action-ref元素来声明,如下所示:

<!-- 默认action -->

<package name="defaultAction" namespace="/default"

extends="struts-default">

<default-action-ref name="error"></default-action-ref>

<action name="defaultaction"

class="org.lesson05.DefaultAction">

<result name="success">/defaultAction.jsp</result>

</action>

<action name="error">

<result>/error.jsp</result>

</action>

</package>

注意:根据struts-2.0.dtd中定义的package元素的内容模型,

default-acion-ref必须在action元素之前使用。

如果请求的是/default/defaultaction1.action,框架找不到映射到defaultaction1的action,那么名为error的action将被调用。

注意:每个包中都可以有它自己默认的action,但是每一个名称空间应该只有一个默认action。如果具有相同名称空间的多个包中都声明了默认action,那么哪一个action才是默认的将无法保证。

注意:默认action只对action的访问有效。如果你访问一个非action的资源,例如/user.jsp,而该页面不存在,这时仍会看到HTTP404错误。如果想为整个Web应用程序指定默认页面,需要在web.xml文件中对HTTP404错误指定相应的错误处理页面。

6.通配符映射

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

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

以下是在action映射中使用通配符:
               <action name="news*"

class="org.struts2.lesson05.News{1}Action">

<result name="success">/WEB-INF/News/{1}.jsp</result>

</action>

我们在action元素的name属性中使用了通配符(*),允许这个映射匹配所有以/news开始的URL,例如/newsAdd,/newsEdit,/newsDelete,但是,如果请求的是/newsEdit/add,那么这个映射就不会被匹配。

在上面,有一个特殊的记号{1},这是作为占位符使用的,它将被通配符所匹配的值替换,例如访问/newsEdit,通配符(*)匹配的部分是Edit,那么,这个值将替换{1},最终调用的类是org.struts2.lesson05.NewsEditAction,Action

执行成功后导向的结果页面是/WEB-INF/News/Edit.jsp。

在action映射和action结果中,通配符匹配的值可以用记号{N}来访问,N是从1到9的数字,指出替换的是哪一个通配符匹配的值。整个请求URL可以用记号{0}来访问。例如如下的action映射:
     <action name="*_*" class="org.struts2.lesson05.{1}Action"

method="{2}">

<result>/WEB-INF/News/{0}.jsp</result>

</action>

当访问/News_delete时,name属性中的第一个”*”匹配News,第二个”*”匹配delete,class属性中使用的记号是{1},所以被News所替换,method属性中使用的记号是{2},于是被delete所替换。结果映射中使用的记号是{0},于是被整个URL替换,即News_delete所替换。整个替换后的结果是:当请求/News_delete时,框架调用NewsAction实例的delete方法对请求进行处理。执行成功后,请求被导向到/WEB-INF/News/News_delete.jsp页面。

通配符方法设置的另一种常见方式是使用后缀通配符,即将”*”放在action名字的后面,在”*”和名字前缀之间使用一个特殊字符作为分隔,常用的特殊字符是下划线(_),当然也可以使用其他字符。例如:

<action name="News_*"

class="org.struts2.lesson05.NewsAction" method="{1}">

<result>/WEB-INF/News/{0}.jsp</result>

</action>

当请求/News_delete时,调用的是NewsAction实例的delete方法,当请求/News_edit的时候,调用的是NewsAction实例的edit方法。

Struts2配置详情的更多相关文章

  1. [SSH 2] 以网站主页面浅谈Struts2配置

    导读:前面总体的介绍了一下SSH框架,那么作为Struts这一支,具体是怎么配置的呢?本篇博客则主要是以自己做过的实例中的登录一条线,简单介绍一下struts2的配置,如有不妥之处,还请大家多提点提点 ...

  2. MyEclipse下Struts2配置使用和Ajax、JSON的配合

    原创文章,转载请注明:MyEclipse下Struts2配置使用和Ajax.JSON的配合  By Lucio.Yang 新手,初学Struts2的配置,同时尝试与Ajax通过JSON交互.首先介绍M ...

  3. Struts2配置。

    ** Web.xml配置** <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns=&q ...

  4. webpack4.x配置详情

    webpack打包工具现在非常流行,熟悉并且能够进行配置也变得非常重要.在学习和使用的过程中遇到过很多的问题,希望能够让自己记录下来,巩固自己的学习. 1.创建文件目录 先在自己的常用盘中(我自己的项 ...

  5. web09 struts2配置 struts2入门

    电影网站:www.aikan66.com 项目网站:www.aikan66.com游戏网站:www.aikan66.com图片网站:www.aikan66.com书籍网站:www.aikan66.co ...

  6. web 08 struts2入门 struts2配置 struts包

    电影网站:www.aikan66.com 项目网站:www.aikan66.com游戏网站:www.aikan66.com图片网站:www.aikan66.com书籍网站:www.aikan66.co ...

  7. STRUTS2配置动态页面

      STRUTS2配置动态页面 CreateTime--2017年5月11日09:00:31Author:Marydon 1.struts配置 <?xml version="1.0&q ...

  8. 【SSH2(理论篇)】--Struts2配置具体解释

    上篇博客讨论了SSH2框架模型,在开发过程中发现SSH2的开发模型事实上类似于经典的三层模式,在每一层中分别加入了不同的框架,显示层使用的是Struts2进行配置的,业务逻辑层使用的是Spring配置 ...

  9. 史上最强maven配置详情

    史上最强maven配置详情 优点 对第三方依赖库进行了统一的版本管理 统一了构建过程 统一了项目的目录结构 构建 清理 : mvn clear 编译 : mvn compile 测试 : mvn te ...

随机推荐

  1. 热修复框架Tinker的从0到集成之路(转)

    转自:http://blog.csdn.net/lisdye2/article/details/54411727 热修复框架Tinker的从0到集成之路 转载请标明出处: http://blog.cs ...

  2. day03 python数据类型 数字 字符串 布尔

    day03 python   一.基本数据类型     1.int a= 8 a_length = a.bit_length()  #此方法求数字的二进制长度  print(a_length)     ...

  3. loj2064[HAOI2016]找相同字符

    题意:给你两个字符串,问其中各取一个子串,有多少对相同?n<=20W. 标程: #include<bits/stdc++.h> using namespace std; typede ...

  4. 【JNDI】Java Naming and Directory Interface

    一.数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下:   ①加载数据库驱动程序(Class.forName("数据库驱动类");)   ②连接数据库(Conn ...

  5. pandas for python

    http://pandas.pydata.org/pandas-docs/stable/user_guide/index.html 不算太难,需要拿一本线性代数看看矩阵原理即可.重点在于考虑如何运用, ...

  6. PHP FILTER_SANITIZE_NUMBER_FLOAT 过滤器

    定义和用法 FILTER_SANITIZE_NUMBER_FLOAT 过滤器删除浮点数中所有非法的字符. 该过滤器默认允许所有数字以及 + - Name: "number_float&quo ...

  7. NX二次开发-自定义添加右键菜单RegisterConfigureContextMenuCallback

    首先声明这个知识我以前不知道,是夏天的时候看到别人在唐工的QQ群里问的,唐工说西门子官方有这个例子.那个时候我因为在忙其他事情,也就没去研究那个右键菜单到底是怎么做的.关于自定义添加右键菜单Regis ...

  8. php开发面试题---vue面试题(vue.js的好处及作用)

    php开发面试题---vue面试题(vue.js的好处及作用) 一.总结 一句话总结: 双向数据绑定:在做ajax的时候,更新实在是太方便了 用数据绑定的思想,vue可以简单写单个页面,也可以写一个大 ...

  9. VS2012编译WDM驱动

    新版的VS2012中集成了WDK8,而且WDK8中已经没有之前的Build Environment了,看来编译驱动只能通过VS2012了,直接开发WDF驱动很方便直接选取相应的模板即可,若是编译以前的 ...

  10. CentOS 搭建dns服务器 解析任意域名

    DNS服务器IP地址:192.168.1.219 服务器版本:centos6.6一:软件安装 [root@localhost ~]# yum -y install bind* 二:修改主配置文件 [r ...