前提・実現したいこと
現在、HTMLファイルの”確認”ボタンを押すと、DBに保存されたデータが一覧表示されるという、Javaの簡単な動的Webアプリケーションの作成をしています。
例外が起こっているのは、list.jsp という、レスポンスとしてテーブルのデータが一覧表示される画面のファイルです。
後半部分から赤の波線がついてしまい、構文エラー(「処理が閉じられていません」が発生してしまっているのですが、1字1句見返しても原因が見つからず、困っている状況です。
)
どなたかご教授いただけると幸いです。
宜しくお願いいたします。
発生している問題・エラーメッセージ
処理命令が閉じられていません
該当のソースコード
#####input.html(確認ボタンを押すページ)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h1>ユーザー確認</h1> <p>登録されているユーザーの一覧を表示します</p> <form action="InputServlet"> <input type="submit" value="表示"> </form> </body> </html>
#####InputServlet.java(サーブレットファイル)
package mvc; import java.io.IOException; import java.util.ArrayList; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/InputServlet") public class InputServlet extends HttpServlet { protected void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //モデルにユーザ情報の取得を指示 HumanManager humanmanager = new HumanManager(); ArrayList<Human> list = humanmanager.get(); //ビューに取得した値をセット。 request.setAttribute("list", list); RequestDispatcher rd = request.getRequestDispatcher("list.jsp"); rd.forward(request, response); } }
#####Human.java(name, ageの情報を保持しておくクラス)
package mvc; ; public class Human { private String name; private int age; public Human(String name, int age) { this.name = name; this.age = age; } public void setName(String name) { this.name = name; } public String getName() { return name; } public void setAge(int age) { this.age = age; } public int getAge() { return age; } }
#####HumanManager.java(DBとの接続を行うDAOクラス)
package mvc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; public class HumanManager { private Connection con = null; private PreparedStatement ps = null; private ResultSet rs = null; //*ユーザー情報取得機能↓↓ public ArrayList<Human> get(){ ArrayList<Human> list = new ArrayList<Human>(); //リストの定義 try { //①JDBCドライバへの接続 Class.forName("com.mysql.cj.jdbc.Driver"); //②dbへの接続 String url = "jdbc:mysql://localhost/user"; String user = "root"; String password = "ma12yu26"; con = DriverManager.getConnection(url, user, password); //③ステートメントオブジェクトの取得 String sql = "SELECT * FROM user_list"; ps = con.prepareStatement(sql); //④SQLの実行 rs = ps.executeQuery(); //Queryは問い合わせの意。 //⑤結果の取得 while(rs.next()) { String name = rs.getString("name"); int age = rs.getInt("age"); Human human = new Human(name, age); list.add(human); } } catch(ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { //⑥dbとの接続を終了 try { if (con != null) { con.close(); } if (ps != null) { ps.close(); } if (rs != null) { rs.close(); } } catch(Exception e) { e.printStackTrace(); } } return list; } }
#####list.jsp(エラー有。レスポンスとして、DBのデータ一覧を表示するページ)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.ArrayList" %> <%@ page import="mvc.Human" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <p>現在のメンバー</p> <% ArrayList<Human> list = (ArrayList<Human>)request.getAttribute("list"); for (int i= 0; i < list.size(); i++) { Human human = list.get(i); %> <p><%= (i + 1) %>人目</p> //***この行の</p>から以下すべてに赤の波線「処理命令が閉じられていません」のエラーが出ています。*** <p>氏名:<%= human.getName() %></p> <p>年齢:<%= human.getAge() %></p> <% } %> </body> </html>
試したこと
・誤字の確認
・閉じタグがあるか確認
・ファイルをセーブし、最新の状態であることを確認
補足情報(FW/ツールのバージョンなど)
・開発環境は、Eclipseを用いています。
・DBは、MySQLを用いています。