ActionServlet 类

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

ActionServlet的process方法

  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);    

        }    

//调用RequestProcessor的process方法处理,    

        processor.process(request, response);    

    }   

struts Action 方法分发dispatch

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

定义

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文件的数量。



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yakihappy/archive/2009/03/10/3977032.aspx

你可能感兴趣的:(.net,框架,xml,struts,servlet)