ActionServlet 类

本文详细介绍了Struts框架的核心组件ActionServlet的工作原理,包括如何处理HTTP请求、如何使用RequestProcessor来分发请求以及如何利用DispatchAction实现方法级别的分发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

Struts 的入口是 ActionServlet.类在 Struts 应用程序中负责拦截工作ActionServlet 的一个实例接受到一个 HttpRequest 对象时,无论这是通过 doGet() 方法还是 doPost() 方法收到的 , 都会调用 process() 方法来处理该请求。 ActionServlet组件:充当Struts框架的中央控制器

ActionServletprocess方法

  protected void process(HttpServletRequest request, HttpServletResponse response)    

        throws IOException, ServletException {    

        //根据request里的信息从servlet Context里找到相应的子模块Module Config,和它下面的Message Resources,并放到request,使其他组件可以方便的供request里取得应用配置信息和消息资源.

        ModuleUtils.getInstance().selectModule(request, getServletContext());    

//取出MoudleConfig实例config  ModuleConfig config = getModuleConfig(request);    

    //根据config里这个子模块的信息,servletcontext,取出这个子模块的RequestProcessor实例

        RequestProcessor processor = getProcessorForModule(config);    

    //如果processor实例为空,就新建一个.同时放到servletcontext.    

        if (processor == null) {    

           processor = getRequestProcessor(config);    

        }    

//调用RequestProcessorprocess方法处理,    

        processor.process(request, response);    

    }   

struts Action 方法分发dispatch

struts1中,我们知道在客户端发送“url.do”时由前端控制器ActionServlet分派给RequestProcessor来处理客户请求最后分发给相应的应用程序控制器Action来处理业务,那么在一个应用程序中,如果有n个业务请求就需要naction来处理,相应就需要naction类文件,一个Action中只有一个execute方法,如果我们把某一个功能模块的所有方法放在一个Action类文件中,把不同的业务放在不同的方法中,并且由ActionServlet统一进行分发,岂不妙哉!在struts1DispatchAction给我们提供了解决方法。比如:

定义

public abstract class DispatchAction extends Action

这是一个抽象的Action,它会根据request 中的parameter来执行相应的方法。通个这个Action类可以将不同的Action集中到一个Action文件中来

Struts-config.xml:

<action path="/saveSubscription"

type="org.apache.struts.actions.DispatchAction"

name="subscriptionForm"

scope="request"

input="/subscription.jsp"

parameter="method"/>

Action中要有相应的方法:

Public class TestAction extends DispatchAction{

public ActionForward delete(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) throws Exception

public ActionForward insert(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) throws Exception

public ActionForward update(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) throws Exception

}

这样,我们就完成了action中方法的分发。可以大大减少action文件的数量。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值