ApplicationHttpRequest和getParameter的问题

时间:2018-03-08 22:46:49

标签: java servlets java-8 tomcat8

我最近将我们的应用程序从Java 1.7和Tomcat 7更改为Java 1.8和Tomcat 8。

我面临的问题是,当一个servlet调用另一个servlet时,请求参数现在是 ApplicationHttpRequest ,而不是之前的 HttpServletRequest 。这应该不是问题,而是针对相同方法的某些不同行为。

例如,如果参数不在请求中,request.getParameter(" param1")将为HttpServletRequest返回null。

但是对于ApplicationHttpRequest,它会像这样抛出一个exaction; java.lang.ClassCastException:java.lang.String无法强制转换为[Ljava.lang.String;

如果参数确实存在于请求中,那么它们的行为相同。

我已经编写了一个实用程序方法来处理这个问题。但我想知道是否有一个配置更改,我可以做什么来恢复原来的HttpServletRequest?

public static String getRequestParameter(HttpServletRequest request, String key) {
    if (request == null || StringUtils.isBlank(key)) return  null;

    try {
        return request.getParameter(key);
    } catch (ClassCastException e1) {
    }

    return null;
}

1 个答案:

答案 0 :(得分:0)

ApplicationHttpRequest来自Apache的Tomcat,是一个扩展HttpServletRequestWrapper的包装器。尝试将动态Web模块版本更改为早期版本。

您也可能让IDE自动导入错误的类。

以下是应导入的完整类列表,以确保使用HTTPServletRequest:

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;