1 18 package org.apache.beehive.netui.pageflow.internal; 19 20 import org.apache.beehive.netui.pageflow.handler.ForwardRedirectHandler; 21 import org.apache.beehive.netui.pageflow.handler.FlowControllerHandlerContext; 22 import org.apache.beehive.netui.pageflow.PageFlowStack; 23 import org.apache.beehive.netui.util.logging.Logger; 24 25 import javax.servlet.http.HttpServletRequest ; 26 import javax.servlet.http.HttpServletResponse ; 27 import javax.servlet.ServletException ; 28 import javax.servlet.RequestDispatcher ; 29 import javax.servlet.ServletContext ; 30 import java.io.IOException ; 31 32 import org.apache.struts.upload.MultipartRequestWrapper; 33 34 35 38 public class DefaultForwardRedirectHandler 39 extends DefaultHandler 40 implements ForwardRedirectHandler 41 { 42 private static final Logger _log = Logger.getInstance( DefaultForwardRedirectHandler.class ); 43 44 45 public DefaultForwardRedirectHandler( ServletContext servletContext ) 46 { 47 init( null, null, servletContext ); 48 } 49 50 public void redirect( FlowControllerHandlerContext context, String uri ) 51 throws IOException , ServletException  52 { 53 assert context.getResponse() instanceof HttpServletResponse : 54 context.getResponse().getClass().getName() + " does not implement HttpServletResponse"; 55 HttpServletResponse response = ( HttpServletResponse ) context.getResponse(); 56 response.sendRedirect( response.encodeRedirectURL( uri ) ); 57 } 58 59 public void forward( FlowControllerHandlerContext context, String uri ) 60 throws IOException , ServletException  61 { 62 LegacySettings settings = LegacySettings.get( getServletContext() ); 63 assert context.getRequest() instanceof HttpServletRequest : 64 context.getRequest().getClass().getName() + " does not implement HttpServletRequest"; 65 assert context.getResponse() instanceof HttpServletResponse : 66 context.getResponse().getClass().getName() + " does not implement HttpServletResponse"; 67 HttpServletRequest request = ( HttpServletRequest ) context.getRequest(); 68 HttpServletResponse response = ( HttpServletResponse ) context.getResponse(); 69 int requestCount = PageFlowRequestWrapper.get( request ).getForwardedRequestCount(); 70 71 int forwardOverflowCount = settings.getForwardOverflowCount(); 75 if ( requestCount > forwardOverflowCount ) 76 { 77 InternalUtils.sendDevTimeError( "PageFlow_Forward_Overflow", null, 78 HttpServletResponse.SC_INTERNAL_SERVER_ERROR, request, response, 79 getServletContext(), 80 new Object []{ new Integer ( forwardOverflowCount ), uri } ); 81 return; 82 } 83 84 PageFlowStack pfStack = PageFlowStack.get( request, false ); 88 89 int nestingOverflowCount = settings.getNestingOverflowCount(); 90 if ( pfStack != null && pfStack.size() > nestingOverflowCount ) 91 { 92 Object [] args = new Object []{ new Integer ( pfStack.size() ), new Integer ( nestingOverflowCount ) }; 93 InternalUtils.sendDevTimeError( "PageFlow_Nesting_Overflow", null, 94 HttpServletResponse.SC_INTERNAL_SERVER_ERROR, request, response, 95 getServletContext(), args ); 96 return; 97 } 98 99 PageFlowRequestWrapper.get( request ).setForwardedRequestCount( requestCount + 1 ); 103 104 if ( request instanceof MultipartRequestWrapper ) 106 { 107 request = ( ( MultipartRequestWrapper ) request ).getRequest(); 108 } 109 110 RequestDispatcher rd = request.getRequestDispatcher( uri ); 115 116 if ( rd == null ) 117 { 118 if ( _log.isErrorEnabled() ) 119 { 120 _log.error( "Could not get requestDispatcher for URI " + uri ); 121 } 122 123 response.sendError( HttpServletResponse.SC_NOT_FOUND ); 124 return; 125 } 126 127 rd.forward( request, response ); 128 } 129 } 130 | Popular Tags |