java.lang.NoSuchMethodError: javax.servlet.jsp.tagext.TagAttributeInfo with embedded jetty with jsp support
java.lang.NoSuchMethodError: javax.servlet.jsp.tagext.TagAttributeInfo with embedded jetty with jsp support
根据此处的说明
我将以下启动代码放在一起以在嵌入式模式下启动带有 jsp 支持的码头,但仍然没有运气。我遇到了以下错误,下面提供了完整的堆栈:
java.lang.NoSuchMethodError: javax.servlet.jsp.tagext.TagAttributeInfo.<init>(Ljava/lang/String;ZLjava/lang/String;ZZLjava/lang/String;ZZLjava/lang/String;Ljava/lang/String;)V
有问题的 class javax.servlet.jsp.tagext.TagAttributeInfo 在 org.mortbay.jasper.apache-jsp-8.0.9.M3.jar 中定义。由于其他原因也需要这个 jar,以引入 class JasperInitializer,JettyJasperInitializer 的 superclass。
我怀疑不建议将 jar org.mortbay.jasper.apache-jsp-8.0.9.M3.jar 用于 jetty 9.2.10.v20150310。如果是这样 - 还有什么选择?
我应该在哪里获得 org.apache.jasper.servlet.JasperInitializer 和 javax.servlet.jsp.tagext.TagAttributeInfo?
java.lang.NoSuchMethodError: javax.servlet.jsp.tagext.TagAttributeInfo.<init>(Ljava/lang/String;ZLjava/lang/String;ZZLjava/lang/String;ZZLjava/lang/String;Ljava/lang/String;)V
at org.apache.tomcat.util.descriptor.tld.TldRuleSet$Attribute.toTagAttributeInfo(TldRuleSet.java:272)
at org.apache.tomcat.util.descriptor.tld.TldRuleSet$TagAttributeRule.end(TldRuleSet.java:150)
at org.apache.tomcat.util.digester.Digester.endElement(Digester.java:959)
at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
at org.apache.xerces.impl.dtd.XMLNSDTDValidator.endNamespaceScope(Unknown Source)
at org.apache.xerces.impl.dtd.XMLDTDValidator.handleEndElement(Unknown Source)
at org.apache.xerces.impl.dtd.XMLDTDValidator.endElement(Unknown Source)
at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1457)
at org.apache.tomcat.util.descriptor.tld.TldParser.parse(TldParser.java:76)
at org.apache.jasper.servlet.TldScanner.parseTld(TldScanner.java:257)
at org.apache.jasper.servlet.TldPreScanned.scanJars(TldPreScanned.java:46)
at org.apache.jasper.servlet.TldScanner.scan(TldScanner.java:99)
at org.apache.jasper.servlet.JasperInitializer.onStartup(JasperInitializer.java:103)
at org.eclipse.jetty.plus.annotation.ContainerInitializer.callStartup(ContainerInitializer.java:140)
at org.eclipse.jetty.annotations.ServletContainerInitializersStarter.doStart(ServletContainerInitializersStarter.java:65)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:274)
at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1349)
at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1342)
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741)
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:505)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
at org.eclipse.jetty.server.Server.start(Server.java:387)
at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
at org.eclipse.jetty.server.Server.doStart(Server.java:354)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
at webappdev.JettyWebAppTest.init(JettyWebAppTest.java:140)
at webappdev.JettyWebAppTest.main(JettyWebAppTest.java:148)
我的启动代码:
public static void main(String[] args) throws Exception
{
JettyWebAppTest thiss = new JettyWebAppTest();
thiss.init();
}
private void init() throws Exception {
System.setProperty("java.io.tmpdir", "/tmp/bolek");
System.setProperty("org.apache.jasper.compiler.disablejsr199", "false");
Server server = new Server(8080);
WebAppContext context = new WebAppContext();
context.setResourceBase(<myresourcebase>);
context.setDescriptor("/WEB-INF/web.xml");
context.setContextPath("/");
context.setParentLoaderPriority(false);
context.setAttribute(
"org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",
".*/[^/]*servlet-api-[^/]*\.jar$|.*/javax.servlet.jsp.jstl-.*\.jar$|.*/.*taglibs.*\.jar$");
context.setAttribute("javax.servlet.context.tempdir",
System.getProperty("java.io.tmpdir"));
context.setAttribute("org.eclipse.jetty.containerInitializers",
this.jspInitializers());
context.setAttribute(InstanceManager.class.getName(),
new SimpleInstanceManager());
context.addBean(new ServletContainerInitializersStarter(context),
true);
context.setClassLoader(this.getUrlClassLoader());
context.addServlet(this.jspServletHolder(), "*.jsp");
server.setHandler(context);
server.start();
server.join();
}
private ServletHolder defaultServletHolder(URI baseUri)
{
ServletHolder holderDefault = new ServletHolder("default",
DefaultServlet.class);
holderDefault.setInitParameter("resourceBase",
baseUri.toASCIIString());
holderDefault.setInitParameter("dirAllowed", "true");
return holderDefault;
}
private List<ContainerInitializer> jspInitializers()
{
JettyJasperInitializer sci = new JettyJasperInitializer();
ServletContainerInitializer scii;
scii = (ServletContainerInitializer)sci;
ContainerInitializer initializer = new ContainerInitializer(scii, null);
List<ContainerInitializer> initializers = new ArrayList<ContainerInitializer>();
initializers.add(initializer);
return initializers;
}
private ClassLoader getUrlClassLoader()
{
ClassLoader jspClassLoader = new URLClassLoader(new URL[0], this.getClass().getClassLoader());
return jspClassLoader;
}
private ServletHolder jspServletHolder()
{
ServletHolder holderJsp = new ServletHolder("jsp", JettyJspServlet.class);
holderJsp.setInitOrder(0);
holderJsp.setInitParameter("logVerbosityLevel", "DEBUG");
holderJsp.setInitParameter("fork", "false");
holderJsp.setInitParameter("xpoweredBy", "false");
holderJsp.setInitParameter("compilerTargetVM", "1.7");
holderJsp.setInitParameter("compilerSourceVM", "1.7");
holderJsp.setInitParameter("keepgenerated", "true");
return holderJsp;
}
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
您有冲突的 jar。
发行版 lib/jsp
中的文件用于 JSP 的 Glassfish 实现。
Glassfish 实施现已弃用(由于存在大量错误且缺乏实施者的更新),并已在即将发布的 Jetty 9.3 版本中完全删除。
不要在您的项目中包含这些 Glassfish 实现 jar。
仅使用发行版 lib/apache-jsp/
目录中的 4 个 jar,这是 Apache Jasper JSP 实现。
Apache Jasper JSP 实现得到完全支持、稳定、最新,并且拥有活跃健康的社区和开发人员基础。
根据此处的说明
java.lang.NoSuchMethodError: javax.servlet.jsp.tagext.TagAttributeInfo.<init>(Ljava/lang/String;ZLjava/lang/String;ZZLjava/lang/String;ZZLjava/lang/String;Ljava/lang/String;)V
有问题的 class javax.servlet.jsp.tagext.TagAttributeInfo 在 org.mortbay.jasper.apache-jsp-8.0.9.M3.jar 中定义。由于其他原因也需要这个 jar,以引入 class JasperInitializer,JettyJasperInitializer 的 superclass。
我怀疑不建议将 jar org.mortbay.jasper.apache-jsp-8.0.9.M3.jar 用于 jetty 9.2.10.v20150310。如果是这样 - 还有什么选择? 我应该在哪里获得 org.apache.jasper.servlet.JasperInitializer 和 javax.servlet.jsp.tagext.TagAttributeInfo?
java.lang.NoSuchMethodError: javax.servlet.jsp.tagext.TagAttributeInfo.<init>(Ljava/lang/String;ZLjava/lang/String;ZZLjava/lang/String;ZZLjava/lang/String;Ljava/lang/String;)V
at org.apache.tomcat.util.descriptor.tld.TldRuleSet$Attribute.toTagAttributeInfo(TldRuleSet.java:272)
at org.apache.tomcat.util.descriptor.tld.TldRuleSet$TagAttributeRule.end(TldRuleSet.java:150)
at org.apache.tomcat.util.digester.Digester.endElement(Digester.java:959)
at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
at org.apache.xerces.impl.dtd.XMLNSDTDValidator.endNamespaceScope(Unknown Source)
at org.apache.xerces.impl.dtd.XMLDTDValidator.handleEndElement(Unknown Source)
at org.apache.xerces.impl.dtd.XMLDTDValidator.endElement(Unknown Source)
at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1457)
at org.apache.tomcat.util.descriptor.tld.TldParser.parse(TldParser.java:76)
at org.apache.jasper.servlet.TldScanner.parseTld(TldScanner.java:257)
at org.apache.jasper.servlet.TldPreScanned.scanJars(TldPreScanned.java:46)
at org.apache.jasper.servlet.TldScanner.scan(TldScanner.java:99)
at org.apache.jasper.servlet.JasperInitializer.onStartup(JasperInitializer.java:103)
at org.eclipse.jetty.plus.annotation.ContainerInitializer.callStartup(ContainerInitializer.java:140)
at org.eclipse.jetty.annotations.ServletContainerInitializersStarter.doStart(ServletContainerInitializersStarter.java:65)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:274)
at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1349)
at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1342)
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741)
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:505)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
at org.eclipse.jetty.server.Server.start(Server.java:387)
at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
at org.eclipse.jetty.server.Server.doStart(Server.java:354)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
at webappdev.JettyWebAppTest.init(JettyWebAppTest.java:140)
at webappdev.JettyWebAppTest.main(JettyWebAppTest.java:148)
我的启动代码:
public static void main(String[] args) throws Exception
{
JettyWebAppTest thiss = new JettyWebAppTest();
thiss.init();
}
private void init() throws Exception {
System.setProperty("java.io.tmpdir", "/tmp/bolek");
System.setProperty("org.apache.jasper.compiler.disablejsr199", "false");
Server server = new Server(8080);
WebAppContext context = new WebAppContext();
context.setResourceBase(<myresourcebase>);
context.setDescriptor("/WEB-INF/web.xml");
context.setContextPath("/");
context.setParentLoaderPriority(false);
context.setAttribute(
"org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",
".*/[^/]*servlet-api-[^/]*\.jar$|.*/javax.servlet.jsp.jstl-.*\.jar$|.*/.*taglibs.*\.jar$");
context.setAttribute("javax.servlet.context.tempdir",
System.getProperty("java.io.tmpdir"));
context.setAttribute("org.eclipse.jetty.containerInitializers",
this.jspInitializers());
context.setAttribute(InstanceManager.class.getName(),
new SimpleInstanceManager());
context.addBean(new ServletContainerInitializersStarter(context),
true);
context.setClassLoader(this.getUrlClassLoader());
context.addServlet(this.jspServletHolder(), "*.jsp");
server.setHandler(context);
server.start();
server.join();
}
private ServletHolder defaultServletHolder(URI baseUri)
{
ServletHolder holderDefault = new ServletHolder("default",
DefaultServlet.class);
holderDefault.setInitParameter("resourceBase",
baseUri.toASCIIString());
holderDefault.setInitParameter("dirAllowed", "true");
return holderDefault;
}
private List<ContainerInitializer> jspInitializers()
{
JettyJasperInitializer sci = new JettyJasperInitializer();
ServletContainerInitializer scii;
scii = (ServletContainerInitializer)sci;
ContainerInitializer initializer = new ContainerInitializer(scii, null);
List<ContainerInitializer> initializers = new ArrayList<ContainerInitializer>();
initializers.add(initializer);
return initializers;
}
private ClassLoader getUrlClassLoader()
{
ClassLoader jspClassLoader = new URLClassLoader(new URL[0], this.getClass().getClassLoader());
return jspClassLoader;
}
private ServletHolder jspServletHolder()
{
ServletHolder holderJsp = new ServletHolder("jsp", JettyJspServlet.class);
holderJsp.setInitOrder(0);
holderJsp.setInitParameter("logVerbosityLevel", "DEBUG");
holderJsp.setInitParameter("fork", "false");
holderJsp.setInitParameter("xpoweredBy", "false");
holderJsp.setInitParameter("compilerTargetVM", "1.7");
holderJsp.setInitParameter("compilerSourceVM", "1.7");
holderJsp.setInitParameter("keepgenerated", "true");
return holderJsp;
}
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
您有冲突的 jar。
发行版 lib/jsp
中的文件用于 JSP 的 Glassfish 实现。
Glassfish 实施现已弃用(由于存在大量错误且缺乏实施者的更新),并已在即将发布的 Jetty 9.3 版本中完全删除。
不要在您的项目中包含这些 Glassfish 实现 jar。
仅使用发行版 lib/apache-jsp/
目录中的 4 个 jar,这是 Apache Jasper JSP 实现。
Apache Jasper JSP 实现得到完全支持、稳定、最新,并且拥有活跃健康的社区和开发人员基础。