在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
Struts1教程之ActionMapping Struts1教程之ActionMapping是一个重要的概念,在Struts1框架中扮演着关键角色。ActionMapping是Struts1框架中的一个核心组件,它负责处理用户请求并将其映射到对应的Action类中。今天...
2. **测试环境准备**:MockStrutsTestCase会自动配置一个模拟的Servlet环境,包括ActionServlet、RequestProcessor和ActionMapping等。你需要在测试类中指定待测试的Action类,通常通过覆盖`getActionClass()`方法...
标题中的"actionmapping"指的是Struts框架中的一个关键概念,ActionMapping。在Struts框架中,ActionMapping是用来定义用户请求如何映射到特定的Action类的。它在处理Web应用程序的请求分发中起着核心作用,使得不同...
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 ...
Struts+Spring+Hibernate实现上传下载 本文将围绕SSH文件上传下载的主题,向您详细讲述如何开发基于SSH的Web程序。SSH各框架的均为当前最新版本: •Struts 1.2 •Spring 1.2.5 •Hibernate 3.0 ...
### Struts in Action:设计ActionMapping #### 7.1 进入ActionMapping Model2架构鼓励在同一个应用中使用servlet和JSP页面。在Model2架构下,总是从调用一个servlet开始,servlet处理业务逻辑并将控制转到相应的...
ActionForm用于封装请求参数,Action是具体的业务处理类,而ActionMapping则定义了请求与Action之间的映射关系。 在模拟Struts1的过程中,我们将创建一个Servlet类,这个类将扮演ActionServlet的角色。首先,我们...
【JS宝典:深入理解ActionForward与ActionMapping在Struts2框架中的作用】 在Web开发领域,Struts2框架以其强大的MVC模型而备受推崇,它源于Webwork2框架,后者是一个基于命令模式的Web框架XWork。Webwork的核心...
3. 如果配置了Action类,ActionServlet会创建Action类的实例,并调用其execute方法,传入ActionMapping、ActionForm、HttpServletRequest和HttpServletResponse这四个参数。 4. execute方法执行后,ActionServlet...
`Action`接口定义了所有业务逻辑处理的入口点,其`execute`方法是主要的执行方法,接收`ActionMapping`, `ActionForm`, `HttpServletRequest`, 和`HttpServletResponse`作为参数,处理业务逻辑后返回一个`Action...
它会读取应用目录下的`struts-config.xml`配置文件,从中提取出关于Action、ActionMapping、ActionForm等配置信息,并存储在相应的对象中。 当一个用户的请求到达服务器,`ActionServlet`首先会查找与请求路径相...
RestActionMapper.java 的 public ActionMapping getMapping(HttpServletRequest request, ConfigurationManager configManager) 的方法获取的,其中会通过 handleDynamicMethodInvocation 方法设置 ActionMapping ...
3. 调用`ActionMapping`中指定的`Action`类的`execute`方法,传递`ActionMapping`、`ActionForm`、`HttpServletRequest`和`HttpServletResponse`作为参数。 4. `execute`方法返回一个`ActionForward`对象,`Action...
3. **查找ActionMapping**:根据ActionMapping中配置的信息(如路径、类型等),ActionServlet创建相应的Action对象。 4. **创建ActionForm**:如果ActionMapping中指定了ActionForm,则创建相应的ActionForm对象并...
3. 如果在`ActionMapping`中定义了`Action`类,那么`ActionServlet`会实例化该`Action`类,并调用其`execute`方法,同时传入`ActionMapping`、`ActionForm`、`HttpServletRequest`和`HttpServletResponse`作为参数。...
- 启动时,ActionServlet读取struts-config.xml配置文件,创建ActionMapping对象,定义请求URL与Action类的映射关系。 - 当用户发起请求时,ActionServlet解析URL并查找相应的ActionMapping。 - ActionMapping...
3. **ActionMapping**: 在配置文件(如struts-config.xml)中,ActionMapping定义了URL到Action的映射。例如,"/student/add"请求可能映射到AddStudentAction,使得用户在提交添加学生的表单时,Struts知道调用哪个...
2. **Action映射**:接着,`FilterDispatcher`通过`actionMapper`对象获取与请求关联的`ActionMapping`。`ActionMapping`是Struts2中的一个重要概念,它定义了请求URL与特定Action类之间的映射关系。`actionMapper`...