実現したいこと
loginservletを用いて、ログインボタンクリック時にusers.jspに遷移したい。
前提
ログイン画面のログインボタンクリック時に、
loginservlet内のdoPOSTメソッドを起動し、
users.jspに遷移したいが、
ログインボタンクリック時にエラーメッセージ500が
表示される。
発生している問題・エラーメッセージ
エラーメッセージ タイプ 例外報告 メッセージ サーブレットクラス [loginservlet] を初期化中のエラー 説明 サーバーは予期しない条件に遭遇しました。それはリクエストの実行を妨げます。 例外 jakarta.servlet.ServletException: サーブレットクラス [loginservlet] を初期化中のエラー org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:400) org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1739) org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.base/java.lang.Thread.run(Thread.java:1623) 根本原因 java.lang.ClassNotFoundException: loginservlet org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1437) org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1245) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:400) org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1739) org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.base/java.lang.Thread.run(Thread.java:1623) 注意 原因のすべてのスタックトレースは、サーバのログに記録されています。 ソースコード 【index.jsp】 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <!DOCTYPE html> <html> <head> <!-- 文字コードの指定 --> <meta charset="utf-8"> <meta name="viewport" content="width=device- width, initial-scale=1"> <title>ユーザログイン画面</title> <link rel="stylesheet" type="text/css" href="index.css"> </head> <body> <div class="login"> <h1>ログイン情報入力</h1> <!-- サーバに入力情報を送信するためにPOSTリクエストを実施 --> <form action="login/submit-servlet" method="POST"> <h3>ユーザID</h3> <input type="text" name="userID" placeholder="UserID" required="required" /> <h3>パスワード</h3> <input type="password" name="Password" placeholder="Password" required="required" /> <button type="submit" class="btn1">ログイン</button> </form> </div> </body> </html> 【loginservlet.java】 import java.io.IOException; import java.util.ArrayList; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; // @WebServletアノテーション使うために必要 import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; @WebServlet("/submit-servlet") public class loginservlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // ログイン画面へ遷移 RequestDispatcher rd = request.getRequestDispatcher("index.jsp"); rd.forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { RequestDispatcher rc = request.getRequestDispatcher("users.jsp"); rc.forward(request, response); } }
試したこと
https://kanda-it-school-kensyu.com/java-jsp-servlet-contents/jjs_ch14/jjs_1404/
上記URL記載の内容を参考に、下記を確認しました。
①web.xmlのservlat-classタグの記述は正しいか
②サーブレットのファイル名・クラス名は正しいか
③サーブレットのクラスが適切に定義されてるか(servletクラスを継承できているか)
④WEB-INF\classesの対象のパッケージの階層にクラスファイル(.class)が作成されているか
【web.xml】
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>loginservlet</servlet-name>
<servlet-class>loginservlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>loginservlet</servlet-name>
<url-pattern>/login/submit-servlet</url-pattern>
</servlet-mapping>
</web-app>
⓵~③に関してはloginservlet.javaとweb.xmlファイルを確認して問題ないと考えております。
現在、④のclassファイルが生成できていないため何故できないかを検証中です。
補足情報(FW/ツールのバージョンなど)
開発環境:VSCODE
サーバ:Tomcat10.1
Mavenプロジェクトで動的プロジェクトを作成

あなたの回答
tips
プレビュー