Pivotal Knowledge Base

フォローする

Tomcat 7.0.57/8.0.15 以降にアップグレードすると、JSP ページ上で "HTTP Status 500 - Unable to compile class for JSP" という JSP コンパイルエラーが発生する

環境

製品 バージョン
ASF Tomcat 7.0.57 以降
ASF Tomcat 8.0.15 以降

 

事象

Tomcat 7.0.57 以降あるいは 8.0.15 以降にアップグレードすると、JSP ページが < %@ import="some_values;" % > といったセミコロン(;)で終わる無効な命令を含む場合に、以下の JSP コンパイルエラーが発生する可能性がある。

例えば、エラーページには以下のようなスタックトレースが含まれるであろう。

HTTP Status 500 - Unable to compile class for JSP

type Exception report

message Unable to compile class for JSP

description The server encountered an internal error that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: Unable to compile class for JSP
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:672)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

root cause

java.lang.IllegalArgumentException: Page directive: invalid value for import
org.apache.jasper.compiler.Node$PageDirective.validateImport(Node.java:628)
org.apache.jasper.compiler.Node$PageDirective.addImport(Node.java:609)
org.apache.jasper.compiler.Parser.parsePageDirective(Parser.java:343)
...

原因

この既知の問題は、他のバグによる問題に対処するために、JSP の import 命令でセミコロン(;)の使用を許可しないようにした Tomcat 7.0.57/8.0.15 以降における Jasper の変更によるものである。

Tomcat 7.0.57(併せて、8.0.15)の Japser 関連変更履歴を参照のこと。

解決策

  • Tomcat 7.0.57/8.0.15 以降の変更に合わせて、JSP ページにおける任意の import 命令の末尾に ";" を記述しないようにする必要がある。

コメント

Powered by Zendesk