无法编译JSP类

5
当我点击查看按钮以查看用户详细信息时,我们遇到了以下异常:
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>
1个回答

4

请检查是否有一个名为org的字符串,将其更改为其他名称,如org1

请参见答案

在jsp文件的顶部或包语句上方可能会出现类似于“String org =“”;”这样的代码。将该变量名更改为org1或其他有意义的名称即可解决问题。

Tomcat存在已知问题,其编译器将其解释为对对象org的字段apache的引用。

该代码在TC4中可以工作,因为生成的代码要简单得多-它忽略了许多可能的错误条件。 TC5和TC6中这些问题的修复包括对org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode()的完全限定引用。

编译器将其解释为对对象org的字段apache的引用。

当您生成代码时,总会有可能出现命名冲突。我看不到任何简单的方法来解决这个问题。

我将标记此问题为WONTFIX。更普遍地说,避免使用广泛使用的包前缀(org,com等)作为变量名将减少您遇到此问题的风险。

顺便说一句,快速搜索表明,您还应避免与顶级域冲突的2个字母变量名。

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

不支持任何Tomcat社区发布版本

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

RHEL 7.1中包含的Tomcat rpm软件包,基于Tomcat 7.0.54。

请注意,当出现问题或报告CVE时,我们会在上述版本上进行重要错误和安全修复的后移。因此,我们提供的版本与Tomcat的社区版本并不完全相同。


我应该更改jsp中的值还是后端的java代码? 如果在jsp中,我尝试过了但没有成功。它给了我与org1相同的异常。 - Deepak Jain
它解决了问题,但是您能告诉我为什么它有效吗?“org”关键字在RHEL或Java或任何地方都是保留的吗? - Deepak Jain
1
添加已知问题的详细信息 - user7294900
@ user7294900,除了RHEL+Tomcat平台之外,此问题不会出现。那么这是特定于此平台还是特定于Tomcat? - Deepak Jain
你尝试了哪些其他组合?能具体说明一下吗? - user7294900
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接