【问题标题】:Unable to compile the class for JSP无法为 JSP 编译类
【发布时间】:2017-12-13 18:25:41
【问题描述】:

当我点击查看按钮查看用户详细信息时,我们面临以下异常:

2017-06-30 19:23:52,831 ERROR [com.myapp.jsp] - <Unable to compile class for JSP: 

An error occurred at line: 53 in the jsp file: /WEB-INF/jsps/ViewUserDetails.jsp
apache cannot be resolved or is not a field
50:                     </myapphtml:myappRow>
51:                                         
52:                     <myapphtml:myappRow align="left" label="userdetails.field.label.orgs">
53:                         <logic:iterate name="userDetails" property="Orgs" id="org">         
54:                             &nbsp;<bean:write name="org" property="name" /><br>
55:                         </logic:iterate>
56:                     </myapphtml:myappRow>


Stacktrace:>
org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 53 in the jsp file: /WEB-INF/jsps/ViewUserDetails.jsp
apache cannot be resolved or is not a field
50:                     </myapphtml:myappRow>
51:                                         
52:                     <myapphtml:myappRow align="left" label="userdetails.field.label.orgs">
53:                         <logic:iterate name="userDetails" property="mappedOrgs" id="org">           
54:                             &nbsp;<bean:write name="org" property="name" /><br>
55:                         </logic:iterate>
56:                     </myapphtml:myappRow>


Stacktrace:
    at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:103)
    at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:366)
    at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:490)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:379)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:354)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:341)
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:662)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:364)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:743)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:485)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:410)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:337)
    at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063)
    at org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:263)
    at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:386)
    at org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:318)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at at com.myapp.tools.auth.client.AuthFilter.doFilter(AuthFilter.java:512)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at com.myapp.tools.auth.client.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:90)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)

这只发生在 RHEL 7.x 和 Tomcat 组合的组合中。 除此以外,我无法结合其他方式重现此问题。

附加 ViewUserDetails.jsp

<%@ page import="org.apache.struts.Globals" %>
<%@ page import="com.myapp.tools.api.impl.User" %>

<%@ include file="include/commonDef.jspf" %>

<tiles:insert definition="myapp.csd.office.layout.default">

    <tiles:put name="header" type="String">
        <myapphtml:myappPageHeaderTab headerImage="images/default/icn_user.gif" headerText="form.page.title.user_details"/>
    </tiles:put>

    <tiles:put name="content" type="String">
        <myapphtml:myappBlock>
            <myapphtml:myappMessage
                    genErrorKey="<%= myappGlobals.GENERAL_ERROR %>"
                    valErrorKey="<%= Globals.ERROR_KEY %>"
                    genErrorHeading="MC.General.genError"
                    valErrorHeading="MC.General.genError"
                    headingBundle="myappBASETAG"/>
        </myapphtml:myappBlock>

        <strutshtml:form action="/processUserList.do" method="POST">
            <input type="hidden" name="action" value="" />



                    <myapphtml:myappRow align="left" label="userdetails.field.label.orgs">
                        <logic:iterate name="userDetails" property="Orgs" id="org">         
                            &nbsp;<bean:write name="org" property="name" /><br>
                        </logic:iterate>
                    </myapphtml:myappRow>



            <myapphtml:myappButtonRow formname="UserDetailsForm">
                <myapphtml:myappButton action="cancel" name="form.button.label.cancel" buttonStyle="button_gt" />           
            </myapphtml:myappButtonRow>         
        </strutshtml:form>

    </tiles:put>

</tiles:insert>

【问题讨论】:

    标签: java jsp tomcat rhel


    【解决方案1】:

    尝试查看是否有一个名为 org 的字符串,将其更改为其他名称为 org1。

    见answer。

    字符串 org = "";类似这样的东西在jsp顶部的某个地方 那个包声明。将该变量名称更改为 org1 或一些 其他有意义的,你的问题就会得到解决。

    Tomcat 中有一个known issue,它的编译器将其解释为对对象 org 的字段 apache 的引用

    代码在 TC4 中有效,因为生成的代码要简单得多 - 它 忽略许多可能的错误情况。修复这些 TC5 和 TC6 中的问题包括对 org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode()

    编译器将此解释为对字段 apache 的引用 对象组织。

    当您生成代码时,总会有 命名冲突的可能性。我找不到解决此问题的简单方法。

    我将把它标记为 WONTFIX。更一般地,避免使用 广泛使用的包前缀(org、com 等)作为变量名将 降低您遇到此问题的风险。

    顺便说一句,快速的 Google 建议您可能还想避免 2 与顶级域冲突的字母变量名称。

    请注意,RHEL 使用特定的 tomcat 版本,而不是社区版本。

    不支持 Tomcat 的任何社区版本

    我们的产品中包含支持的 Tomcat 版本:

    RHEL 7.1 中包含的 Tomcat rpm 包,它基于 Tomcat 7.0.54.

    请注意,我们在 出现问题或报告 CVE 时的以上版本。所以, 我们提供的版本与社区版本不完全相同 雄猫。

    【讨论】:

    • 我应该更改jsp中的值还是后端的java代码?如果在jsp中,我试过了,但没有用。它给了我与 org1 相同的例外。
    • 它解决了这个问题,但你能告诉我为什么会这样吗? “org”关键字是保留在 rhel 或 java 或任何地方吗?
    • 添加已知问题的详细信息
    • @user7294900 在 RHEL+tomcat 以外的平台上不会出现此问题。那么这是特定于该平台还是特定于 tomcat?
    • @user7294900 这是特定于 RHEL 环境的 java,导致 tomcat 出现问题吗?
    猜你喜欢
    • 2017-05-12
    • 2017-12-13
    • 2015-11-15
    • 2021-10-04
    • 2016-09-15
    • 1970-01-01
    相关资源
    最近更新 更多