博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
配置Action
阅读量:5104 次
发布时间:2019-06-13

本文共 3253 字,大约阅读时间需要 10 分钟。

配置Action

实现了Action类后,就可以在struts.xml中配置该Action类了。配置Action就是让Struts2 知道哪个Action处理哪个请求,也就是完成用户请求和Action之间的对用关系,我们可以认为,Action是Struts2的“程序单元”。

一.包和命名空间

  Struts2使用包来组织命名空间,因此,将Action定义放在包定义下完成,定义Action通过使用<package/>下的<action/>子元素来完成,而每一个<package/>代表一个包

  struts2框架下的核心组件就是Action,拦截器等,Struts2框架使用包来管理Action和拦截器等,每个包就是多个Action,多个拦截器引用的集合。

  配置<package>时必须指定name属性,这个属性是引用该包的唯一标识,除此之外,还可以指定一个extends属性,该属性的属性值必须是另一个包的name属性值。指定extends属性表示让该包继承另一个包,子包可以从一个或者多个父包里继承拦截器,action等配置。

  除此之外,Struts2还提供了一种所谓的抽象包,抽象包是不能有Action定义的,为了显示指定该包是抽象包,可以给包使用abstract="true"属性。

  在struts.xml中,<package/>是用来定义一个包的,每个<package/>元素定义了一个包配置。定义此元素时可以指定如下属性:

  • name:必须属性,该属性指定了该包的名字,该名字是该包被其他包引用时的Key。
  • extends:可选属性,该属性指定该包继承其他包,继承其他包,可以继承其他包中的Action定义,拦截器定义等。
  • namespace:该属性时一个可选属性,该属性定义了该包的命名空间。
  • abstract:可选属性,指定一个包是否是抽象包,抽象包中是不能包含Action定义的,

  因为Struts2的配置文件是从上到下来处理的,所以父包是在子包定义前面定义的。struts的默认包是struts-default。

  每定义一个package时,都可以定义一个namespace属性,指定该包对应的命名空间,Struts2 之所以提供命名空间是因为处理同一个应用中同名的Action,Struts2以命名空间来管理Action,同一个命名空间中不能有同名的Action,不同的命名空间中是可以有同名的Action的,Struts2 是不支持为单独的Action设立命名空间的,而是为包指定命名空间来管理Action的,如果没有给包定义namespace命名空间,则Action是处于默认的包空间下。

/error.jsp
/welcome.jsp
/login.jsp
/success.jsp

 

  如上所示,定义了两个包,一个包没有声明命名空间,一个有命名空间,没有指定命名空间的包是使用默认的命名空间,当某个包指定了命名空间后该包下的所有Action的访问路径是命名空间 +Action名。

  默认命名空间的Action可以处理任何命名空间的Action请求,也就是说,如果URL为/bar/bar.action的请求,但是/bar下是没有bar.action 的Action,则默认空间下的bar.action也可以处理请求,命名空间下的Action只会处理包含根命名的Action请求。

  命名空间只有一个级别,如果请求的URL是/book/search/get.action,系统将会在/book/search的命名空间找名为get的Action,有该Action处理用户的请求,如果没有名为get的Action的话,也不会到/book下找,而是直接进入默认的命名空间下找。

 

二.Action的默认配置

  定义Action时,要指定该Action的name属性,该name属性不仅是Action的名字,也是指定了该Action所处理的请求的URL。

  除此之外,通常还需要为action元素指定一个class属性,其中class属性是指定了Action的实现类。

  class属性不是必须的,如果不为action指定class属性,则默认使用系统的ActionSupport类。

  Action只是一个逻辑控制器,并不对用户生成任何的响应,因此,配置action时应该配置逻辑视图和物理视图资源的对应关系,配置逻辑视图和物理视图之间的映射关系是通过<result>元素来完成 的。

 

三.指定method属性及使用通配符

  一个Action类可以定义成多个逻辑Action,在配置<action...../>元素时,可以为它指定method属性,则可以让它调用指定的方法,而不是在execute方法来处理用户的请求,如下,Action的名字为getBook,实现类为GetBookAction,处理用户请求的方法时login。

.........

 

  

  通过这种方法可以将一个Action类定义为多个Action,既Action类的每个处理方法就是一个Action,前提是这些方法具有相似的方法签名:方法形参列表为空,方法返回值为String,如下:

..........
..........

 

  如上,定义了两个Action,名字不同,处理类是相同的,但处理逻辑不同,处理逻辑是通过method来指定的。

  当我们配置Action时,实际上可认为需要配置三个属性:name指定Action处理怎样的请求,该属性是不可省略的,class属性是指定该Action的处理类,该属性被省略,默认使用ActionSupport作为处理类,method属性指定使用哪个方法处理请求,如果省略,则默认使用execute方法处理请求。

 

四.配置默认的Action

 

  配置默认的action可以使用name=“*”的Action外,Struts 2还支持配置默认的Action。

  配置默认的Action是使用<default-action-ref...../>元素来完成的,如下

 

 

   配置默认的action使用default-action-ref元素,配置该元素时,需要指定一个name属性,该属性指向一个有效的Action,该Action将称为该容器中某认的Action,将默认的Action配置在某认的命名空间里就可以让该Action处理所有的用户请求,因为默认命名空间的Action可以处理任何命名空间的请求。

 

 

转载于:https://www.cnblogs.com/zhilili/p/10953706.html

你可能感兴趣的文章
FastDFS使用
查看>>
服务器解析请求的基本原理
查看>>
pycharm 如何设置方法调用字体颜色
查看>>
VUE源码解析心得
查看>>
[HDU3683 Gomoku]
查看>>
【工具相关】iOS-Reveal的使用
查看>>
整体二分——[Poi2011]Meteors
查看>>
数据库3
查看>>
delphi之事件
查看>>
windows server 2008 r2 安装
查看>>
Enigma –> Sadness
查看>>
存储分类
查看>>
下一代操作系统与软件
查看>>
【iOS越狱开发】如何将应用打包成.ipa文件
查看>>
[NOIP2013提高组] CODEVS 3287 火车运输(MST+LCA)
查看>>
Hat’s Words (分成两个字符串考虑)
查看>>
Yii2 Lesson - 03 Forms in Yii
查看>>
Java对字符串进行的操作
查看>>
Python IO模型
查看>>
Ugly Windows
查看>>