発生している問題・エラーメッセージ
現在Javaで簡易な蔵書管理システムを作成しています。
DB(MySQL)に格納してある蔵書情報を検索する機能を実装したいのですが、検索ボタンを押下すると下記のようなエラーが表示される状態になっております。
ソースに問題があるのか、あるいは別の問題があるのかご教示いただけますと幸いです。
HTTP Status 405 – Method Not Allowed Type Status Report Message HTTPのPOSTメソッドは、このURLではサポートされていません。 Description The method received in the request-line is known by the origin server but not supported by the target resource. Apache Tomcat/9.0.33
該当のソースコード
search.jsp(検索画面)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h1>蔵書検索</h1> <p>検索条件を入力してください</p> <p>フォームが未入力の場合、全ての蔵書が表示されます</p> <form action="/LibrarySystem/Register" method="POST"> <p>タイトル:<input type="text" name="title"></p> <p>著者:<input type="text" name="authors"></p> <p>出版社:<input type="text" name="publisher"></p> <p>出版年:<input type="text" name="publishyear"></p> <input type="submit" value="検索"> </form> <p><a href="home.jsp">↩ホームに戻る</a></p> </body> </html>
RegisterServlet.java(search.jspから受け取った情報をもとにbooks_db内を検索し、searchResult.jspに結果を渡す)
package com.librarysystem; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class RegisterServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPOST(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ //DB関連の初期設定 Connection conn = null; PreparedStatement pstmt = null; ResultSet rset = null; //文字コードの設定 request.setCharacterEncoding("UTF-8"); //search.jspで入力した内容の取得 String title = request.getParameter("title"); String authors = request.getParameter("authors"); String publisher = request.getParameter("publisher"); String publishyear = request.getParameter("publishyear"); try { // JDBC Driver の登録 Class.forName("com.mysql.jdbc.Driver"); // Connectionの作成 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/books_db?serverTimezone=UTC&useSSL=false", "suser", "spass"); // sql文作成の準備 StringBuffer sql = new StringBuffer(); // sql文 の作成(nameから) sql.append("select title, authors, publisher, publishyear from books_table where title like '%"); sql.append(title + "%'"); // idが選択されている場合は、追加する if (authors != "") { sql.append("and authors ='" + authors + "'"); } // seiが選択されている場合は、追加する if (publisher != "") { sql.append("and publisher ='" + publisher + "'"); } // nenが選択されている場合は、追加する if (publishyear != "") { sql.append("and publishyear ='" + publishyear + "'"); } // sql文を表示 System.out.println(sql); // sql文実行準備 pstmt = conn.prepareStatement(new String(sql)); // sql文実行 pstmt.execute(); // 実行結果を、ResultSetクラスに代入 rset = pstmt.executeQuery(); // 遷移ページへ、引渡し(Attributeで追加する) request.setAttribute("kekka", rset); request.getRequestDispatcher("/searchResult.jsp").forward(request, response); // 使用したオブジェクトを終了させる rset.close(); pstmt.close(); conn.close(); } catch(Exception e) { e.printStackTrace(); String status ="検索に失敗しました。管理者に連絡してください。"; request.setAttribute("status", status); request.getRequestDispatcher("/Error.jsp").forward(request, response); } finally { try { conn.close(); } catch(Exception e) { } } } }
searchResult.jsp(検索結果表示画面)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@page import="java.sql.*"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <br> <% ResultSet rset = (ResultSet) request.getAttribute("kekka"); %> <table border="1"> <tr bgcolor="#cccccc"> <td><b>タイトル</b></td> <td><b>著者</b></td> <td><b>出版社</b></td> <td><b>出版年</b></td> </tr> <% while (rset.next()) { %> <tr> <td><%=rset.getString(1)%></td> <td><%=rset.getString(2)%></td> <td><%=rset.getString(3)%></td> <td><%=rset.getString(4)%></td> </tr> <% } %> </table> </body> </html>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/15 02:16