gpt4 book ai didi

java - 当原始请求用 HttpServletRequestWrapper 包装时,jsp:param 不再设置参数

转载 作者:太空宇宙 更新时间:2023-11-04 08:56:30 24 4
gpt4 key购买 nike

我有一个过滤器,它接受传入请求,然后用 HttpServletRequestWrapper 包装它,而 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 标准操作的实现源代码,我真的很难确定可能发生的情况,但那里肯定存在一些冲突。任何帮助将不胜感激。

最佳答案

我猜问题是您的包装器不提供对新参数的访问,这些新参数是在复制后添加到原始参数映射中的。

也许,您应该这样做(以及在其他方法中):

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);
} else {
return super.getParameterValues(name);
}
return result;
}

关于java - 当原始请求用 HttpServletRequestWrapper 包装时,jsp:param 不再设置参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2194593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com