質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

0回答

755閲覧

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

_msy_0319

総合スコア0

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2023/05/06 08:26

実現したいこと

・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/** 4 * ・社員情報データ(モデル) 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 /** ・JDBC接続先情報 */ 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 /** ・SQL UPDATE文 */ 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 /** ・SQL SELECT文 */ 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などわからないことが多いため、この疑問点以外にもお気づきの点がございましたら、教えていただければ幸いです。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2023/05/06 20:03

フォームのあるページが.htmlなのはどういう理由でしょうか。 .jspとしてJavaの機能(特にURL生成部分)を利用した方が良いとは思うのですが・・。 ただ、何かの課題のようなので、そこは赤の他人ではなく、本来の聞くべき対象や確認すべき資料があるようにも思います。
_msy_0319

2023/05/07 03:36

そうなのですね。調べてみます。 休日に少し進めたかったため、質問してみてしまいました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問