【发布时间】:2010-02-03 18:56:39
【问题描述】:
我有一个过滤器,它接受一个传入的请求,然后用一个 HttpServletRequestWrapper 包装它,而后者又具有一个 setParameter() 方法。但是,现在这在任何过滤的 servlet 中都不再起作用:
<jsp:include page="testing-include.jsp">
<jsp:param name="testing" value="testing" />
</jsp:include>
包含页面不会接受请求参数。如果我删除过滤器,并且原始未修改的请求被发送(解包)到 servlet,那么它会再次工作。这是我的包装:
public class HttpServletModifiedRequestWrapper extends HttpServletRequestWrapper {
Map parameters;
@SuppressWarnings("unchecked")
public HttpServletModifiedRequestWrapper(HttpServletRequest httpServletRequest) {
super(httpServletRequest);
parameters = new HashMap(httpServletRequest.getParameterMap());
}
public String getParameter(String name) {
String returnValue = null;
String[] paramArray = getParameterValues(name);
if (paramArray != null && paramArray.length > 0){
returnValue = paramArray[0];
}
return returnValue;
}
@SuppressWarnings("unchecked")
public Map getParameterMap() {
return Collections.unmodifiableMap(parameters);
}
@SuppressWarnings("unchecked")
public Enumeration getParameterNames() {
return Collections.enumeration(parameters.keySet());
}
public String[] getParameterValues(String name) {
String[] result = null;
String[] temp = (String[]) parameters.get(name);
if (temp != null){
result = new String[temp.length];
System.arraycopy(temp, 0, result, 0, temp.length);
}
return result;
}
public void setParameter(String name, String value){
String[] oneParam = {value};
setParameter(name, oneParam);
}
@SuppressWarnings("unchecked")
public void setParameter(String name, String[] values){
parameters.put(name, values);
}
}
如果不查看 Tomcat 的 jsp:include 和 jsp:param 标准操作的实现源,我真的很难确定会发生什么,但那里肯定存在一些冲突。任何帮助将不胜感激。
【问题讨论】: