`
hain
  • 浏览: 455549 次
  • 来自: ...
社区版块
存档分类
最新评论

ActionMapping

阅读更多
在Struts 1.1之後,很多的请求分配职责都落入了RequestProcessor的手上,ActionServlet则专责於组态配置及应用程式模组的设定。

RequestProcessor采取 Command 模式,根据客户端的请求呼叫Action物件,其分配的依据是客户端请求的URI及Action物件的对应,这些都设定在struts- config.xml的<action-mappings>标签中。

<action-mappings>用来描述一组ActionMapping物件,当中的每一个<action> 标签都对应一个ActionMapping物件,当客户端发出请求至RequestProcessor时,请求的URI对应於< action>标签中设定的path属性,而要呼叫的Action物件则是type属性所设定的物件,RequestProcessor会将请求的 执行工作交给该Action物件来执行。

举个例子来说,如果<action-mappings>设定如下的话:

...
<action-mappings>
    <action
        path="/hello"
        type="onlyfun.caterpillar.HelloAction">
        ....
    </action>

    <action
        path="/login"
        type="onlyfun.caterpillar.LoginAction">
        ....
    </action>
</action-mappings>
...


则当请求的URL是http://localhost:8080/strutsapp/hello.do时, RequestProcessor会使用/hello.do来确认对应的ActionMapping物件(实际上即找出path设定为/hello的 <action>標籤),该ActionMapping物件告知RequestProcessor要使用 onlyfun.caterpillar.HelloAction,而後RequestProcessor会将呼叫HelloAction的 execute()方法,并将ActionMapping物件当作参数传递给它。

RequestProcessor实际上将工作交给Action物件,Action物件在第一次被呼叫时产生,之後一直使用它。 Action物件的运作必须提供一些参数来描述工作的细节,诸如使用哪一个ActionForm、forward对象的查找、错误发生时的页面对象等等, Struts将这些资讯包装在ActionMapping中,并作为参数传送给Action物件,以使得Action在需要相关的资讯时可以从 ActionMapping中取得。

如果客户端请求了struts-config.xml中没有定义的资源,Struts会丢出 404 Invalid path 的讯息,您可以撰写匿名的ActionMapping来提供自己的错误讯息:

...
<action>
    name="error"
    unknown="true"
    forward="/WEB-INF/pages/error.jsp"/>
...


如果RequestProcessor遇到没有定义的Action请求,则会交由匿名的ActionMapping来处理。

在<action>标签中会使用<forward>标签,用於查找与指定Action物件完成之後,要转发请求回应的去向,您使 用ActionMapping的findForward()方法来查找对应的forward对象,另外,您也可以提供一个< global-forward>设定,如果ActionMapping的findForward()方法找不到指定的forward对象,则会查找 <global-forward>所设定的对象,一个设定例子如下:

struts-config.xml
...  <struts-config>     <global-forwards>         <forward             name="welcome"             path="/welcome.do"/>     </global-forwards>    <action-mappings>        <action             path="/welcome              type="onlyfun.caterpillar.WelcomeAction">              <forward                 name="welcomeUser"                  path="/WEB-INF/pages/welcome.jsp"/>          </action>        <action             path="/hello"              type="onlyfun.caterpillar.HelloAction">              <forward                 name="helloUser"                  path="/WEB-INF/pages/hello.jsp"/>          </action>     <action-mappings> </struts-config> ...

<global-forward>提供一个全局可查找的forward对象,在Struts的组态中,可以为每一个 <action>标签指定forward对象,如果在<action>中查找不到,就会至<global- forward>中查找。对於一些共同使用的forward对象,您可以集中於<global-forward>中管理。

在Struts中,ActionMapping继承自ActionConfig,大部份的属性定义实际上都已经在ActionConfig 中完成,在将来ActionMapping有可能会被AutoConfig所取代,不过在目前ActionMapping仍旧存在,根据线上API的说 明,存在的事实基於它仍是现存应用程式所使用到的类别。
分享到:
评论

相关推荐

    ActionForward and ActionMapping

    ActionForward and ActionMapping

    Struts1教程之ActionMapping_动力节点Java学院整理

    Struts1教程之ActionMapping Struts1教程之ActionMapping是一个重要的概念,在Struts1框架中扮演着关键角色。ActionMapping是Struts1框架中的一个核心组件,它负责处理用户请求并将其映射到对应的Action类中。今天...

    用MockStrutsTestCase测试action测试类

    2. **测试环境准备**:MockStrutsTestCase会自动配置一个模拟的Servlet环境,包括ActionServlet、RequestProcessor和ActionMapping等。你需要在测试类中指定待测试的Action类,通常通过覆盖`getActionClass()`方法...

    actionmaping

    标题中的"actionmapping"指的是Struts框架中的一个关键概念,ActionMapping。在Struts框架中,ActionMapping是用来定义用户请求如何映射到特定的Action类的。它在处理Web应用程序的请求分发中起着核心作用,使得不同...

    外文翻译 stus MVC

    The ActionMapping contains the knowledge of how a specific event maps to specific Actions. The ActionServlet (Command) passes the ActionMapping to the Action class via the perform() method. This ...

    ssh(structs,spring,hibernate)框架中的上传下载

    Struts+Spring+Hibernate实现上传下载    本文将围绕SSH文件上传下载的主题,向您详细讲述如何开发基于SSH的Web程序。SSH各框架的均为当前最新版本:  •Struts 1.2  •Spring 1.2.5  •Hibernate 3.0 ...

    strutsinaction

    ### Struts in Action:设计ActionMapping #### 7.1 进入ActionMapping Model2架构鼓励在同一个应用中使用servlet和JSP页面。在Model2架构下,总是从调用一个servlet开始,servlet处理业务逻辑并将控制转到相应的...

    servelt模拟struts1框架

    ActionForm用于封装请求参数,Action是具体的业务处理类,而ActionMapping则定义了请求与Action之间的映射关系。 在模拟Struts1的过程中,我们将创建一个Servlet类,这个类将扮演ActionServlet的角色。首先,我们...

    js宝方法方法法笑嘻嘻典

    【JS宝典:深入理解ActionForward与ActionMapping在Struts2框架中的作用】 在Web开发领域,Struts2框架以其强大的MVC模型而备受推崇,它源于Webwork2框架,后者是一个基于命令模式的Web框架XWork。Webwork的核心...

    Struts课件.doc

    3. 如果配置了Action类,ActionServlet会创建Action类的实例,并调用其execute方法,传入ActionMapping、ActionForm、HttpServletRequest和HttpServletResponse这四个参数。 4. execute方法执行后,ActionServlet...

    Struts教程

    `Action`接口定义了所有业务逻辑处理的入口点,其`execute`方法是主要的执行方法,接收`ActionMapping`, `ActionForm`, `HttpServletRequest`, 和`HttpServletResponse`作为参数,处理业务逻辑后返回一个`Action...

    Struts的工作原理

    它会读取应用目录下的`struts-config.xml`配置文件,从中提取出关于Action、ActionMapping、ActionForm等配置信息,并存储在相应的对象中。 当一个用户的请求到达服务器,`ActionServlet`首先会查找与请求路径相...

    Struts2 S2-033漏洞分析1

    RestActionMapper.java 的 public ActionMapping getMapping(HttpServletRequest request, ConfigurationManager configManager) 的方法获取的,其中会通过 handleDynamicMethodInvocation 方法设置 ActionMapping ...

    王者归来之达内内部绝密Struts课件.doc

    3. 调用`ActionMapping`中指定的`Action`类的`execute`方法,传递`ActionMapping`、`ActionForm`、`HttpServletRequest`和`HttpServletResponse`作为参数。 4. `execute`方法返回一个`ActionForward`对象,`Action...

    Struts framework的工作原理和组件Struts framework的工作原理和组件

    3. **查找ActionMapping**:根据ActionMapping中配置的信息(如路径、类型等),ActionServlet创建相应的Action对象。 4. **创建ActionForm**:如果ActionMapping中指定了ActionForm,则创建相应的ActionForm对象并...

    struts笔记

    3. 如果在`ActionMapping`中定义了`Action`类,那么`ActionServlet`会实例化该`Action`类,并调用其`execute`方法,同时传入`ActionMapping`、`ActionForm`、`HttpServletRequest`和`HttpServletResponse`作为参数。...

    struts 学习笔记

    - 启动时,ActionServlet读取struts-config.xml配置文件,创建ActionMapping对象,定义请求URL与Action类的映射关系。 - 当用户发起请求时,ActionServlet解析URL并查找相应的ActionMapping。 - ActionMapping...

    学生管理的Struts框架开发实例

    3. **ActionMapping**: 在配置文件(如struts-config.xml)中,ActionMapping定义了URL到Action的映射。例如,"/student/add"请求可能映射到AddStudentAction,使得用户在提交添加学生的表单时,Struts知道调用哪个...

    struts2控制器源码讲解

    2. **Action映射**:接着,`FilterDispatcher`通过`actionMapper`对象获取与请求关联的`ActionMapping`。`ActionMapping`是Struts2中的一个重要概念,它定义了请求URL与特定Action类之间的映射关系。`actionMapper`...

Global site tag (gtag.js) - Google Analytics