前提・実現したいこと
サーブレットにて、DBへの問い合わせを行い、INSERTにて登録を行いたい。
発生している問題・エラーメッセージ
クラスパス指定でDBViewerに設定したものと同じjarを設定を行ったが、以下のエラー文が出てしまい、
DBへの登録が行われなかった。
HTTPステータス 500 – Internal Server Error タイプ 例外報告 メッセージ サーブレットの実行により例外を投げました 説明 サーバーは予期しない条件に遭遇しました。それはリクエストの実行を妨げます。 例外 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:1257) java.base/java.lang.System$2.findBootstrapClassOrNull(System.java:2129) java.base/jdk.internal.loader.ClassLoaders$BootClassLoader.loadClassOrNull(ClassLoaders.java:118) java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:616) java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579) java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1285) org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188) java.base/java.lang.Class.forName0(Native Method) java.base/java.lang.Class.forName(Class.java:315) main.CreateDoneServlet.doGet(CreateDoneServlet.java:74) 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) 注意 原因のすべてのスタックトレースは、サーバのログに記録されています
該当のソースコード
createConfirm.jsp
1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<%@ page import="java.util.*"%> 4 5<!DOCTYPE html> 6<html> 7<head> 8<meta charset="UTF-8"> 9<title>登録確認</title> 10<link rel="stylesheet" href="css/glossary.css"> 11</head> 12<body> 13 <div id="container"> 14 <!-- ヘッダーの読み込み --> 15 <jsp:include page="common/header.jsp" flush="true" /> 16 17 18 <main> 19 <h2>登録確認</h2> 20 <br> 21 <p>以下の内容で登録を行いますか?</p> 22 <hr /> 23 <form method="get" action="./CreateDoneServlet"> 24 <div class="name"> 25 <label id="h" for="name">見出し</label> 26 <label id="cOut"><%=request.getAttribute("name")%></label> 27 <input type="hidden" name="name" value="<%=request.getAttribute("name")%>"> 28 <br> 29 <br> 30 </div> 31 <div class="read"> 32 <label id="h" for="read">読み方</label> 33 <label id="cOut"><%=request.getAttribute("read")%></label> 34 <input type="hidden" name="read" value="<%=request.getAttribute("read")%>"> 35 <br> 36 <br> 37 </div> 38 <div class="category1"> 39 <label id="h" for="category1">分類1</label> 40 <label id="cOut"><%=request.getAttribute("category1")%></label> 41 <input type="hidden" name="category1" value="<%=request.getAttribute("category1")%>"> 42 <br> 43 <br> 44 </div> 45 <div class="category2"> 46 <label id="h" for="category2">分類2</label> 47 <label id="cOut"><%=request.getAttribute("category2")%></label> 48 <input type="hidden" name="category2" value="<%=request.getAttribute("category2")%>"> 49 <br> 50 <br> 51 </div> 52 <div class="explain"> 53 <label id="h" for="explain">説明</label> 54 <label id="cOut"><%=request.getAttribute("explain")%></label> 55 <input type="hidden" name="explain" value="<%=request.getAttribute("explain")%>"> 56 <br> 57 <br> 58 </div> 59 <div> 60 <input type="submit" class="button1" value="登録"><br> <br> 61 </div> 62 </form> 63 <button class="back" onclick="location.href='createInput.jsp'"><戻る</button> 64 <br> <br> 65 </main> 66 67 <!-- フッターの読み込み --> 68 <jsp:include page="common/footer.jsp" flush="true" /> 69 70 71 </div> 72</body> 73</html>
package main; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class CreateDoneServlet */ @WebServlet("/CreateDoneServlet") public class CreateDoneServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public CreateDoneServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.setContentType("text/html; charset=UTF-8"); request.setCharacterEncoding("UTF-8"); String cName = request.getParameter("name"); String cRead = request.getParameter("read"); String cCat_1 = request.getParameter("category1"); int cCat1 = 0; String cCat_2 = request.getParameter("category2"); int cCat2 = 0; String cEx = request.getParameter("explain"); request.setAttribute("name", cName); request.setAttribute("read", cRead); if (cCat_1.equals("全般")) { cCat1 = 1; } else if (cCat_1.equals("開発用語")) { cCat1 = 2; } else if (cCat_1.equals("運用用語")) { cCat1 = 3; } if (cCat_2.equals("設計")) { cCat2 = 2; } else if (cCat_2.equals("実装")) { cCat2 = 3; } else if (cCat_2.equals("試験")) { cCat2 = 4; } else if (cCat_2.equals("運用")) { cCat2 = 5; } else if (cCat_2.equals("保守")) { cCat2 = 6; } Connection con = null; PreparedStatement ps = null; try { Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection(__url, user, password__); String sql = "INSERT INTO glossary (name, `read`, category1_no, category2_no, `explain`) " + "VALUES (?,?,?,?,?);"; ps = con.prepareStatement(sql); ps.setString(1, cName); ps.setString(2, cRead); ps.setInt(3, cCat1); ps.setInt(4, cCat2); ps.setString(5, cEx); int num = ps.executeUpdate(); } catch (Exception e) { e.printStackTrace(); } finally { try { // 終了処理 if (ps != null) { ps.close(); } // 終了処理 if (con != null) { con.close(); } } catch (SQLException e) { e.getMessage(); } } getServletConfig().getServletContext().getRequestDispatcher("/createDone.jsp").forward(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
試したこと
クラスパスの指定を行う前は、DBへの登録はされていないが、HTTPステータスのエラー画面が表示されることなく、次に設定するcreateDone.jsp画面(登録完了画面)へ遷移した。
コンソールにて、「javax.servlet.ServletException」の表示がされていたため、対応策としてクラスパス指定を行った。
補足情報(FW/ツールのバージョンなど)
eclipse version 4.16.0.v20200604-0951
java version "14.0.1"
tomcat9
mysql
mysql-connector-java-8.0.21.jar
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/03 13:43