【问题标题】:JSP compilation error when using auto-boxing使用自动装箱时 JSP 编译错误
【发布时间】:2015-08-06 20:55:36
【问题描述】:

在 Tomcat 7.0.54 中执行低于 JSP 内容时出现以下错误

<%
    Object one =  new Long(1);
    Long value = Boolean.TRUE ? (Long)one : -1l;
%>

错误:

javax.servlet.ServletException: java.lang.Error: Unresolved compilation problem: 

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:348)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

任何指向问题原因的指针都会帮助我更好地理解问题。似乎 jsp 已成功编译为 .class 文件,但在运行时我遇到了这个问题。提前致谢。

【问题讨论】:

    标签: java jsp tomcat autoboxing


    【解决方案1】:

    -1l 不是 Long 对象,它是原始数据 long 试试这个:

    <%
        Object one =  new Long(1);
        Long value = Boolean.TRUE ? (Long)one : new Long(-1);
    %>
    

    上面提到的代码在你用JDK编译和运行代码时会发现,似乎tomcat中可能存在一个错误,它试图在编译之前将JSP转换为Java

    【讨论】:

    • 为什么 OP 会出现运行时异常? OP 的代码会编译得很好。
    • @Alireza Fattahi 我检查了生成的 java 代码。它很好,这个 tomcat 7.0.54 和 tomcat 7.0.61 生成的代码之间没有差异,但是我在运行时仍然遇到异常,而它在 tomcat 7.0.61 中工作正常。
    【解决方案2】:
    Object one =  (long) 1;
    Long value = Boolean.TRUE ? (Long)one : -1l;
    

    尝试前面的代码而不是你的代码

    在java中下面是“不必要的装箱到长”

    Object one =  new Long(1);
    

    【讨论】:

      【解决方案3】:

      试试

      <%
          Object one =  new Long(1);
          Long value = (Boolean.TRUE ? (Long)one : -1l);
      %>
      

      【讨论】:

      • 感谢您的回复。建议的解决方案似乎不起作用。我已经以另一种方式对其进行了修改以使其正常工作。这个tomcat版本似乎有问题。我用tomcat 7.0.61测试了相同的工作目录中生成的java文件之间没有差异。在 tomcat 7.0.54 中它会抛出错误,但在 tomcat 7.0.61 中可以正常工作。 tomcat 在评估条件表达式中的作用是什么?我想了解这个错误。
      猜你喜欢
      • 2019-12-26
      • 2011-06-27
      • 2011-05-09
      • 2014-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多