|
Recipe 6.6. Including the Response from a Servlet or JSPProblemYou want to retrieve and include a partial HTTP response from a servlet or JSP, but you want control to go through Struts. SolutionEmploy an including action. Specifying the module-relative path to the resource as the value of the include attribute is the most convenient way: <action path="/IncludeContent" include="/LegacyIncludeServlet"/> Alternatively, if you use a custom RequestProcessor, which overrides the processForwardConfig( ) method, you must use the Struts built-in IncludeAction, specifying the context-relative path for the value of the parameter attribute: <action path="/IncludeContent" type="org.apache.struts.actions.IncludeAction" parameter="/LegacyIncludeServlet"/> DiscussionThis recipe addresses a problem similar to that in Recipe 6.6. The solution is similar as well; you can use the include attribute of the action element, or you can use the Struts-provided IncludeAction. The IncludeAction uses the value specified for the parameter attribute to indicate the resource whose response is to be included. You may have legacy code that includes content, using RequestDispatcher.include( ) or jsp:include, from another servlet or JSP. You can replace direct references to the included resources with an including action defined in your struts-config.xml file. Like the ForwardAction, you only need to use the IncludeAction if you are using a custom RequestProcessor, which overrides the processForwardConfig( ) method, to handle requests. Using an including action ensures that the request is routed through your application's control layer provided by Struts's ActionServlet and RequestProcessor. An including action essentially decorates the legacy resource with Struts functionality. You use this action as you would the original resource. In other words, you would change JSP tags that look like this: <jsp:include page="/LegacyIncludeServlet"/> to this: <jsp:include page="/IncludeContent.do"/> See AlsoRecipe 6.5 shows how to use a similar approach that provides the equivalent replacement for calls to the RequestDispatcher.forward(). |
|