【问题标题】:JSP 2.3 with Tomcat 8带有 Tomcat 8 的 JSP 2.3
【发布时间】:2016-04-28 03:00:26
【问题描述】:

我正在尝试从 Tomcat 7 迁移到 Tomcat 8。我使用 maven 作为构建工具。 从Tomcat 8 Maven Plugin for Java 8 我看到可以将tomcat7-maven-plugin 与Tomcat8 一起使用。然而,这里的问题是 Jasper 抱怨一个无效的 JSP 版本实际上不应该。

pom.xml

<dependency>
    <groupId>javax.faces</groupId>
    <artifactId>jsf-api</artifactId>
    <version>2.1</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>javax.servlet.jsp-api</artifactId>
    <version>2.3.1</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.el</groupId>
    <artifactId>javax.el-api</artifactId>
    <version>3.0.0</version>
    <scope>provided</scope>
</dependency>
...
...

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
</plugin>

我得到的错误是

Jan 22, 2016 2:54:55 AM org.apache.jasper.compiler.TldLocationsCache tldScanJar
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
Jan 22, 2016 2:54:55 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [jsp] in context with path [/push] threw exception [/index.jsp (line: 7, column: 66) Invalid version number: "2.3", must be "1.2", "2.0", "2.1" or "2.2"] with root cause
org.apache.jasper.JasperException: /index.jsp (line: 7, column: 66) Invalid version number: "2.3", must be "1.2", "2.0", "2.1" or "2.2"
    at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:42)


    at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:443)
    at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:149)
    at org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:526)
    at org.apache.jasper.compiler.Node$JspRoot.accept(Node.java:564)
    at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2375)
    at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2427)
    at org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2433)
    at org.apache.jasper.compiler.Node$Root.accept(Node.java:474)
    at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2375)
    at org.apache.jasper.compiler.Validator.validateExDirectives(Validator.java:1798)
    at 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)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

由于Tomcat 8 uses Jasper 2 实现JSF 2.3 并从下面的代码Jasper 2:-

 public void visit(Node.JspRoot n) throws JasperException {
     JspUtil.checkAttributes(TagConstants.ROOT_ACTION, n, jspRootAttrs, err);
     String version = n.getTextAttribute("version");
     if (!version.equals("1.2") && !version.equals("2.0") &&
             !version.equals("2.1") && !version.equals("2.2") &&
             !version.equals("2.3")) {
         err.jspError(n, MESSAGES.invalidJspVersionNumber(version));
     }
     visitBody(n);
 }

我怀疑 Jasper 的版本可能不是被引用的正确版本,导致错误,但我没有办法评估这一点。任何线索表示赞赏!

【问题讨论】:

    标签: java maven jsp tomcat


    【解决方案1】:

    这是目前仅支持 Tomcat 7 的 tomcat7-maven-plugin 的问题。有关于调整嵌入式 tomcat 版本的建议在 http://tomcat.apache.org/maven-plugin-trunk/tomcat7-maven-plugin/adjust-embedded-tomcat-version.html。但是,它会导致问题,如 - https://issues.apache.org/jira/browse/MTOMCAT-234

    在撰写本文时,它仍未解决。鉴于 gradle-tomcat-plugin 支持 Tomcat 8,我正在考虑将我的整个项目永久转移到 Gradle。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-11
      • 1970-01-01
      • 1970-01-01
      • 2018-02-10
      相关资源
      最近更新 更多