You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by ge...@apache.org on 2006/05/25 21:42:50 UTC
svn commit: r409443 -
/struts/action/trunk/core/src/main/java/org/apache/struts/chain/commands/servlet/PerformForward.java
Author: germuska
Date: Thu May 25 12:42:49 2006
New Revision: 409443
URL: http://svn.apache.org/viewvc?rev=409443&view=rev
Log:
Fix so that the module value of the ForwardConfig is correctly used, instead of always using the context's module config.
Also, a lot of simple rearrangement of code to improve readability.
Modified:
struts/action/trunk/core/src/main/java/org/apache/struts/chain/commands/servlet/PerformForward.java
Modified: struts/action/trunk/core/src/main/java/org/apache/struts/chain/commands/servlet/PerformForward.java
URL: http://svn.apache.org/viewvc/struts/action/trunk/core/src/main/java/org/apache/struts/chain/commands/servlet/PerformForward.java?rev=409443&r1=409442&r2=409443&view=diff
==============================================================================
--- struts/action/trunk/core/src/main/java/org/apache/struts/chain/commands/servlet/PerformForward.java (original)
+++ struts/action/trunk/core/src/main/java/org/apache/struts/chain/commands/servlet/PerformForward.java Thu May 25 12:42:49 2006
@@ -15,6 +15,8 @@
*/
package org.apache.struts.chain.commands.servlet;
+import java.io.IOException;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionServlet;
@@ -25,8 +27,11 @@
import org.apache.struts.config.ModuleConfig;
import org.apache.struts.util.MessageResources;
import org.apache.struts.util.RequestUtils;
+import org.apache.struts.util.ModuleUtils;
import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -51,76 +56,74 @@
protected void perform(ActionContext context, ForwardConfig forwardConfig)
throws Exception {
ServletActionContext sacontext = (ServletActionContext) context;
- String forwardPath = forwardConfig.getPath();
- String uri;
+ String uri = forwardConfig.getPath();;
- if (forwardPath == null) {
- // Retrieve internal message resources
+ if (uri == null) {
ActionServlet servlet = sacontext.getActionServlet();
MessageResources resources = servlet.getInternal();
- throw new IllegalArgumentException(resources.getMessage(
- "forwardPathNull"));
+ throw new IllegalArgumentException(resources.getMessage("forwardPathNull"));
}
- ModuleConfig moduleConfig = context.getModuleConfig();
+ HttpServletRequest request = sacontext.getRequest();
+ ServletContext servletContext = sacontext.getContext();
+ HttpServletResponse response = sacontext.getResponse();
+
+ if (uri.startsWith("/")) {
+ uri = resolveModuleRelativePath(forwardConfig, servletContext, request);
+ }
- // Resolve module-relative paths
- if (forwardPath.startsWith("/")) {
- uri = RequestUtils.forwardURL(sacontext.getRequest(),
- forwardConfig, moduleConfig);
+
+ if (response.isCommitted() && !forwardConfig.getRedirect()) {
+ handleAsInclude(uri, servletContext, request, response);
+ } else if (forwardConfig.getRedirect()) {
+ handleAsRedirect(uri, request, response);
} else {
- uri = forwardPath;
+ handleAsForward(uri, servletContext, request, response);
}
+ }
- HttpServletRequest request = sacontext.getRequest();
+ private String resolveModuleRelativePath(ForwardConfig forwardConfig, ServletContext servletContext, HttpServletRequest request) {
+ String prefix = forwardConfig.getModule();
+ ModuleConfig moduleConfig = ModuleUtils.getInstance().getModuleConfig(prefix, request, servletContext);
+ return RequestUtils.forwardURL(request,forwardConfig, moduleConfig);
+ }
- // Use of actions within tiles, jsp:include or c:import requires to
- // convert forward (w/o redirect) to an include
- // if response has been committed
- HttpServletResponse response = sacontext.getResponse();
+ private void handleAsForward(String uri, ServletContext servletContext, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ RequestDispatcher rd = servletContext.getRequestDispatcher(uri);
- if (response.isCommitted() && !forwardConfig.getRedirect()) {
- RequestDispatcher rd =
- sacontext.getContext().getRequestDispatcher(uri);
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Forwarding to " + uri);
+ }
- if (rd == null) {
- response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
- "Error getting RequestDispatcher for " + uri);
-
- return;
- }
-
- if (LOG.isDebugEnabled()) {
- LOG.debug("Including " + uri);
- }
-
- rd.include(request, response);
+ rd.forward(request, response);
+ }
- return;
+ private void handleAsRedirect(String uri, HttpServletRequest request, HttpServletResponse response) throws IOException {
+ if (uri.startsWith("/")) {
+ uri = request.getContextPath() + uri;
+ }
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Redirecting to " + uri);
}
- // Perform redirect or forward
- if (forwardConfig.getRedirect()) {
- if (uri.startsWith("/")) {
- uri = request.getContextPath() + uri;
- }
-
- if (LOG.isDebugEnabled()) {
- LOG.debug("Redirecting to " + uri);
- }
+ response.sendRedirect(response.encodeRedirectURL(uri));
+ }
- sacontext.getResponse().sendRedirect(sacontext.getResponse()
- .encodeRedirectURL(uri));
- } else {
- RequestDispatcher rd =
- sacontext.getContext().getRequestDispatcher(uri);
+ private void handleAsInclude(String uri, ServletContext servletContext, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
+ RequestDispatcher rd = servletContext.getRequestDispatcher(uri);
- if (LOG.isDebugEnabled()) {
- LOG.debug("Forwarding to " + uri);
- }
+ if (rd == null) {
+ response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
+ "Error getting RequestDispatcher for " + uri);
+ return;
+ }
- rd.forward(request, sacontext.getResponse());
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Including " + uri);
}
+
+ rd.include(request, response);
}
}