001
014
015 package com.liferay.portal.servlet;
016
017 import com.liferay.portal.kernel.servlet.DynamicServletRequest;
018 import com.liferay.portal.kernel.util.CharPool;
019 import com.liferay.portal.kernel.util.StringPool;
020 import com.liferay.portal.kernel.util.StringUtil;
021
022 import java.io.IOException;
023
024 import java.util.HashMap;
025 import java.util.Map;
026
027 import javax.servlet.RequestDispatcher;
028 import javax.servlet.Servlet;
029 import javax.servlet.ServletException;
030 import javax.servlet.ServletRequest;
031 import javax.servlet.ServletResponse;
032 import javax.servlet.http.HttpServletRequest;
033
034
037 public class DirectRequestDispatcher implements RequestDispatcher {
038
039 public DirectRequestDispatcher(Servlet servlet, String queryString) {
040 _servlet = servlet;
041
042 String[] parameters = StringUtil.split(queryString, CharPool.AMPERSAND);
043
044 if (parameters.length > 0) {
045 _parameters = new HashMap<String, String[]>();
046
047 for (String parameter : parameters) {
048 String[] parameterParts = StringUtil.split(
049 parameter, CharPool.EQUAL);
050
051 String name = parameterParts[0];
052 String value = StringPool.BLANK;
053
054 if (parameterParts.length == 2) {
055 value = parameterParts[1];
056 }
057
058 String[] values = _parameters.get(name);
059
060 if (values == null) {
061 _parameters.put(name, new String[] {value});
062 }
063 else {
064 String[] newValues = new String[values.length + 1];
065
066 System.arraycopy(values, 0, newValues, 0, values.length);
067
068 newValues[newValues.length - 1] = value;
069
070 _parameters.put(name, newValues);
071 }
072 }
073 }
074 }
075
076 public void forward(
077 ServletRequest servletRequest, ServletResponse servletResponse)
078 throws IOException, ServletException {
079
080 if (_parameters != null) {
081 servletRequest = new DynamicServletRequest(
082 (HttpServletRequest)servletRequest, _parameters);
083 }
084
085 _servlet.service(servletRequest, servletResponse);
086 }
087
088 public void include(
089 ServletRequest servletRequest, ServletResponse servletResponse)
090 throws IOException, ServletException {
091
092 if (_parameters != null) {
093 servletRequest = new DynamicServletRequest(
094 (HttpServletRequest)servletRequest, _parameters);
095 }
096
097 _servlet.service(servletRequest, servletResponse);
098 }
099
100 private Map<String, String[]> _parameters;
101 private Servlet _servlet;
102
103 }