質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

0回答

1194閲覧

Javaでtodoアプリを作成 EclipceでHTMLファイルを実行すると404が返ってくる

marimo_marimo

総合スコア2

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2022/03/20 09:28

環境

  • MackBook(M1) macOS Monterey

前提

Java言語でTodoアプリを作成しています。
以下を作り終えたので実行してみると404が返ってきます。

html

1<!--home.html--> 2 3<!DOCTYPE html> 4<html> 5<head> 6<meta charset="UTF-8"> 7<title>Home</title> 8</head> 9<body> 10 <h1>Todo 管理Webアプリケーション</h1> 11 <!-- formで『todo一覧を表示』と書かれたボタンを表示。 12 ボタンを押すと、actionで指定したlist-servletに処理が行く。リクエスト方法はget指定 --> 13 <form action ="list-servlet" method="get"> 14 <input type="submit" value="Todo一覧を表示"> 15 </form> 16 17</body> 18</html>

Jsp

1 2<!--list.jsp--> 3 4<%@ page language="java" contentType="text/html; charset=UTF-8" 5 pageEncoding="UTF-8" import="java.util.List, java.util.ArrayList, 6 model.dao.dto.TodoDTO"%> 7 8<!DOCTYPE html> 9<html> 10<head> 11<meta charset="UTF-8"> 12<title>Todo List</title> 13</head> 14<body> 15 <!-- サーブレットでリクエストスコープにtodoListを設定したので、これをjspで取り出すことができる --> 16 <!-- getAttributeの引数はsetAttributeしたときの第一引数と一致している必要があ --> 17 <% 18 List<TodoDTO> todoList = (List)request.getAttribute("todoList"); 19 %> 20 21 <%for(TodoDTO todo:todoList){ %> 22 <%=todo.getTodo()%>期限:<%=todo.getTimeLimit() %><br> 23 <% } %> 24 25</body> 26</html>

java

1//TodoDTO.java 2 3package model.dao.dto; 4 5import java.sql.Date; 6 7//データを管理するためのクラス 8 9public class TodoDTO { 10 //private=メンバ変数に直接値を格納するのを禁止して、必ずメソッド経由でしか格納・参照できないようにしている 11 12 //todoのIDを保持する  13 private int id; 14 //todoの内容を保持する 15 private String todo; 16 //todoの期限を保持する 17 private Date timeLimit; 18 19 /** 20 * 引数なしのコンストラクタ 21 * newで初期化 22 */ 23 public TodoDTO() { 24 id = 0; 25 todo = ""; 26 timeLimit = new Date(System.currentTimeMillis()); 27 } 28 29 //受け取った引数によって初期化を行う 30 //基本は省略できるが、メソッド内にフィールドと同じ名前のローカル変数があるときはthisが必要 31 public TodoDTO(int id, String todo, Date timeLimit) { 32 this.id = id; 33 this.todo = todo; 34 this.timeLimit = timeLimit; 35 } 36 37 //idを取得 38 public int getld() { 39 return id; 40 } 41 42 //idを設定する 43 public void setld(int id) { 44 this.id = id; 45 } 46 47 //Todoの内容を取得する 48 public String getTodo() { 49 return todo; 50 } 51 52 //Todoの内容を設定する 53 public void setTodo(String todo) { 54 this.todo = todo; 55 } 56 57 //Todoの期限を取得する 58 public Date getTimeLimit() { 59 return timeLimit; 60 } 61 62 //todoの期限を設定する 63 public void setTimeLimit(Date timeLimit) { 64 this.timeLimit = timeLimit; 65 } 66} 67 68

java

1//TodoListDAO.java 2 3package model.dao; 4 5import java.sql.Connection; 6import java.sql.Date; 7import java.sql.PreparedStatement; 8import java.sql.ResultSet; 9import java.sql.SQLException; 10import java.util.ArrayList; 11import java.util.List; 12 13import model.DBConnection; 14import model.dao.dto.TodoDTO; 15 16//todoの一覧を取得するクラス 17 18public class TodoListDAO { 19 //todoの一覧を取得する 20 public List<TodoDTO> getTodoList() throws ClassNotFoundException, 21SQLException{ 22 //返却用Listの初期化 23 List<TodoDTO>todoList = new ArrayList<>(); 24 //実行するSQL 25 String sql = "SERECT id, todo, timeList from todo"; 26 //DBに接続し、todo一覧を取得する 27 //PostgreSQLへの接続を取得するためにgetConnectionを呼び出す 28 try(Connection con = DBConnection.getConnection(); 29 //String型のSQLをPostgreSQLで実行できるように、prepareStatementメソッドに引数としてsqlを渡す 30 PreparedStatement pstmt = con.prepareStatement(sql)) 31 { 32 33 //SQLを実行しResultSetの変数に結果を格納する 34 /* 35 * 「ResultSet」はselect文の実行結果を格納するインタフェースなので、 36 * ResultSet型の変数を用意して結果を受け取るようにしている 37 * 変数resのなかに取得できたデータが格納される 38 * */ 39 ResultSet res = pstmt.executeQuery(); 40 //実行結果を順に取り出す 41 /* 42 * TodoDTOのコンストラクタに渡して、それをtodoListに追加する。 43 * PostgreSQLから取得したTodoを全てtodoListに追加し終わるとwhileループを抜けるという流れ 44 * */ 45 while(res.next()) { 46 //それぞれid,todo,timeListを取得する 47 //小文字・大文字のタイポ注意 48 int id = res.getInt("id"); 49 String todo = res.getString("todo"); 50 Date timeLimit = res.getDate("timeLimit"); 51 52 //取得したid,todo,timeListでTodoDTOの初期化をしてListに追加する 53 todoList.add(new TodoDTO(id,todo,timeLimit)); 54 } 55 } 56 57 return todoList; 58 } 59} 60

java

1//DBConnection.java 2package model; 3 4import java.sql.Connection; 5import java.sql.DriverManager; 6import java.sql.SQLException; 7 8//DBへの接続をするクラス 9 10public class DBConnection { 11 /*throw宣言で例外を呼び出し手元に渡すことを宣言している 12 (Clsss .fromNameをした時にClassNotFoundException、DriverManager.getConectionをしたときにSQLExceptionが発生する可能性があるから)*/ 13 public static Connection getConnection() throws SQLException, 14ClassNotFoundException{ 15 //DBのURL 16 final String URL = "jdbc:postgresql://localhost:5432/tododb"; 17 //DBにアクセスするユーザー 18 final String USER = "sampleUSer"; 19 //パスワード 20 final String PASSWORD = "samplePass"; 21 22 Class.forName("org.postgresql.Driver"); 23 //DBへ接続 24 //引数として、URL、USER、PASSWORDを渡す 25 Connection con = DriverManager.getConnection(URL,USER,PASSWORD); 26 27 return con; 28 //サーブレットを使ってPostgreSQLに接続するための準備ができた状態 29 } 30 31} 32

java

1//ListServlet.java 2 3package servlet; 4 5import java.io.IOException; 6import java.sql.SQLException; 7import java.util.ArrayList; 8import java.util.List; 9 10import javax.servlet.RequestDispatcher; 11import javax.servlet.ServletException; 12import javax.servlet.annotation.WebServlet; 13import javax.servlet.http.HttpServlet; 14import javax.servlet.http.HttpServletRequest; 15import javax.servlet.http.HttpServletResponse; 16 17import model.dao.TodoListDAO; 18import model.dao.dto.TodoDTO; 19 20/** 21 * Servlet implementation class ListServlet 22 * home.htmlでlist-servletにリクエストが投げられるように設定している 23 */ 24@WebServlet("/list-servlet") 25public class ListServlet extends HttpServlet { 26 private static final long serialVersionUID = 1L; 27 28 /** 29 * @see HttpServlet#HttpServlet() 30 */ 31 public ListServlet() { 32 super(); 33 // TODO Auto-generated constructor stub 34 } 35 36 /** 37 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 38 * formでメソッドをgetにしたためformが提出されるとdoGetメソッドが実行される。 39 */ 40 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 41 //todoの一覧を保持する変数を宣言 42 List <TodoDTO> todoList = new ArrayList<>(); 43 //DAOを生成し、Todo一覧を取得する 44 TodoListDAO dao = new TodoListDAO(); 45 try { 46 //todo一覧を取得する 47 todoList = dao.getTodoList(); 48 }catch(SQLException | ClassNotFoundException e) { 49 e.printStackTrace(); 50 } 51 //todo一覧をリクエストスコープに設定する 52 request.setAttribute("todoList", todoList); 53 //todo一覧画面に遷移する 54 RequestDispatcher rd = request.getRequestDispatcher("list.jsp"); 55 rd.forward(request, response); 56 57 } 58 59 /** 60 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 61 * doPostメソッドが実行される。 62 */ 63 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 64 // TODO Auto-generated method stub 65 doGet(request, response); 66 } 67 68} 69 70

実現したいこと

  • 404が返ってくるのを解消したい

発生している問題・エラーメッセージ

情報: Serverのバージョン名: Apache Tomcat/9.0.56 [日 3月 20 17:58:26 JST 2022] 情報: Server ビルド: Dec 2 2021 14:30:07 UTC [日 3月 20 17:58:26 JST 2022] 情報: サーバーのバージョン番号: 9.0.56.0 [日 3月 20 17:58:26 JST 2022] 情報: OS 名: Mac OS X [日 3月 20 17:58:26 JST 2022] 情報: OS バージョン: 11.2 [日 3月 20 17:58:26 JST 2022] 情報: アーキテクチャ: x86_64 [日 3月 20 17:58:26 JST 2022] 情報: Java Home: /Applications/Eclipse_2021-12.app/Contents/java/17/Home [日 3月 20 17:58:26 JST 2022] 情報: JVM バージョン: 17.0.1+12 [日 3月 20 17:58:26 JST 2022] 情報: JVM ベンダ: Eclipse Adoptium [日 3月 20 17:58:26 JST 2022] 情報: CATALINA_BASE: /Users/***/JavaTodoSample1/.metadata/.plugins/org.eclipse.wst.server.core/tmp0 [日 3月 20 17:58:26 JST 2022] 情報: CATALINA_HOME: /Applications/Eclipse_2021-12.app/Contents/tomcat/9 [日 3月 20 17:58:26 JST 2022] 情報: コマンドライン引数: -Dcatalina.base=/Users/***/JavaTodoSample1/.metadata/.plugins/org.eclipse.wst.server.core/tmp0 [日 3月 20 17:58:26 JST 2022] 情報: コマンドライン引数: -Dcatalina.home=/Applications/Eclipse_2021-12.app/Contents/tomcat/9 [日 3月 20 17:58:26 JST 2022] 情報: コマンドライン引数: -Dwtp.deploy=/Users/***/JavaTodoSample1/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps [日 3月 20 17:58:26 JST 2022] 情報: コマンドライン引数: --add-opens=java.base/java.lang=ALL-UNNAMED [日 3月 20 17:58:26 JST 2022] 情報: コマンドライン引数: --add-opens=java.base/java.io=ALL-UNNAMED [日 3月 20 17:58:26 JST 2022] 情報: コマンドライン引数: --add-opens=java.base/java.util=ALL-UNNAMED [日 3月 20 17:58:26 JST 2022] 情報: コマンドライン引数: --add-opens=java.base/java.util.concurrent=ALL-UNNAMED [日 3月 20 17:58:26 JST 2022] 情報: コマンドライン引数: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED [日 3月 20 17:58:26 JST 2022] 情報: コマンドライン引数: -Dfile.encoding=UTF-8 [日 3月 20 17:58:26 JST 2022] 情報: コマンドライン引数: -XX:+ShowCodeDetailsInExceptionMessages [日 3月 20 17:58:26 JST 2022] 情報: 商用環境に最適な性能を発揮する APR ベースの Tomcat ネイティブライブラリが java.library.path [/Users/***/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.] に存在しません。 [日 3月 20 17:58:26 JST 2022] 情報: プロトコルハンドラ ["http-nio-8080"] を初期化します。 [日 3月 20 17:58:26 JST 2022] 情報: サーバーの初期化 [1029]ms [日 3月 20 17:58:26 JST 2022] 情報: サービス [Catalina] を起動します [日 3月 20 17:58:26 JST 2022] 情報: サーブレットエンジンの起動:[Apache Tomcat/9.0.56] [日 3月 20 17:58:26 JST 2022] 情報: プロトコルハンドラー ["http-nio-8080"] を開始しました。 [日 3月 20 17:58:27 JST 2022] 情報: サーバーの起動 [645]ms [日 3月 20 17:58:27 JST 2022]

試したこと

  • ビルド・パスでクラスパスに外部JARを追加

  • ここが問題なのだろうとは思うのですが、解決に至っていません。

情報: 商用環境に最適な性能を発揮する APR ベースの Tomcat ネイティブライブラリが java.library.path [/Users/***/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.] に存在しません。 [日 3月 20 17:58:26 JST 2022]

その他

そもそもパスの部分の理解が乏しく、 java.library.path をどうすればいいのか理解できていません。
どなたかご助言いただけますと嬉しいです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問