我最近将我们的应用程序从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;
}
答案 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;