Hi Bunty, Most of the time you probably wont actually need to override the RequestProcessor, however on those occasions when you do need to you will be glad to hear that it is actually quite a straightforward task.
First you create your own class that extends RequestProcessor, and to make struts use your subclass you have the following node in your struts-config.xml: <controller processorClass="com.mycompany.package.MyProcessor" /> The ActionServlet will call the process() method when a request comes in. Normally you would not need to override process(), but rather one or more of the many methods that it calls depending on what behaviour it is that you are trying to modify. The best reference you can get to what these methods actually do is the struts source code itself, so if you haven't downloaded this already I would strongly recomend that you do so. When overriding the RequestProcessor, be aware that it is called for all the requests to your application (not sure about the set up for sub-apps though). So be sure that your new behaviour will work for all your actions! To help you determine what methods you need to override Ive listed in the order they are called the methods in the RequestProcessor. (You will still want to look at its source yourself first though to check the exact details): processMultipart() -If the request is a POST with content type "multipart/form-data" will return an org.apache.struts.upload.MultipartRequestWrapper instance which will wrap the request, otherwise just returns the request back unchanged. (Multipart forms (used for file uploads) need special parsing to get at the (POSTed) parameters (parameters added as part of the form action URL on the other hand are still accessible through the original HttpServletRequest object) and struts is nice enough to handle this in a semitransparent manner for you by providing this wrapper class which implements HttpServletRequest. Unfortunately, the wrapper is only created in this method and not actually populated until processPopulate() just before the actionForm itself is populated. This means that for multipart forms the posted request parameters arent available to any of the RequestProcessor methods that you subclass that are called before processPopulate.) processPath() -returns the part of the path used later to select an appropriate action to process the request. processLocale() -sets the locale object. (See the source for logic use). processContent() -Sets the default content type in the response based on config. processNoCache() -Sets the caching stuff in response headers. processPreProcess() -This is an empty hook you can override as needed. It returns a boolean. Return true to continue processing as normal or false if the response has now been completed. processMapping() -Returns the appropriate ActionMapping from the config for this request. processRoles() -For actions protected by roles will chack to see that the user has at least one of the specified roles. Returns a boolean value (with similar manner to that returned by processPreProcess). processActionForm() -Returns the ActionForm instance associated with this mapping. If one doesnt exist in session or request (as defined in struts-config) will create one as appropriate. processPopulate() -Populates the actionForm based on the parameters. (It delagates to RequestUtils.populate to do this). That is also the place where the parameters in a MultipartRequestWrapper are populated. (This means that in the unlikely event you do not have an ActionForm associated with this request and you are using a multipart form, the parameters in the MultipartRequestProcessor will NOT be populated! (You are unlikely to find yourself in this situation though. Im just pointing it out as I did encounter this issue myself and it took me hours to figure out what was going wrong!)) processValidate() -Calls validate() in the actionForm. If there were any errors it returns false (and the request will be forwarded back to the input), or true if validation succeeded. processForward() -Processes a forward if the mapping defines one. Also unwraps the MultipartRequestWrapper (for multipart forms). processInclude() -Process an include if defined by mapping. (MultipartRequestWrapper is unwrapped also) processActionCreate() -Returns the instance of Action that will peform the request. processActionPerform() -Calls execute() method of the action instance. Processes returned exceptions by calling processException(). Retunrs the ActionForward that is returned by the actions excute method. processActionForward() -Forwards or redirects based on the ActionForward returned by the action when its execute method was called. (If that forward was null, this method does nothing.) Hope this is of help to you, regards Andrew -----Original Message----- From: Bunty [mailto:[EMAIL PROTECTED]] Sent: Monday, September 02, 2002 07:07 To: Struts Users Mailing List Subject: Extending RequestProcessor of ActionServlet Hi All, How to extend RequestProcessor class ? Also if someone can elaborate on the struts-config.xml configuration to configure controller. Thanks Bunty -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]> -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>