如何使Netbeans 9在Tomcat上部署有效的Web应用程序

时间:2018-07-13 11:43:51

标签: java tomcat netbeans netbeans-9

我有一个正在运行的Tomcat实例;

  • Tomcat 9.0.10
  • OpenJDK 10.0.2

我有一个在Library JDK1.8上编译的可运行的Netbeans 8.2项目,它可以在上述服务器上正常构建,部署和运行。

我现在正尝试迁移到Netbeans 9,因此我在OpenJDK 10.0.2 JDK上运行了该版本。如果我构建相同的项目(仍在Library JDK1.8上),它将很好地构建和部署。但是,当它在同一台服务器上运行时,出现以下错误;

javax.servlet.ServletException: Error instantiating servlet class [xxxx.xxx.xxx.TestServlet]
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:491)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:764)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1388)
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135)
    java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.base/java.lang.Thread.run(Thread.java:844)
Root Cause

java.lang.RuntimeException: 
    xxxx.xxx.xxx.TestServlet.<init>(TestServlet.java:1)
    java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:488)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:491)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:764)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1388)
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135)
    java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.base/java.lang.Thread.run(Thread.java:844)
Note The full stack trace of the root cause is available in the server logs.

(xxxx.xxx.xxx.TestServlet替换为真正的Servlet类)

它抱怨Servlet的第一行,实际上还是模板注释的“ /*”。

我会认为,如果使用相同的JDK1.8 JDK再次编译两个Netbeans,那么部署的WAR应该相同并且都可以工作。 Netbeans 9似乎在构建一些不同的东西,并且所报告的错误并没有太大帮助。

有任何线索吗?

2 个答案:

答案 0 :(得分:10)

首先,请注意Netbeans 9.0 RC1 only supports Java SE development ...

  

第9.0版,它将仅用于Java SE开发的IDE ,    Oracle还没有捐赠其他功能,这些功能正在   经过审核和处理,并成为后续Apache版本的一部分   NetBeans。

也就是说,Apache NetBeans 9的早期测试版提供了用于构建Java EE应用程序的插件,并且that functionality will be reintroduced once NetBeans 9.0 is released

  

Oracle已审核并捐赠了用于提供功能的所有模块   支持JavaScript,PHP,Groovy和企业Java(即Java   EE或Jakarta EE)。这些功能位于   Apache NetBeans Git存储库中的单独分支。他们会   集成,即在Apache NetBeans之后再许可给Apache   (正在孵化)9.0发行了。

您没有指定要使用的NetBeans 9版本(过去几个月来有很多版本),但是如果您download NetBeans 9.0 RC1并没有提供创建 Java Web < / strong>应用程序,也无法添加应用程序服务器(例如Tomcat或Wildfly),也没有提供任何合适的插件。因此,大概不正式支持Java SE范围之外的任何内容,例如Web应用程序的部署。

但是,您仍然可以手动添加插件(后果自负),以在Apache NetBeans 9.0中启用Java EE功能:

  • 工具>插件>设置标签> 单击添加按钮
  • Update Center Customizer 屏幕上,在 Name 字段中输入一些值(例如,“我的插件” ),http://updates.netbeans.org/netbeans/updates/8.2/uc/final/distribution/catalog.xml.gz URL 字段中,然后单击确定
  • 这应在设置标签的更新中心配置列表中创建一个新条目。
  • 检查新条目是否应立即将插件添加到可用插件标签中。就我而言,它增加了43个条目。
  • 点击可用插件标签,然后点击类别列以按类别对条目进行排序。
  • 检查所有类别 Java Web和EE 的条目,然后单击安装按钮。
  • 将下载并安装插件。要确认这一点,请单击已安装标签。您应该看到刚刚添加的插件,例如 Java EE Base RESTful Web Services

此后,您应该正确启用Java EE功能。那么您可以添加该功能,然后重试部署并提出建议吗?

答案 1 :(得分:0)

这在Netbeans 10中也有效,并且允许您安装比Tomcat IMHO更好的Payara插件(Payara,Payara Micro)。