我有一个在嵌入式Jetty-7.6.8(jdk-6)上运行的webapp应用程序,但是由于浏览器上的Diffe-Hellman错误,我们决定迁移到更新版本的Jetty。所以,我们搬到了Jetty-9.3.3。由于Jetty-9.x需要jdk-8,我也升级了jdk。现在jetty正在启动时没有错误但是当我尝试访问我的登录页面时,我得到一个无法编译的jsp错误。
这些是依赖项:
-org.eclipse.jetty.apache-jsp-9.3.3.v20150827.jar
-org.mortbay.jasper.apache-el-8.0.23.M1.jar
-org.mortbay.jasper.apache-jsp-8.0.23.M1.jar
-org.eclipse.jetty.orbit.org.eclipse.jdt.core-3.8.2.v20130121.jar
-jetty-continuation-9.3.3.v20150827.jar
-jetty-http-9.3.3.v20150827.jar
-jetty-io-9.3.3.v20150827.jar
-jetty-security-9.3.3.v20150827.jar
-jetty-server-9.3.3.v20150827.jar
-jetty-servlet-9.3.3.v20150827.jar
-jetty-util-9.3.3.v20150827.jar
-jetty-webapp-9.3.3.v20150827.jar
-jetty-xml-9.3.3.v20150827.jar
-servlet-api-3.1.jar
日志/浏览器出错:
HTTP ERROR 500
Problem accessing /xdadm/test.jsp. Reason:
Server Error
Caused by:
org.apache.jasper.JasperException: Unable to compile class for JSP
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:600)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:363)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:816)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1686)
at com.xcom.filter.RequestHandler.doFilter(RequestHandler.java:91)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:581)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1156)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1088)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:213)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:119)
at org.eclipse.jetty.server.Server.handle(Server.java:517)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:306)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:242)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:245)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:192)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:245)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:75)
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:213)
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:147)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
at org.apache.jasper.compiler.Validator$ValidateVisitor.<init>(Validator.java:515)
at org.apache.jasper.compiler.Validator.validateExDirectives(Validator.java:1853)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:217)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:356)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:336)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:323)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:585)
... 33 more
请提供任何关于出了什么问题的线索或建议。 TIA
答案 0 :(得分:3)
我对Embedded Jetty Server 9.4.15和JSP支持有相同的问题。 解决方案非常简单:https://www.eclipse.org/jetty/documentation/current/embedded-examples.html#embedded-webapp-jsp
您必须启用AnnotationConfiguration:
// This webapp will use jsps and jstl. We need to enable the
// AnnotationConfiguration in order to correctly
// set up the jsp container
Configuration.ClassList classlist = Configuration.ClassList
.setServerDefault( server );
classlist.addBefore(
"org.eclipse.jetty.webapp.JettyWebXmlConfiguration",
"org.eclipse.jetty.annotations.AnnotationConfiguration" );
答案 1 :(得分:2)
添加所有这些依赖项后,问题得以解决:
jetty-lib/apache-jsp/org.eclipse.jetty.apache-jsp-9.3.8.v20160314.jar
jetty-lib/apache-jsp/org.mortbay.jasper.apache-jsp-8.0.27.jar
jetty-lib/apache-jsp/org.eclipse.jdt.core.compiler.ecj-4.4.2.jar
jetty-lib/apache-jsp/org.mortbay.jasper.apache-el-8.0.27.jar
jetty-lib/jetty-annotations-9.3.8.v20160314.jar jetty-lib/jetty-continuation-9.3.8.v20160314.jar
jetty-lib/jetty-http-9.3.8.v20160314.jar jetty-lib/jetty-io-9.3.8.v20160314.jar
jetty-lib/jetty-plus-9.3.8.v20160314.jar jetty-lib/jetty-security-9.3.8.v20160314.jar
jetty-lib/jetty-server-9.3.8.v20160314.jar jetty-lib/jetty-servlet-9.3.8.v20160314.jar
jetty-lib/jetty-util-9.3.8.v20160314.jar jetty-lib/jetty-webapp-9.3.8.v20160314.jar
jetty-lib/jetty-xml-9.3.8.v20160314.jar jetty-lib/servlet-api-3.1.jar
jetty-lib/setuid/jetty-setuid-java-1.0.3.jar
它看起来如何:
jetty-lib/
├── apache-jsp
│ |── org.eclipse.jdt.core.compiler.ecj-4.4.2.jar
│ ├── org.eclipse.jetty.apache-jsp-9.3.8.v20160314.jar
│ ├── org.mortbay.jasper.apache-el-8.0.27.jar
│ └── org.mortbay.jasper.apache-jsp-8.0.27.jar
├── jetty-annotations-9.3.8.v20160314.jar
├── jetty-continuation-9.3.8.v20160314.jar
├── jetty-http-9.3.8.v20160314.jar
├── jetty-io-9.3.8.v20160314.jar
├── jetty-plus-9.3.8.v20160314.jar
├── jetty-security-9.3.8.v20160314.jar
├── jetty-server-9.3.8.v20160314.jar
├── jetty-servlet-9.3.8.v20160314.jar
├── jetty-util-9.3.8.v20160314.jar
├── jetty-webapp-9.3.8.v20160314.jar
├── jetty-xml-9.3.8.v20160314.jar
├── servlet-api-3.1.jar
└── setuid
├── 32libsetuid-linux.so
├── jetty-setuid-java-1.0.3.jar
└── libsetuid-linux.so
PS:我已经从9.3.3
移到了9.3.8答案 2 :(得分:2)
从Jetty 8.1升级到9.4时,我遇到了完全相同的问题。就我而言,它不是缺少依赖关系,而是关注太多或相互矛盾的依赖关系。我从类路径中删除了以下工件后,问题就消失了:
答案 3 :(得分:1)
Jetty项目维护了一个用于嵌入式码头的JSP的示例项目。
请参阅:github.com/jetty-project/embedded-jetty-jsp
您需要修复的内容:
示例:
[embedded-jetty-jsp]$ mvn dependency:tree
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building embedded-jetty-jsp 1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ embedded-jetty-jsp ---
[INFO] org.eclipse.jetty.demo:embedded-jetty-jsp:jar:1-SNAPSHOT
[INFO] +- javax.servlet:javax.servlet-api:jar:3.1.0:compile
[INFO] +- org.eclipse.jetty:jetty-annotations:jar:9.3.3.v20150827:compile
[INFO] | +- org.eclipse.jetty:jetty-plus:jar:9.3.3.v20150827:compile
[INFO] | | \- org.eclipse.jetty:jetty-jndi:jar:9.3.3.v20150827:compile
[INFO] | +- javax.annotation:javax.annotation-api:jar:1.2:compile
[INFO] | +- org.ow2.asm:asm:jar:5.0.1:compile
[INFO] | \- org.ow2.asm:asm-commons:jar:5.0.1:compile
[INFO] | \- org.ow2.asm:asm-tree:jar:5.0.1:compile
[INFO] +- org.eclipse.jetty:jetty-webapp:jar:9.3.3.v20150827:compile
[INFO] | +- org.eclipse.jetty:jetty-xml:jar:9.3.3.v20150827:compile
[INFO] | \- org.eclipse.jetty:jetty-servlet:jar:9.3.3.v20150827:compile
[INFO] | \- org.eclipse.jetty:jetty-security:jar:9.3.3.v20150827:compile
[INFO] +- org.eclipse.jetty:apache-jsp:jar:9.3.3.v20150827:compile
[INFO] | +- org.eclipse.jetty:jetty-util:jar:9.3.3.v20150827:compile
[INFO] | +- org.eclipse.jetty:jetty-server:jar:9.3.3.v20150827:compile
[INFO] | | +- org.eclipse.jetty:jetty-http:jar:9.3.3.v20150827:compile
[INFO] | | \- org.eclipse.jetty:jetty-io:jar:9.3.3.v20150827:compile
[INFO] | +- org.eclipse.jetty.toolchain:jetty-schemas:jar:3.1.M0:compile
[INFO] | +- org.mortbay.jasper:apache-jsp:jar:8.0.23.M1:compile
[INFO] | | \- org.mortbay.jasper:apache-el:jar:8.0.23.M1:compile
[INFO] | \- org.eclipse.jetty.orbit:org.eclipse.jdt.core:jar:3.8.2.v20130121:compile
[INFO] \- org.eclipse.jetty:apache-jstl:pom:9.3.3.v20150827:compile
[INFO] +- org.apache.taglibs:taglibs-standard-spec:jar:1.2.1:compile
[INFO] \- org.apache.taglibs:taglibs-standard-impl:jar:1.2.1:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.884 s
[INFO] Finished at: 2015-09-15T05:37:53-07:00
[INFO] Final Memory: 13M/481M
[INFO] ------------------------------------------------------------------------
正确设置JSP环境。
注意:
答案 4 :(得分:1)
我有时会遇到同样的错误。因此,对于遇到相同错误的人来说,答案正是其他人指出的 - 依赖管理。
如果您看到Caused by: java.lang.NullPointerException
at org.apache.jasper.compiler.Validator$ValidateVisitor.<init>(Validator.java:515)
它是由Apache Jasper引擎无法检测/加载taglib引起的。
换句话说,你错过了taglibs依赖关系或它的API或它的实现。
确保所有以下依赖项/ JAR都在您的POM中
<dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-jsp</artifactId> <scope>compile</scope> </dependency> <dependency> <groupId>org.mortbay.jasper</groupId> <artifactId>apache-el</artifactId> <scope>compile</scope> </dependency> <dependency> <groupId>org.mortbay.jasper</groupId> <artifactId>apache-jsp</artifactId> <scope>compile</scope> </dependency> <dependency> <groupId>org.mortbay.jasper</groupId> <artifactId>jasper-jsp</artifactId> <type>pom</type> </dependency> <dependency> <groupId>org.apache.taglibs</groupId> <artifactId>taglibs-standard-impl</artifactId> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.taglibs</groupId> <artifactId>taglibs-standard-spec</artifactId> <scope>compile</scope> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>apache-jsp</artifactId> <scope>compile</scope> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>apache-jstl</artifactId> <scope>compile</scope> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-annotations</artifactId> <scope>compile</scope> </dependency>
如果你将WAR着色到一个FAT jar中,如果依赖关系的范围不同(编译与运行时),你就会陷入另一个痛苦的世界,那么依赖关系的顺序很重要,否则你就会开始得到它相同的NullPointerException
。