eclipseでサーブレットクラスを実行できません。
解決したいこと
eclipseでサーブレットクラスを実行できません。
「スッキリわかるサーブレット&JSP入門第4版」という書籍を参考にし、
eclipseで「動的Webプロジェクトの作成」→「サーブレットクラスの作成」→「サーブレットクラスの実行」という流れで進めてきたのですが、
eclipseでサーブレットクラス(UranaiServlet.java)で右クリック、「実行」→「サーバーで実行」をすると、
URLが「http://localhost:8080/example/WEB-INF/classes/servlet/UranaiServlet.java」となってしまい、404エラーが出てしまいます。
手打ちで「http://localhost:8080/example/UranaiServlet」とすれば、問題なく動きます。
「WEB-INF」ディレクトリ以下だと、ブラウザから直接リクエストできないというのは分かりましたが、
eclipseで「サーバーから実行」をすると、「http://localhost:8080/example/WEB-INF/classes/servlet/UranaiServlet.java」のパスになってしまう理由が分かりません。
以下は「UranaiServlet.java」です。
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@WebServlet("/UranaiServlet")
public class UranaiServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 運勢をランダムで決定
String[] luckArray = { "超スッキリ", "スッキリ", "最悪" };
int index = (int) (Math.random() * 3);
String luck = luckArray[index];
// 実行日を取得
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("MM月dd日");
String today = sdf.format(date);
// HTMLを出力
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset=\"UTF-8\" />");
out.println("<title>スッキリ占い</title>");
out.println("</head>");
out.println("<body>");
out.println("<p>" + today + "の運勢は「" + luck + "」です</p>");
out.println("</body>");
out.println("</html>");
}
}