View Javadoc
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.dispatcher.servlet;
22  
23  import org.apache.struts.chain.contexts.ActionContext;
24  import org.apache.struts.chain.contexts.ServletActionContext;
25  import org.apache.struts.dispatcher.AbstractParameterDispatcher;
26  
27  import jakarta.servlet.http.HttpServletResponse;
28  
29  /**
30   * This servlet-based dispatcher uses the value of the request parameter to pick
31   * the appropriate method on the action.
32   * <p>
33   * To configure the use of this dispatcher in your configuration, create an
34   * entry like below:
35   * <p>
36   * <code>
37   * <pre>
38   * &lt;action path=&quot;/saveSubscription&quot;
39   *         type=&quot;org.example.SubscriptionAction&quot;
40   *         dispatcher=&quot;org.apache.struts.dispatcher.servlet.ServletParameterDispatcher&quot;
41   *         parameter=&quot;method&quot;/&gt;
42   *         name=&quot;subscriptionForm&quot;
43   *         scope=&quot;request&quot;
44   *         input=&quot;/subscription.jsp&quot;
45   * </pre>
46   * </code>
47   * <p>
48   * This example will use the value of the request parameter named "method" to
49   * pick the appropriate method. For example, you might have the following three
50   * methods in the same action:
51   *
52   * <ul>
53   * <li><code>public ActionForward delete(ActionMapping mapping, ActionForm form,
54   * HttpServletRequest request, HttpServletResponse response) throws Exception</code></li>
55   * <li><code>public void insert(ActionContext context)</code></li>
56   * <li><code>public void update(ServletActionContext context)</code></li>
57   * </ul>
58   * and call one of the methods with a URL like this:
59   * <p>
60   * <code>http://localhost:8080/myapp/saveSubscription.do?method=update</code>
61   *
62   * @version $Rev$
63   * @since Struts 1.4
64   */
65  public class ServletParameterDispatcher extends AbstractParameterDispatcher {
66  
67      private static final long serialVersionUID = 1L;
68  
69      /**
70       * Constructs a new servlet parameter dispatcher.
71       */
72      public ServletParameterDispatcher() {
73          super(new ServletMethodResolver());
74      }
75  
76      /**
77       * Extracts the value from the specified servlet parameter.
78       *
79       * @param context {@inheritDoc}
80       * @param parameter the servlet parameter name
81       * @return the servlet parameter value
82       */
83      protected String resolveParameterValue(ActionContext context, String parameter) {
84          ServletActionContext servletContext = (ServletActionContext) context;
85          return servletContext.getParam().get(parameter);
86      }
87  
88      /**
89       * Sends the 404 HTTP error response.
90       *
91       * @param context {@inheritDoc}
92       * @return always <code>null</code> since the response is handled directly
93       * @throws Exception if the error code fails to set
94       */
95      protected Object unspecified(ActionContext context) throws Exception {
96          HttpServletResponse response = ((ServletActionContext) context).getResponse();
97          response.sendError(HttpServletResponse.SC_NOT_FOUND);
98          return null;
99      }
100 
101 }