1 /*
2 * $Id$
3 *
4 * Licensed to the Apache Software Foundation (ASF) under one
5 * or more contributor license agreements. See the NOTICE file
6 * distributed with this work for additional information
7 * regarding copyright ownership. The ASF licenses this file
8 * to you under the Apache License, Version 2.0 (the
9 * "License"); you may not use this file except in compliance
10 * with the License. You may obtain a copy of the License at
11 *
12 * http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing,
15 * software distributed under the License is distributed on an
16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 * KIND, either express or implied. See the License for the
18 * specific language governing permissions and limitations
19 * under the License.
20 */
21 package org.apache.struts.extras.actions;
22
23 import jakarta.servlet.RequestDispatcher;
24 import jakarta.servlet.ServletException;
25 import jakarta.servlet.http.HttpServletRequest;
26 import jakarta.servlet.http.HttpServletResponse;
27
28 import org.apache.struts.action.ActionForm;
29 import org.apache.struts.action.ActionForward;
30 import org.apache.struts.action.ActionMapping;
31
32 /**
33 * <p>An <strong>Action</strong> that includes the context-relative URI
34 * specified by the <code>parameter</code> property of our associated
35 * <code>ActionMapping</code>. This can be used to integrate Struts with
36 * other business logic components that are implemented as servlets (or JSP
37 * pages), but still take advantage of the Struts controller servlet's
38 * functionality (such as processing of form beans).</p>
39 *
40 * <p>To configure the use of this Action in your <code>struts-config.xml</code>
41 * file, create an entry like this:</p>
42 *
43 * {@code <action path="/saveSubscription"
44 * type="org.apache.struts.extras.actions.IncludeAction"
45 * name="subscriptionForm" scope="request" input="/subscription.jsp"
46 * parameter="/path/to/processing/servlet">}
47 *
48 * <p>which will include the context-relative URI specified by the
49 * <code>parameter</code> attribute.</p>
50 *
51 * @version $Rev$ $Date: 2005-11-09 00:11:45 -0500 (Wed, 09 Nov 2005)
52 * $
53 */
54 public class IncludeAction extends BaseAction {
55 private static final long serialVersionUID = -6455723242287515520L;
56
57 // ----------------------------------------------------- Instance Variables
58
59 /**
60 * Process the specified HTTP request, and create the corresponding HTTP
61 * response (or forward to another web component that will create it).
62 * Return an <code>ActionForward</code> instance describing where and how
63 * control should be forwarded, or <code>null</code> if the response has
64 * already been completed.
65 *
66 * @param mapping The ActionMapping used to select this instance
67 * @param form The optional ActionForm bean for this request (if any)
68 * @param request The HTTP request we are processing
69 * @param response The HTTP response we are creating
70 * @return The forward to which control should be transferred, or
71 * <code>null</code> if the response has been completed.
72 * @throws Exception if an error occurs
73 */
74 public ActionForward execute(ActionMapping mapping, ActionForm form,
75 HttpServletRequest request, HttpServletResponse response)
76 throws Exception {
77 // Create a RequestDispatcher the corresponding resource
78 String path = mapping.getParameter();
79
80 if (path == null) {
81 throw new ServletException(messages.getMessage("include.path"));
82 }
83
84 RequestDispatcher rd =
85 servlet.getServletContext().getRequestDispatcher(path);
86
87 if (rd == null) {
88 throw new ServletException(messages.getMessage("include.rd", path));
89 }
90
91 // Forward control to the specified resource
92 rd.include(request, response);
93
94 // Tell the controller servlet that the response has been created
95 return (null);
96 }
97 }