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 @Override
077 public void forward(
078 ServletRequest servletRequest, ServletResponse servletResponse)
079 throws IOException, ServletException {
080
081 if (_parameters != null) {
082 servletRequest = new DynamicServletRequest(
083 (HttpServletRequest)servletRequest, _parameters);
084 }
085
086 _servlet.service(servletRequest, servletResponse);
087 }
088
089 @Override
090 public void include(
091 ServletRequest servletRequest, ServletResponse servletResponse)
092 throws IOException, ServletException {
093
094 if (_parameters != null) {
095 servletRequest = new DynamicServletRequest(
096 (HttpServletRequest)servletRequest, _parameters);
097 }
098
099 _servlet.service(servletRequest, servletResponse);
100 }
101
102 private Map<String, String[]> _parameters;
103 private Servlet _servlet;
104
105 }