【问题标题】:Issues with ApplicationHttpRequest and getParameterApplicationHttpRequest 和 getParameter 的问题
【发布时间】:2018-03-09 23:40:28
【问题描述】:

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

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

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

但是对于 ApplicationHttpRequest 它会像这样抛出一个精确的; 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;
}

【问题讨论】:

    标签: java servlets java-8 tomcat8


    【解决方案1】:

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      • 2017-10-31
      • 1970-01-01
      • 2012-11-05
      • 2013-12-19
      • 1970-01-01
      • 2011-12-19
      相关资源
      最近更新 更多