14

古いjspサイトをデバッグしようとしているので、Windows 7を実行しているローカルマシンにTomcat 7とNetbeans IDE 7.2.1をインストールし、すべてをセットアップしました。しかし、実行するとエラーが発生します。

SEVERE: サーブレット jsp の Servlet.service() が例外 org.apache.jasper.JasperException をスローしました: /pages/caselisting.jsp (行: 133、列: 35) "${case.patientmaxdate}" に無効な式が含まれています: javax.el.E​​LException: 式の解析に失敗しました [${case.patientmaxdate}]

その行のコードは次のとおりです。

<td><c:out default="&nbsp;" escapeXml="false" value="${case.patientmaxdate}"/></td>

私はjspを初めて使用し、この古いサイトにいくつかの変更を加えようとしています. 私はいくつかの調査を行い、Tomcat 7 がこのエラーに対していくつかの変更を加えたことを読みました。誰かが私を正しい方向に導くことができれば幸いです。

ありがとう。

完全なスタック トレース:

SEVERE: サーブレット jsp の Servlet.service() が例外 org.apache.jasper.JasperException をスローしました: /pages/caselisting.jsp (行: 133、列: 35) "${case.patientmaxdate}" に無効な式が含まれています: javax.el.E​​LException: 式 [${case.patientmaxdate}] の解析に失敗しました(ErrorDispatcher.java:408) org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:199) で org.apache.jasper.compiler.Validator$ValidateVisitor.checkXmlAttributes(Validator.java:1223) で org. apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:875) at org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1539) at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2376) at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2428) at org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator. java:894) org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1539) で org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2376) で org.apache .jasper.compiler.Node$Visitor.visitBody(Node.java:2428) at org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2434) at org.apache.jasper.compiler.Node$Root .accept(Node.java:475) at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2376) at org.apache.jasper.compiler.Validator.validateExDirectives(Validator.java:1795) org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:217) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:373) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:353) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:340) at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java: 646) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357) で org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) で org.apache.jasper.servlet.JspServlet org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) の javax.servlet.http.HttpServlet.service(HttpServlet.java:728) の .service(JspServlet.java:334)。 catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749) org.apache.catalina.org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:412) の core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:487) org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:339) のorg.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1056) で org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:261) で org.apache.struts.action.RequestProcessor.processForwardConfig (RequestProcessor.java:388) org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:316) org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:231) org.apache. org.apache.struts の struts.action.ActionServlet.process(ActionServlet.java:1164)。action.ActionServlet.doGet(ActionServlet.java:397) で javax.servlet.http.HttpServlet.service(HttpServlet.java:621) で javax.servlet.http.HttpServlet.service(HttpServlet.java:728) で org.apache .catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) で filter.SecureFilter.doFilter(SecureFilter.java:38) org. org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve. java:222) org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) で org.apache.org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java: 99) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) で org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) で org.apache.catalina.connector.CoyoteAdapter .service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) at org. java.util.concurrent.ThreadPoolExecutor での apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1822)。runWorker(ThreadPoolExecutor.java:1110) で java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) で java.lang.Thread.run(Thread.java:722)

エラー行を囲む完全なコードは次のとおりです。

 <c:forEach items="${caselist}" var="case">
   <tr onMouseOver="this.bgColor='#EEEEEE';" onMouseOut="this.bgColor='';">
    <td><c:out default="&nbsp;" escapeXml="false" value="${case.patientmaxdate}"/></td>

ここで、caselist は配列リストです。

4

5 に答える 5

45

あなたがこれを解決したかどうかはわかりませんが、似たような問題が発生して解決したので、参加したいと思いました.

Tomcat 7 の式パーサーは、以前のバージョンよりも許容度が低いようです。Java の予約済みキーワードと競合する EL 式の属性名は好きではありません。

あなたの例では、forEach ループで変数名「case」を使用しているとパーサーが不平を言っている可能性があります。「case」という名前は明らかに予約済みの Java キーワードです。

変数名を予約されていないもの (おそらく「aCase」) に変更する必要があります。

<c:forEach items="${caselist}" var="aCase">
   <tr onMouseOver="this.bgColor='#EEEEEE';" onMouseOut="this.bgColor='';">
    <td><c:out default="&nbsp;" escapeXml="false" value="${aCase.patientmaxdate}"/>

または、Tomcat 7 をより寛容にするために設定できるシステム プロパティがあります。

-Dorg.apache.el.parser.SKIP_IDENTIFIER_CHECK=true

これを、Tomcat 7 のプロパティ ウィンドウ (Tomcat7w.exe を実行) の [Java オプション] ボックスのプロパティ リストの最後に追加する必要があります。

ここに画像の説明を入力

これは、Tomcat 7 で実行しているすべてのアプリのすべてのページに適用されます。

于 2013-05-09T13:55:08.773 に答える
3

このパターンを広範に使用したために、同じ問題が発生しまし <c:if test="${actionVar.class.name == 'MyClass'}"> <c:import url="${actionVar.cellRender}" /></c:if> org.apache.el.parser.SKIP_IDENTIFIER_CHECK=true /etc/tomcat7/catalina.properties

@will-keeling の提案

于 2015-11-18T15:39:23.307 に答える
2

Tomcat 7 にはデフォルトで JSTL が含まれていません。EL 式を使用するには、JSTL を個別に追加する必要があります。行 133 がページで EL 式を使用する最初の箇所である場合、JSTL ライブラリが $CATALINA_HOME/lib または WEB-INF/lib ディレクトリに含まれていることを確認する必要があります。

于 2013-02-01T21:13:47.453 に答える