doPostの405エラーを解消したい

実現したいこと

・doPostのエラーを解消したい

前提

ログイン機能を作成する学習をしています。 
コメントで問が記載されている部分について回答していく課題になります。
HTTP405エラーの解消法を知りたいです。

発生している問題・エラーメッセージ

doGetを使用すると405エラーが出ないのですが、doPostを使用するとエラーになってしまいます。また、doGetを使用した際、エラーは発生しませんが、htmlを表示したいのにもかかわらず、jspが表示されてしまいます。

タイプ ステータスレポート メッセージ HTTPのGETメソッドは、このURLではサポートされていません。 説明 リクエストラインで受信されたメソッドは、オリジンサーバーによって認識されますが、ターゲットリソースによってサポートされていません。

該当のソースコード

EmployeeController.java

java

1package controller;2 3 4 * 社員情報管理コントローラー 5 6 7import java.io.IOException;8 9import javax.servlet.RequestDispatcher;10import javax.servlet.ServletContext;11import javax.servlet.ServletException;12import javax.servlet.http.HttpServlet;13import javax.servlet.http.HttpServletRequest;14import javax.servlet.http.HttpServletResponse;15 16import bean.EmployeeBean;17import service.EmployeeService;18 19public class EmployeeController extends HttpServlet {20 public void doPost(HttpServletRequest request, HttpServletResponse response)21 throws ServletException, IOException {22 23 try {24 // 問① index.htmlから送信されたIDとPassWordの値を取得できるように修正しましょう。25 String id = request.getParameter("id");26 String password = request.getParameter("pass");27 28 /* 29 * IDとPassWordと元に、社員情報を検索する関数の呼び出し、結果をJSPに渡す処理 30 * ※ EmployeeBeanとEmployeeServiceをimportするのを忘れないでください。 31 */32 33 // 問② EmployeeServiceクラスをインスタンス化する。34 35 EmployeeService empserv = new EmployeeService();36 37 // 問③ EmployeeBeanに、EmployeeServiceよりsearch関数を呼び出し、返り値を格納する。38 39 //empserv.search(id, password);40 EmployeeBean data = empserv.search(id,password);41 42 // 問④ nullの部分に適切な引数をセットする。43 request.setAttribute("EmployeeBean", data);44 45 } catch (Exception e) {46 e.printStackTrace();47 } finally {48 ServletContext context = this.getServletContext();49 RequestDispatcher dispatcher = context.getRequestDispatcher("/WEB-INF/index.jsp");50 dispatcher.forward(request, response);51 }52 }53}

EmployeeBean.java

java

1package bean;2 3 5 6public class EmployeeBean {7 private String Id;8 private String PassWord;9 private String Name;10 private String Comment;11 private String Login_Time;12 13 14 public void setId(String Id) {15 this.Id = Id;16 }17 public String Id() {18 return Id;19 }20 public void setPassWord(String PassWord) {21 this.PassWord = PassWord;22 }23 public String getPassWord() {24 return PassWord;25 }26 public void setName(String Name) {27 this.Name = Name;28 }29 public String getName() {30 return Name;31 }32 public void setLogin_Time(String Login_Time) {33 this.Login_Time = Login_Time;34 }35 public String getLogin_Time() {36 return Login_Time;37 }38 public void setComment(String Comment) {39 this.Comment = Comment;40 }41 public String getComment() {42 return Comment;43 }44 45 }

EmployeeService.java

java

1package service;2 3import java.sql.Connection;4import java.sql.DriverManager;5import java.sql.PreparedStatement;6import java.sql.ResultSet;7import java.sql.SQLException;8import java.sql.Statement;9import java.text.SimpleDateFormat;10import java.util.Calendar;11 12import bean.EmployeeBean;13 14 15 * ・社員情報検索サービス 16 17 18public class EmployeeService {19 20 // 問① 接続情報を記述してください21 22 private static final String POSTGRES_DRIVER = "org.postgresql.Driver";23 24 private static final String JDBC_CONNECTION = "jdbc:postgresql://localhost:5432/Employee";25 26 private static final String USER = "postgres";27 28 private static final String PASS = "postgres";29 30 private static final String TIME_FORMAT = "yyyy/MM/dd HH:mm:ss";31 32 // 問② 入力された値で、UPDATEする文33 34 private static final String SQL_UPDATE = "UPDATE Employee_table SET login_time = ? "35 + "= to_char(current_timestamp, TIME_FORMAT) WHERE id = ?";36 37 // 問③ 入力されたIDとPassWordをキーにして、検索するSELECT文38 39 private static final String SQL_SELECT = "SELECT name, comment, login_time FROM Employee_table"40 + "WHERE id = ? AND password = ?";41 42 EmployeeBean employeeDate = null;43 44 // 送信されたIDとPassWordを元に社員情報を検索するためのメソッド45 public EmployeeBean search(String id, String password) {46 47 Connection connection = null;48 Statement statement = null;49 ResultSet resultSet = null;50 PreparedStatement preparedStatement = null;51 52 try {53 // データベースに接続54 Class.forName(POSTGRES_DRIVER);55 connection = DriverManager.getConnection(JDBC_CONNECTION, USER, PASS);56 statement = connection.createStatement();57 58 // 処理が流れた時間をフォーマットに合わせて生成59 Calendar cal = Calendar.getInstance();60 SimpleDateFormat sdFormat = new SimpleDateFormat(TIME_FORMAT);61 62 // PreparedStatementで使用するため、String型に変換63 String login_time = sdFormat.format(cal.getTime());64 65 /* 66 * 任意のユーザーのログインタイムを更新できるように、プリペアドステートメントを記述。 67 */68 69 // preparedStatementに実行したいSQLを格納70 preparedStatement = connection.prepareStatement(SQL_UPDATE);71 // 問④ preparedStatementを使って、一番目のindexに今の時間をセットしてください。2番目のindexにIDをセットしてください。72 preparedStatement.setString(1,id);73 preparedStatement.setString(2,password);74 75 // 問⑤ UPDATEを実行する文を記述76 preparedStatement.executeUpdate(SQL_UPDATE);77 78 /* 79 * UPDATEが成功したものを即座に表示 80 * 任意のユーザーを検索できるように、プリペアドステートメントを記述。 81 */82 preparedStatement = connection.prepareStatement(SQL_SELECT);83 //問⑥ 一番目のindexにIDをセットしてください。2番目のindexにPASSWORDをセット。84 preparedStatement.setString(1,id);85 preparedStatement.setString(2,password);86 87 // SQLを実行。実行した結果をresultSetに格納。88 resultSet = preparedStatement.executeQuery();89 90 while (resultSet.next()) {91 // 問⑦ tmpName,tmpComment,tmpLoginTimeに適当な値を入れてください。92 String tmpName = resultSet.getString("name");93 String tmpComment = resultSet.getString("comment");94 String tmpLoginTime = resultSet.getString("login_time");95 96 // 問⑧ EmployeeBeanに取得したデータを入れてください。97 employeeDate = new EmployeeBean();98 employeeDate.setName(tmpName);99 employeeDate.setComment(tmpComment);100 employeeDate.setLogin_Time(tmpLoginTime);101 }102 103 // forName()で例外発生104 } catch (ClassNotFoundException e) {105 e.printStackTrace();106 107 // getConnection()、createStatement()、executeQuery()で例外発生108 } catch (SQLException e) {109 e.printStackTrace();110 111 } finally {112 try {113 114 if (resultSet != null) {115 resultSet.close();116 }117 if (statement != null) {118 statement.close();119 }120 if (connection != null) {121 connection.close();122 }123 124 } catch (SQLException e) {125 e.printStackTrace();126 }127 }128 return employeeDate;129 }130}

index.jsp

jsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<%@ page import="bean.EmployeeBean"%> 4 5<% 6 // 問① getAttributeに適切な引数をセットして、EmployeeControllerから渡されたBeanを取得する。 7 //EmployeeBean employeeBean = (EmployeeBean) request.getAttribute("bean.ExployeeBean"); 8 EmployeeBean employeeBean = (EmployeeBean) request.getAttribute("controller.data"); 9%> 10 11<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 12<html> 13<head> 14<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 15<title>検索結果</title> 16</head> 17<body> 18 <div align="center"> 19 <!-- 検索が成功した場合の表示 --> 20 <% 21 if (employeeBean != null) { 22 %> 23 <table border="1"> 24 <tr> 25 <th>社員名</th> 26 <td><%=employeeBean.getName()%></td> 27 </tr> 28 <tr> 29 <th>コメント</th> 30 <td><%=employeeBean.getComment()%></td> 31 </tr> 32 <tr> 33 <th>ログインタイム</th> 34 <td><%=employeeBean.getLogin_Time()%></td> 35 </tr> 36 </table> 37 38 <!-- 問② それ以外の表示(エラーの場合)--> 39 <% } else { %> 40 41 <div>IDまたはパスワードが間違ってます</div> 42 43 <% } %> 44 45 </div> 46</body> 47</html>

index.html

html

1<!DOCTYPE html>2 3<html>4<head>5<meta charset="UTF-8">6<title>社員情報システム</title>7<link rel="stylesheet" type="text/css" href="./css/index.css">8</head>9<body>10 11 <form action="/8-1/search" method="post">12 <div class="wrapper">13 <div class="header">社員情報システム</div>14 <ul>15 <!-- ID入力欄 -->16 <li class="id">17 <label for="id">ID</label>18 <input type="text" name="id" value="" size="20">19 </li>20 <!-- パスワードを入力する欄を作成してください -->21 <li class="pass">22 <label for="password">PASS</label>23 <input type="text" name="password" value="" size="20">24 25 <!-- 検索ボタン -->26 <li>27 <input id="button" type="submit" name="button" value="検索">28 </li>29 </ul>30 <div class="footer">hoge.inc</div>31 </div>32 </form> 33 34</body>35</html>

index.css

css

1@charset "UTF-8";2 3.wrapper{4 margin: 0 auto;5 width: 400px;6}7.header{8 float: auto;9 margin-top: 10px;10 width: 400pX;11 text-align: left;12 /* 問① 背景を青色にする */13 background-color: blue;14 /* 問② 文字の色を白にする */15 color: #ffffff;16 /* 問③ 背景に対して文字を縦方向に中央揃え */17 margin: auto;18 19}20 21ul li {22 margin-top: 10px;23 list-style: none;24}25 26label {27 width: 100px;28 float: left;29}30 31ul {32 width: 400px;33 margin: 0 auto;34}35input#button {36 display: block;37 margin: 0 auto;38}39ul li.pass {40 margin-bottom: 15px;41}42 43.footer{44 float: auto;45 margin-top: 10px;46 width: 400pX;47 text-align: left;48 /* 問④ 背景を青色にする */49 background-color: blue;50 /* 問⑤ 文字の色を白にする */51 color: #ffffff;52 /* 問⑥ 背景に対して文字を縦方向に中央揃え */53 margin: auto;54}

web.xml

xml

1<?xml version="1.0" encoding="UTF-8"?>2<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0"> 3 <display-name>8-1</display-name>4 <servlet>5 <servlet-name>search</servlet-name>6 <servlet-class>controller.EmployeeController</servlet-class>7 </servlet>8 9 <welcome-file-list>10 <welcome-file>index.html</welcome-file>11 </welcome-file-list>12 13 <servlet-mapping>14 <servlet-name>search</servlet-name>15 <url-pattern>/search</url-pattern>16 </servlet-mapping> 17 18</web-app>

試したこと

・doGetに記載を変更して確認
・doPostの書き方の確認

補足情報(FW/ツールのバージョンなど)

Eclipse(4.24.0)

javaやhtmlなどわからないことが多いため、この疑問点以外にもお気づきの点がございましたら、教えていただければ幸いです。よろしくお願いいたします。

コメントを投稿

0 コメント