概要
Windows 10にインストールしたNetBeans 12.1とTomcat 9.0.34でServletを実行できません。
NetBeansで[Java Web]-[Web Application」プロジェクトを作成し、そのまま編集せずに実行するとindex.htmlは正常に表示できますが(http://localhost:8080/WebApplication1/
)、Sevletクラスを追加して、そのまま編集せずに実行してServletにアクセスする(http://localhost:8080/WebApplication1/NewServlet
)とエラーとなります。
自動生成されたアノテーションは @WebServlet(name = "NewServlet", urlPatterns = {"/NewServlet"})
となっています。
上記プロジェクトのデフォルト設定では、CATALINA_HOMEであるC:\apache-tomcat-9.0.34\webapps
にデプロイされず、C:\apache-tomcat-9.0.34\conf\Catalina\localhost
に自動生成されるWebApplication1.xml
ファイルに記述されている場所が使用されます。
<?xml version="1.0" encoding="UTF-8"?> <Context docBase="C:\Users\kamekameusagi\Documents\NetBeansProjects\WebApplication1\build\web" path="/WebApplication1"/>
エラーメッセージ
20-Dec-2020 08:28:53.199 情報 [http-nio-8080-exec-131] org.apache.catalina.core.ApplicationContext.log サーブレット [NewServlet] を利用不可能にマークします 20-Dec-2020 08:28:53.200 重大 [http-nio-8080-exec-131] org.apache.catalina.core.StandardWrapperValve.invoke サーブレット [NewServlet] に例外を割り当てます java.lang.RuntimeException: at controller.NewServlet.<init>(NewServlet.java:1) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:151) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1042) at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:761) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748)
試したこと
作成されたwarファイルをCATALINA_HOMEであるC:\apache-tomcat-9.0.34\webapps
にマニュアルでコピーすると正常に動作することから、CATALINA_HOME以外にあるクラスを正常に読み込めていない様子です。
生成されたNewServlet.classをNetBeansで確認したところ(右クリックしてproperties)、Runtime ClasspathにC:\Users\kamekameusagi\Documents\NetBeansProjects\WebApplication1\build\web\WEB-INF\classes
が登録されていました。
ちなみに、プロジェクトに追加したJSPファイルには正常にアクセスすることができます。
色々調べたのですが、CATALINA_HOME以外の場所を使用するときには「ContextのdocBaseとpathに設定すること」としか記述がなく、正常に行われているようで、行き詰っています。
また、YouTubeで見つけたデモでは、DeployするときにDeploy先を聞くダイアログが表示されますが、私の環境では表示されません。
![guest](/img/icon/icnUserSample.jpg)
あなたの回答
tips
プレビュー