- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个过滤器,它接受传入请求,然后用 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/
我正在尝试使用 java/jsp 中的过滤器过滤掉名为“reason”的查询参数。 基本上,过滤器的作用是确保用户输入查看页面的“原因”。如果他们没有,则需要将他们重定向到“输入原因”页面。一旦他们输
在我的项目中,我有一组 api 调用,它们应该通过某些常见的验证集进行过滤。在这种情况下,我必须在请求到达 REST Controller 之前拦截请求,读取请求正文,进行验证并在请求通过验证时将其传
我正在尝试为我的 JSON 网络服务创建一个验证系统。这个想法是让一个拦截器捕获每个 Json @RequestBody,通过 JacksonMapping 用它创建一个 JSON 对象。然后从中读取
我有一个过滤器可以验证/授权 REST 调用。此过滤器需要访问请求参数,因此我为此编写了自定义 HTTPServletRequestWrapper。 import java.util.Collecti
我写了一个名为 HTTPRequest 的 HttpServletRequestWrapper,它读取完整的 HTTP POST 主体以供进一步使用。这个基于 http://natch3z.blogs
我有一个标准的 Spring MVC Controller (服务于 REST 调用),如下所示: @Controller public class SpringRestController {
我正在使用从“EAR A”到“EAR B”的编码形式。 当我尝试处理请求时: accion = "/decimprenta"; pagina = "/procesardeclaraci
我用的是Tomcat7。我的项目结构是: as1.jsp as2.jsp web.xml 的内容是: filter1 /as1.jsp
我的要求是解密用我自己的算法加密的请求体。 我尝试扩展 HttpServletRequestWrapper 并将新请求传递给 doFilter。但是 getInputStream 和 getReade
我目前正在使用 Jersey 库在 Java 中开发 RESTful Web 服务。 出于安全原因,我们需要类似于 Amazon 的简单存储服务的自定义身份验证。但是,这需要我计算正文(如果有的话)的
我想在 Servlet 请求中添加自定义 header 。 首先,我构建了一个HttpServletRequestWrapper类 public class HeaderRequest_DEBUG e
我正在尝试调整 HttpServletRequestWrapper(参见 How to read InputStream multiple times),以便在过滤器中使用 HTTP Post 正文后
我正在编写一个 Tomcat 应用程序,并根据 Google 的 oauth2 服务进行身份验证。我原本打算编写一个简单的 Filter 来进行身份验证,但无法在 Filter 中设置用户主体。根据我
我有一个过滤器,它接受传入请求,然后用 HttpServletRequestWrapper 包装它,而 HttpServletRequestWrapper 又具有 setParameter() 方法。
使用 HttpServletRequestWrapper 包装 HttpServletRequest 的目的是什么?我们这样做有什么好处? 最佳答案 HttpServletRequest是 HTTP
我在 Eclipse IDE 中使用 JBoss4.2。当我运行 hellojsf程序使用JSP View 技术,运行良好。当我尝试使用相同组件的 Facelets 时,出现以下异常: 2012-06
我是一名优秀的程序员,十分优秀!