IpCheckのサーブレットファイルを実行し、ipEntryでパソコンの管理番号を入力し、データベースにアクセスして、ipアドレスを引き出して、ipResultで出力するだけのプログラムを作ろうとしています。
ipEntryにpcのidを打ち込んでも、フォームに入力した値は特に関係なく、パソコン名やIPアドレスの一覧が表示されるだけです。
どうすれば、データベースからフォームに入力した値をもとに、データベースからipアドレスを引っ張り出して表示することができるでしょうか
画面遷移、およびデータ全部のリストは、jspのビューまでしっかり渡せられています。
ipResult.jsp
jsp
1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<%@ page import="model.IP,java.util.List" %> 4<% List<IP> ipList = (List<IP>)request.getAttribute("ipList"); %> 5<!DOCTYPE html> 6<html> 7<head> 8<meta charset="UTF-8"> 9<title>ip結果</title> 10</head> 11<body> 12<h1>ip結果</h1> 13<% for(IP ips : ipList){%> 14 <P> 15 パソコンID:<%= ips.getPcID() %><br> 16 パソコンの名前:<%= ips.getIpAddress() %><br> 17 IPアドレス:<%= ips.getPcName() %> 18 </P> 19<% } %> 20<a href="/ipchecker/ipEntry">戻る</a> 21</body> 22</html>
ipEntry.jsp
jsp
1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<!DOCTYPE html> 4<html> 5<head> 6<meta charset="UTF-8"> 7<title>IP調査</title> 8</head> 9<body> 10 <h1>IP調査</h1> 11 <form action="/ipChecker/IpCheck" method="post"> 12 PCのID: <input type="text" name="pcID"> 13 <br> 14 <input type="submit" value="送信"> 15 </form> 16</body> 17</html>
ipCheck.java
java
1package servlet; 2 3import java.io.IOException; 4import java.util.List; 5 6import javax.servlet.RequestDispatcher; 7import javax.servlet.ServletException; 8import javax.servlet.annotation.WebServlet; 9import javax.servlet.http.HttpServlet; 10import javax.servlet.http.HttpServletRequest; 11import javax.servlet.http.HttpServletResponse; 12 13import model.IP; 14import model.IpSelect; 15 16 17@WebServlet("/IpCheck") 18public class IpCheck extends HttpServlet { 19 private static final long serialVersionUID = 1L; 20 21 22 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 23 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/ipEntry.jsp"); 24 dispatcher.forward(request, response); 25 } 26 27 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ 28 29 30 // モデルの実行 31 IpSelect ipSelect = new IpSelect(); 32 List<IP> ipList = ipSelect.execute(); 33 34 // 結果の保存 35 request.setAttribute("ipList", ipList); 36 37 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/ipResult.jsp"); 38 dispatcher.forward(request, response); 39 } 40} 41
IP.java
java
1package model; 2 3import java.io.Serializable; 4 5public class IP implements Serializable{ 6 private String pcID; 7 private String pcName; 8 private String ipAddress; 9 10 11 public IP(String pcID, String ipAddress, String pcName) { 12 this.pcID=pcID; 13 this.pcName=pcName; 14 this.ipAddress=ipAddress; 15 } 16 17 public String getPcName() { 18 return pcName; 19 } 20 21 public void setPcName(String pcName) { 22 this.pcName = pcName; 23 } 24 25 public IP (String pcID,String ipAddress) { 26 this.pcID = pcID; 27 this.ipAddress=ipAddress; 28 } 29 30 public String getIpAddress() { 31 return ipAddress; 32 } 33 public void setIpAddress(String ipAddress) { 34 this.ipAddress = ipAddress; 35 } 36 public String getPcID() { 37 return pcID; 38 } 39 public void setPcID(String pcID) { 40 this.pcID = pcID; 41 } 42 43} 44
IpSelect.java
java
1package model; 2 3import java.util.List; 4 5import dao.IpDAO; 6 7public class IpSelect { 8 9 public List<IP> execute(){ 10 IpDAO dao = new IpDAO(); 11 List<IP> ipList = dao.findAll(); 12 return ipList; 13 } 14} 15
IpDAO.java
java
1package dao; 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.PreparedStatement; 6import java.sql.ResultSet; 7import java.sql.SQLException; 8import java.util.ArrayList; 9import java.util.List; 10 11import model.IP; 12 13 14 15public class IpDAO{ 16 17 private final String JDBC_URL = "jdbc:mysql://localhost:3306/pcm?serverTimezone=JST"; 18 private final String DB_USER = "root"; 19 private final String DB_PASS = "y21password"; 20 21 public List<IP> findAll() { 22 List<IP> ipList = new ArrayList<>(); 23 24 try (Connection conn = DriverManager.getConnection(JDBC_URL, DB_USER, DB_PASS)){ 25 26 String sql 27 = "SELECT mng_pc.pc_id, pc_name, ip_address\r\n" + 28 "FROM pcm.mng_pc\r\n" + 29 "JOIN pcm.ip_address\r\n" + 30 "on mng_pc.pc_id=ip_address.pc_id" where pc_id=; 31 32 PreparedStatement pStmt = conn.prepareStatement(sql); 33 ResultSet rs = pStmt.executeQuery(); 34 35 while (rs.next()) { 36 String id = rs.getString("pc_id"); 37 String name = rs.getString("pc_name"); 38 String ip = rs.getString("ip_address"); 39 IP ipbeans = new IP(id, name, ip); 40 ipList.add(ipbeans); 41 } 42 } catch (SQLException e) { 43 e.printStackTrace(); 44 return null; 45 } 46 return ipList; 47 } 48} 49
Microsoft Windows [Version 10.0.17763.737]
Widnows10 Pro version 1809
mysql Ver 8.0.17 for Win64 on x86_64 (MySQL Community Server - GPL)
mysql-connector-java-8.0.17.jar
java version "1.8.0_221"
Eclipse
Version: 2019-09 R (4.13.0)
Build id: 20190917-1200
C:\Program Files (x86)\Java\jre1.8.0_221
C:\Program Files (x86)\Java\jdk1.5.0
ipDAOの、sql分の最後にwhere句を足さないといけないことはわかるのですが、どうやって書いてもエラーになります。
ご指摘いただけると幸いです。
2019/11/14 以下追記
IpDAOにて、
Java
1PreparedStatement pStmt = conn.prepareStatement(sql); 2pStmt.setString(1, 画面で入力した値); 3ResultSet rs = pStmt.executeQuery();
の用に書き換え、
IpCheckにて、
Java
1protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ 2 3request.setCharacterEncoding("UTF-8"); 4String name = request.getParameter("pcID"); 5 6// モデルの実行 7IpSelect ipSelect = new IpSelect(); 8List<IP> ipList = ipSelect.execute();
の用に書き換えました。
そのあとに、サーブレットを起動した結果、画面上で送信ボタンを押した後に、
HTTPステータス 500 – Internal Server Error
タイプ 例外報告
メッセージ サーブレットの実行により例外を投げました
説明 サーバーは予期しない条件に遭遇しました。それはリクエストの実行を妨げます。
例外
javax.servlet.ServletException: サーブレットの実行により例外を投げました
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
根本原因
java.lang.Error: Unresolved compilation problem:
画面で入力した値 を変数に解決できません
dao.IpDAO.findAll(IpDAO.java:33)
model.IpSelect.execute(IpSelect.java:11)
servlet.IpCheck.doPost(IpCheck.java:34)
javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
注意 原因のすべてのスタックトレースは、サーバのログに記録されています
と表示されました。
コンソールで確認したところ、
重大: パス[/ipChecker3]を持つコンテキスト内のサーブレット[servlet.IpCheck]のServlet.service() が例外[サーブレットの実行により例外を投げました]が根本的要因と共に投げられました。
java.lang.Error: Unresolved compilation problem:
画面で入力した値 を変数に解決できません
とメッセージが出ました。
回答2件
あなたの回答
tips
プレビュー