こんにちは、最近servletやDAOクラスの勉強を行っているのですが
以下のようなエラーがでました。
解決案をご教授いただけないでしょうか。
<試したこと>
・SQLよりデータを取得できているか。別クラスを作成し、コンソール出力はできました。
・tomcatのバージョンを変えてみましたが改善されませんでした。
・サーブレットの以下内容をコメントアウトするとエラーはでません。
t_productDAO t_productBean = new t_productDAO();
List<t_productBean>productList = t_productBean.findAll();
request.setAttribute("productList", productList);
以上です。
エラー内容及びservlet、daoクラスのソースを記載しておきます。
よろしくお願いいたします。
エラー内容
HTTPステータス 500 - Internal Server Error Type Exception Report メッセージ サーブレットの実行により例外を投げました 説明 The server encountered an unexpected condition that prevented it from fulfilling the request. 例外 javax.servlet.ServletException: サーブレットの実行により例外を投げました org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 原因 java.lang.NoClassDefFoundError: java/sql/Driver java.base/java.lang.ClassLoader.findBootstrapClass(Native Method) java.base/java.lang.ClassLoader.findBootstrapClassOrNull(ClassLoader.java:1250) java.base/java.lang.System$2.findBootstrapClassOrNull(System.java:2134) java.base/jdk.internal.loader.ClassLoaders$BootClassLoader.loadClassOrNull(ClassLoaders.java:130) java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:617) java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:580) java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499) org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1228) org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1138) java.base/java.lang.Class.forName0(Native Method) java.base/java.lang.Class.forName(Class.java:291) dao.t_productDAO.findAll(t_productDAO.java:27) servlet.ProductList.doGet(ProductList.java:32) javax.servlet.http.HttpServlet.service(HttpServlet.java:634) javax.servlet.http.HttpServlet.service(HttpServlet.java:741) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 注意 原因のすべてのスタックトレースは、のログに記録されています Apache Tomcat/9.0.10
servlet
package servlet; import java.io.IOException; import java.util.List; 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; import dao.t_productDAO; import model.t_productBean; /** * Servlet implementation class ProductList */ @WebServlet("/ProductList") public class ProductList extends HttpServlet { private static final long serialVersionUID = 1L; public ProductList() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8"); t_productDAO t_productBean = new t_productDAO(); List<t_productBean>productList = t_productBean.findAll(); request.setAttribute("productList", productList); RequestDispatcher rd = request.getRequestDispatcher("/ProductList.jsp" ); rd.forward(request,response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
DAO
package dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import model.t_productBean; public class t_productDAO { //ここからメンバ変数定義 private final String driver = "com.mysql.jdbc.Driver"; private final String url = "jdbc:mysql://localhost/wbr_inventory_control?characterEncoding=UTF-8&serverTimezone=JST"; private final String user = "testuser"; private final String password = "pass"; public List<t_productBean> findAll() { Connection conn = null; List<t_productBean>productList = new ArrayList<t_productBean>();//リスト名(リスト作成 try { //JDBCドライバを読み込み Class.forName(driver); //データベースへの接続 conn = DriverManager.getConnection(url,user,password); //SELECT文を準備 String sql = "SELECT * FROM t_product"; PreparedStatement pstmt = conn.prepareStatement(sql); //SElECT文を実行し、結果を取得 ResultSet rs = pstmt.executeQuery(); while(rs.next()) { //select文の結果をArrayListに格納 int product_id = rs.getInt("product_id"); String product_genre_code = rs.getString("product_genre_code"); String product_name = rs.getString("product_name"); String product_maker = rs.getString("product_maker"); int product_price = rs.getInt("product_price"); int product_stock = rs.getInt("product_stock"); int product_sales = rs.getInt("product_sales"); String product_remarks = rs.getString("product_remarks"); t_productBean T_product = new t_productBean(product_id,product_genre_code,product_name ,product_maker,product_price,product_stock,product_sales,product_remarks); productList.add(T_product); } }catch(SQLException e) { //例外SQL例外あり e.printStackTrace(); return null; } catch (ClassNotFoundException e) { //ノットファウンドあり e.printStackTrace(); return null; }finally { //catchがなくても必ず実行 //データベース切断 if(conn != null) { try { conn.close(); }catch(SQLException e) { e.printStackTrace(); return null; } } } return productList; } }
何卒よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー