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

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

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

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

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

servlet

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

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

2回答

1258閲覧

JSPからformを使ってサーブレットにPOSTリクエストすると404ページが表示される

gushigushi

総合スコア6

JSP

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

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

servlet

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

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

1グッド

1クリップ

投稿2018/03/11 14:26

編集2018/03/13 15:18

JSPからサーブレットのページに遷移したい。

【前提】
スッキリわかるサーブレット&JSP入門5.3フォームを使ったプログラム作成
サンプルプログラムを実行しているのですが、プログラムが上手く動作しません。

テキスト付録の、エラー解決のページに書いてある以下についても確認しましたが、特に問題はありませんでした。
・ファイル名(大文字・小文字の区別、スペルミス)
・ファイルの配置ディレクトリ
・URLパターン

このサンプルが動作しないと続きを読み進められないので何とか解決したいです。よろしくお願いいたします。

【eclipseの画面】

イメージ説明

【エラーの画面】

formSample.jspからFormSampleServlet.javaPOSTリクエストする時に、以下のエラーメッセージが発生しました。

formSample.jsp
イメージ説明

FormSampleServlet.java
イメージ説明

【ソースコード】

Java

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<!DOCTYPE html> 4<html> 5<head> 6<meta charset="UTF-8"> 7<title>ユーザー登録もどき</title> 8</head> 9<body> 10<form action="/example/FormSampleServlet" method="post"> 11名前:<br> 12<input type="text" name="name"><br> 13性別:<br> 14<input type="radio" name="gender" value="0"> 15<input type="radio" name="gender" value="1"> 16<input type="submit" value="登録"> 17</form> 18</body> 19</html>

Java

1package servlet; 2 3import java.io.IOException; 4import java.io.PrintWriter; 5 6import javax.servlet.ServletException; 7import javax.servlet.annotation.WebServlet; 8import javax.servlet.http.HttpServlet; 9import javax.servlet.http.HttpServletRequest; 10import javax.servlet.http.HttpServletResponse; 11 12/** 13 * Servlet implementation class FormSampleServlet 14 */ 15@WebServlet("/FormSampleServlet") 16public class FormSampleServlet extends HttpServlet { 17 private static final long serialVersionUID = 1L; 18 19 /** 20 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 21 */ 22 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 23 24 //リクエストパラメータを取得 25 request.setCharacterEncoding("UTF-8"); 26 String name = request.getParameter("name"); 27 String gender = request.getParameter("gender"); 28 29 //リクエストパラメータをチェック 30 String errorMsg = ""; 31 if(name == null || name.length() == 0) { 32 errorMsg += "名前が入力されていません<br>"; 33 } 34 if(gender == null || gender.length() == 0) { 35 errorMsg += "性別が選択されていません<br>"; 36 } else { 37 if(gender.equals("0")) { 38 gender = "男性"; 39 } else if(gender.equals("1")) { 40 gender = "女性"; 41 } 42 } 43 44 //表示するメッセージ 45 String msg = name + "さん("+gender+")を登録しましちゃ"; 46 if(errorMsg.length() != 0) { 47 msg = errorMsg; 48 } 49 50 //HTMLを出力 51 response.setContentType("text/html; charset=UTF-8"); 52 PrintWriter out = response.getWriter(); 53 out.println("<!DOCTYPE html>"); 54 out.println("<html>"); 55 out.println("<head>"); 56 out.println("<meta charset=\"UTF-8\">"); 57 out.println("<title>ユーザー登録結果</title>"); 58 out.println("</head>"); 59 out.println("<body>"); 60 out.println("<p>"+msg+"</p>"); 61 out.println("</body>"); 62 out.println("</html>"); 63 64 } 65 66}

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

Tomcatのバージョンは7.0です。

yukapome789👍を押しています

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

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

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

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

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

yukapome789

2018/03/11 16:15 編集

404エラーが表示されているスクショなんですが、本当にjspのボタン押した後に表示された画面ですか?デバッグしてる時にサーブレットを直接たたいた時のURLとかじゃないですよね?(それならdoGet()未実装のため404返ってくるのは当たり前なので)。actionで指定しているパスが怪しいなと思って聞いています。
退会済みユーザー

退会済みユーザー

2018/03/11 22:17

@rarara doGet 未実装は たしか405エラーにならないかそれ
yukapome789

2018/03/12 04:57

@asahina1979 確かにです。ご指摘ありがとうございます。「HTTPのGETメソッドは、このURLではサポートされていません」的なこと表示されるかも。個人的に、htmlのformのactionが「/example/HogeServlet」じゃなくて「./HogeServlet」にしないと、叩かれるのが「/example/example/HogeServlet」になる気がしております
gushigushi

2018/03/13 14:16

大変申し訳ございません。原因は分かりませんが、何も修正せずにeclipseを再起動し本日もう一度POSTリクエストしてみたところ、問題なくJSPからサーブレットに遷移することができました。質問に回答してくださりありがとうございました。
guest

回答2

0

ベストアンサー

記載されているコードを実行したところ特に問題はありませんでした。

一度Tomcatの再起動をしても問題は変わりませんでしょうか。

投稿2018/03/12 01:13

A-pZ

総合スコア12011

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

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

gushigushi

2018/03/13 14:20 編集

本日回答いただいた通りにTomcatを再起動して実行してみようと思い、 eclipseを起動してPOSTリクエストしてみたところ、問題なくJSPからサーブレットに遷移することができました。 質問に回答してくださりありがとうございます。
guest

0

ご存知かと思いますが、404エラーというのはページが存在しない、というエラーです
POSTの宛先は本当に存在していますか?

投稿2018/03/11 22:58

y_waiwai

総合スコア87749

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

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

gushigushi

2018/03/13 14:24 編集

本日エラーを解決しようと思いeclipseを立ち上げて、 一度確認のためPOSTリクエストしてみたところ 問題なくサーブレットに遷移することができました。 ただ、なにもコードなどの修正はしていないため、 なにが原因だったのかはわかっていません。 遷移できたため、POSTの宛先は存在していました。 質問に回答してくださりありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問