⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dispatcherrequesttest.java

📁 portal越来越流行了
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.pluto.testsuite.test;

import java.io.IOException;

import javax.portlet.PortletContext;
import javax.portlet.PortletException;
import javax.portlet.PortletRequest;
import javax.portlet.PortletRequestDispatcher;
import javax.portlet.PortletResponse;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.pluto.testsuite.TestResult;
import org.apache.pluto.testsuite.TestUtils;

public class DispatcherRequestTest extends AbstractReflectivePortletTest {
	
	/** Logger. */
	private static final Log LOG = LogFactory.getLog(DispatcherRequestTest.class);
	
	/** The path to the companion servlet. */
    private static final String SERVLET_PATH = "/test/DispatcherRequestTest_Servlet";
    
    private static final String CHECK_PATH_INFO = "/checkPathInfo";
    private static final String CHECK_REQUEST_URI = "/checkRequestURI";
    private static final String CHECK_CONTEXT_PATH = "/checkContextPath";
    private static final String CHECK_SERVLET_PATH = "/checkServletPath";
    private static final String CHECK_QUERY_STRING = "/checkQueryString";
    
    private static final String GET_REQUEST_URI = "/getRequestURI";
    private static final String GET_CONTEXT_PATH = "/getContextPath";
    private static final String GET_SERVLET_PATH = "/getServletPath";
    private static final String GET_QUERY_STRING = "/getQueryString";
    
    /** The query string appended to the dispatch URI. */
    private static final String QUERY_STRING = "paramName=paramValue";
    
    /** The request attribute key which associates the test result. */
    private static final String RESULT_KEY =
            DispatcherRequestTest.class.getName() + ".RESULT_KEY";
    
    /** The key for the expected request URI. */
    private static final String EXPECTED_REQUEST_URI =
            DispatcherRequestTest.class.getName() + ".REQUEST_URI";
    
    /** The key for the expected context path. */
    private static final String EXPECTED_CONTEXT_PATH =
            DispatcherRequestTest.class.getName() + ".CONTEXT_PATH";
    
	
    // Test Methods ------------------------------------------------------------
    
    protected TestResult checkPathInfo(PortletContext context,
                                       PortletRequest request,
                                       PortletResponse response)
    throws IOException, PortletException {
    	return doCheckIncludedAttribute(context, request, response, CHECK_PATH_INFO);
    }
    
    protected TestResult checkRequestURI(PortletContext context,
                                         PortletRequest request,
                                         PortletResponse response)
    throws IOException, PortletException {
    	return doCheckIncludedAttribute(context, request, response, CHECK_REQUEST_URI);
    }
    	
    protected TestResult checkGetRequestURI(PortletContext context,
                                            PortletRequest request,
                                            PortletResponse response)
    throws IOException, PortletException {
    	return doCheckIncludedAttribute(context, request, response, GET_REQUEST_URI);
    }

    protected TestResult checkContextPath(PortletContext context,
                                          PortletRequest request,
                                          PortletResponse response)
    throws IOException, PortletException {
    	return doCheckIncludedAttribute(context, request, response, CHECK_CONTEXT_PATH);
    }
    
    protected TestResult checkGetContextPath(PortletContext context,
                                             PortletRequest request,
                                             PortletResponse response)
    throws IOException, PortletException {
    	return doCheckIncludedAttribute(context, request, response, GET_CONTEXT_PATH);
    }

    protected TestResult checkServletPath(PortletContext context,
                                          PortletRequest request,
                                          PortletResponse response)
    throws IOException, PortletException {
    	return doCheckIncludedAttribute(context, request, response, CHECK_SERVLET_PATH);
    }
    
    protected TestResult checkGetServletPath(PortletContext context,
                                             PortletRequest request,
                                             PortletResponse response)
    throws IOException, PortletException {
    	return doCheckIncludedAttribute(context, request, response, GET_SERVLET_PATH);
    }

    protected TestResult checkQueryString(PortletContext context,
                                          PortletRequest request,
                                          PortletResponse response)
    throws IOException, PortletException {
    	return doCheckIncludedAttribute(context, request, response, CHECK_QUERY_STRING);
    }
    
    protected TestResult checkGetQueryString(PortletContext context,
                                             PortletRequest request,
                                             PortletResponse response)
    throws IOException, PortletException {
    	return doCheckIncludedAttribute(context, request, response, GET_QUERY_STRING);
    }

    
    // Private Methods ---------------------------------------------------------
    
    private TestResult doCheckIncludedAttribute(PortletContext context,
                                                PortletRequest request,
                                                PortletResponse response,
                                                String pathInfo)
    throws IOException, PortletException {
    	
    	// Save expected values as request attributes.
    	String contextPath = request.getContextPath();
    	String requestUri = contextPath + SERVLET_PATH + pathInfo;
    	request.setAttribute(EXPECTED_REQUEST_URI, requestUri);
    	request.setAttribute(EXPECTED_CONTEXT_PATH, contextPath);

    	// Dispatch to the companion servlet: call checkParameters().
    	StringBuffer buffer = new StringBuffer();
    	buffer.append(SERVLET_PATH).append(pathInfo).append("?")
    			.append(QUERY_STRING);
    	if (LOG.isDebugEnabled()) {
    		LOG.debug("Dispatching to: " + buffer.toString());
    	}
    	PortletRequestDispatcher dispatcher = context.getRequestDispatcher(
    			buffer.toString());
    	dispatcher.include((RenderRequest) request, (RenderResponse) response);
    	
    	// Retrieve test result returned by the companion servlet.
    	TestResult result = (TestResult) request.getAttribute(RESULT_KEY);
    	request.removeAttribute(RESULT_KEY);
    	request.removeAttribute(EXPECTED_REQUEST_URI);
    	request.removeAttribute(EXPECTED_CONTEXT_PATH);
    	return result;
    }
    
    
    // Nested Companion Servlet Class ------------------------------------------
    
    public static class CompanionServlet extends HttpServlet {
    	
		private static final long serialVersionUID = -6032809452145653960L;
		
		private static final String KEY_REQUEST_URI = "javax.servlet.include.request_uri";
        private static final String KEY_CONTEXT_PATH = "javax.servlet.include.context_path";
        private static final String KEY_SERVLET_PATH = "javax.servlet.include.servlet_path";
        private static final String KEY_PATH_INFO = "javax.servlet.include.path_info";
        private static final String KEY_QUERY_STRING = "javax.servlet.include.query_string";
        
        
        // GenericServlet Impl -------------------------------------------------
        
        public String getServletInfo() {
        	return getClass().getName();
        }
        
        /**
         * This method uses <code>HttpServletRequest.getPathInfo</code> to
         * retrieve the requested path info, and forwards to the corresponding
         * check method to perform the test.
         */
        public void service(HttpServletRequest request,
                            HttpServletResponse response)
        throws ServletException, IOException {
        	TestResult result = null;
        	String pathInfo = getPathInfo(request);
        	if (CHECK_PATH_INFO.equals(pathInfo)) {
        		result = checkPathInfo(request, pathInfo);
        	} else if (CHECK_REQUEST_URI.equals(pathInfo)) {
        		result = checkRequestURI(request);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -