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

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

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

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

JSP

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

Java

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

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Tomcat

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

Q&A

解決済

1回答

8134閲覧

会員登録画面を作成したい

Martin

総合スコア4

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

JSP

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

Java

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

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Tomcat

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

0グッド

0クリップ

投稿2020/10/28 12:10

編集2020/10/29 10:14

)タイトルにもある通り会員登録画面の作成を現在行っているのですが、どうしてもうまくいきません。

まず、「会員登録用」用のフォームをJSPにより作成(フォームのキャプチャやコードは最後の方に載せます。)
次に、登録ボタンを押すと、入力した会員登録用の情報をJavaサーブレットのdoPostメソッドにより送信を行い、最終確認画面として入力した情報を表示を行う。

今のところここまで行っています。

具体的にどううまくいかないかと言いますと、「会員登録用」のフォームは問題なく表示されます。
しかし、登録ボタンを押した後にHTTPステータス404のエラーが出てしまいます。

実行環境はJava 6(Tomcat6)を使用しています。
*なぜかTomcat8.5と9は中々上手くいかず一番安定?しているTomcat6を使用しています*

以下にコードを載せますのでうまくいかない原因などをご指摘いただけたらと思います。
宜しくお願いいたします。

イメージ説明

JSP

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <html> 4 <head> 5 <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> 6 <title>新規登録</title> 7 <script type ="text/javascript"> 8 function exec(){ 9 document.getElementById("fm").submit(); 10 } 11 </script> 12 </head> 13 <body> 14 <div> 15 新規会員登録画面 16 <br><br> 17 「新規登録」<br><br> 18 <h1>登録内容</h1> 19 <form id="fm" action="<%=request.getContextPath()%>/TestP" method="post"> 20 <table border="0" cellspacing="0" cellpadding="0" bgcolor="#000000"> 21 <tr><td> 22 <table border="0" cellspacing="1" cellpadding="4"> 23 <tr> 24 <td align="center" bgcolor="#C0C0C0">名前</td> 25 <td align="left" bgcolor="#E6E1FF"> 26 <input type="text" name="name" size=40></td> 27 </tr> 28 <tr> 29 <td align="center" bgcolor="#C0C0C0">住所</td> 30 <td align="left" bgcolor="#FFFFFF"> 31 <input type="text" name="Adress" size=60></td> 32 </tr> 33 <tr> 34 <td align="center" bgcolor="#C0C0C0">電話番号</td> 35 <td align="left" bgcolor="#E6E1FF"> 36 <input type="text" name="callphone" size=70></td> 37 </tr> 38 <tr> 39 <td align="center" bgcolor="#C0C0C0">ハンドルネーム</td> 40 <td align="left" bgcolor="#FFFFFF"> 41 <input type="text" name="nickname" size=16 value=""> 42 <font size=2>(半角英数)</font> 43 </td> 44 </tr> 45 <tr> 46 <td align="center" bgcolor="#C0C0C0">パスワード</td> 47 <td align="left" bgcolor="#E6E1FF"> 48 <input type="password" name="password" size=16> 49 <font size=2>(半角英数)</font> 50 </td> 51 </tr> 52 </table> 53 </td></tr> 54 </table> 55 <br> 56 <input type="submit" value=" 登録 " onclick = "exec()"/> 57 </form> 58 </div> 59 </body> 60 </html>

Java

1package Controller; 2 3import java.io.IOException; 4 5import javax.servlet.ServletException; 6import javax.servlet.http.HttpServlet; 7import javax.servlet.http.HttpServletRequest; 8import javax.servlet.http.HttpServletResponse; 9 10 11 @WebServlet("/TestP") 12 public class TestP extends HttpServlet{ 13 private static final long serialVersionUID = 1L; 14 15 public TestP() { 16 super(); 17 } 18 19 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 20 21 request.setCharacterEncoding("UTF8"); 22 response.setContentType("text/html; charset=UTF8"); 23 response.getWriter().append("post1:").append(request.getParameter("name")); 24 response.getWriter().append("<BR/>"); 25 response.getWriter().append("post2").append(request.getParameter("Adress")); 26 response.getWriter().append("<BR/>"); 27 response.getWriter().append("post3").append(request.getParameter("callphone")); 28 response.getWriter().append("<BR/>"); 29 response.getWriter().append("post4").append(request.getParameter("nickname")); 30 response.getWriter().append("<BR/>"); 31 response.getWriter().append("post5").append(request.getParameter("password")); 32 33 34 } 35 36} 37

web.xmlの内容です。
*見にくかった場合は項目を教えていただけますでしょうか?*

イメージ説明

また、追加で同じJSPファイルを使い結果を出力するコードを作成しましたが、こちらもうまくいかず....
私の考えですと恐らくサーブレット側にうまく結果を反映させることが出来ていないのでは?と考えており、またfowardなどを使用することで、一度入力してもらった内容をサーブレットにdopostメソッドで送信し、またサーブレットから新しいJSPファイルで作成したフォームに反映させる?なども考えています。

JSP

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<% 4 5//入力された引数を取得する 6String title = request.getParameter("title"); 7String name = request.getParameter("name"); 8String Adress = request.getParameter("Adress"); 9String callphone = request.getParameter("callphone"); 10String nickname = request.getParameter("nickname"); 11 12title = new String(title.getBytes("8859_1"), "EUC_JSP"); 13name = new String(name.getBytes("8859_1"), "EUC_JSP"); 14Adress = new String(Adress.getBytes("8859_1"), "EUC_JSP"); 15callphone = new String(callphone.getBytes("8859_1"), "EUC_JSP"); 16%> 17<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 18<html> 19<head> 20<form id="fm" action="<%=request.getContextPath()%>/result.jsp" method="GET"> 21 22 <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> 23 <title>登録確認</title> 24</head> 25<body> 26<div> 27登録内容 28<br><br> 29[登録確認] <br> 次の内容で登録しました<br><br> 30<table border = "0" cellspacing = "0" cellpadding = "0" bgcolor = "#000000"> 31 <td><td> 32 <table border="0" cellspacing="1" cellpadding="4"> 33 <tr> 34 <td align="center" bgcolor="#C0C0C0">タイトル</td> 35 <td align="left" bgcolor="#E6E1FF"><%= title %></td> 36 </tr> 37 <tr> 38 <td align="center" bgcolor="#C0C0C0">名前</td> 39 <td align="left" bgcolor="#FFFFFF"><%= name %></td> 40 </tr> 41 <tr> 42 <td align="center" bgcolor="#C0C0C0">住所</td> 43 <td align="left" bgcolor="#E6E1FF"><%= Adress %></td> 44 </tr> 45 <tr> 46 <td align="center" bgcolor="#C0C0C0">電話番号</td> 47 <td align="left" bgcolor="#FFFFFF"><%= callphone %></td> 48 </tr> 49 <tr> 50 <td align="center" bgcolor="#C0C0C0">ハンドルネーム</td> 51 <td align="left" bgcolor="#FFFFFF"><%= nickname %></td> 52 </tr> 53 </table> 54 </td></tr> 55</table> 56<br> 57<a href = "list.jsp">戻る</a> 58</body> 59</html>

HTML

1 <html> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> 4 <title>新規登録</title> 5 <script type ="text/javascript"> 6 function exec(){ 7 document.getElementById("fm").submit(); 8 } 9 </script> 10 </head> 11 <body> 12 <div> 13 新規会員登録画面 14 <br><br> 15 「新規登録」<br><br> 16 <h1>登録内容</h1> 17 <form id="fm" action="/Project2/result.jsp" method="post"> 18 <table border="0" cellspacing="0" cellpadding="0" bgcolor="#000000"> 19 <tr><td> 20 <table border="0" cellspacing="1" cellpadding="4"> 21 <tr> 22 <td align="center" bgcolor="#C0C0C0">名前</td> 23 <td align="left" bgcolor="#E6E1FF"> 24 <input type="text" name="name" size=40></td> 25 </tr> 26 <tr> 27 <td align="center" bgcolor="#C0C0C0">住所</td> 28 <td align="left" bgcolor="#FFFFFF"> 29 <input type="text" name="Adress" size=60></td> 30 </tr> 31 <tr> 32 <td align="center" bgcolor="#C0C0C0">電話番号</td> 33 <td align="left" bgcolor="#E6E1FF"> 34 <input type="text" name="callphone" size=70></td> 35 </tr> 36 <tr> 37 <td align="center" bgcolor="#C0C0C0">ハンドルネーム</td> 38 <td align="left" bgcolor="#FFFFFF"> 39 <input type="text" name="nickname" size=16 value=""> 40 <font size=2>(半角英数)</font> 41 </td> 42 </tr> 43 <tr> 44 <td align="center" bgcolor="#C0C0C0">パスワード</td> 45 <td align="left" bgcolor="#E6E1FF"> 46 <input type="password" name="password" size=16> 47 <font size=2>(半角英数)</font> 48 </td> 49 </tr> 50 </table> 51 </td></tr> 52 </table> 53 <br> 54 <input type="submit" value=" 登録 " onclick = "exec()"/> 55 </form> 56 </div> 57 </body> 58 </html>

Web.xml

1<?xml version="1.0" encoding="UTF-8"?> 2<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 3 <display-name>Project2</display-name> 4 <welcome-file-list> 5 <welcome-file>index.html</welcome-file> 6 <welcome-file>index.htm</welcome-file> 7 <welcome-file>index.jsp</welcome-file> 8 <welcome-file>default.html</welcome-file> 9 <welcome-file>default.htm</welcome-file> 10 <welcome-file>default.jsp</welcome-file> 11 </welcome-file-list> 12 <servlet> 13 <description></description> 14 <servlet-name>Servlet1</servlet-name> 15 <servlet-class>Controller.TestP</servlet-class> 16 </servlet> 17 <servlet-mapping> 18 <servlet-name>Servlet1</servlet-name> 19 <url-pattern>/TestP</url-pattern> 20 </servlet-mapping> 21</web-app>

イメージ説明

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

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

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

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

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

m.ts10806

2020/10/28 13:07

> <form id="fm" action="<%=request.getContextPath()%>/TestP" method="post"> HTMLどのように出力されているのでしょうか。 あとweb.xmlの内容もご提示ください。
Martin

2020/10/28 13:15

Web.xmlは恐らくデプロイ記述子の事かと思いますが、どれを記載すればよいのかわからないので、メインの質問のところにキャプチャで貼り付けておきます。 また、HTMLに関してはpostメソッドで送信した際の結果でしょうか?
m.ts10806

2020/10/28 23:43

>また、HTMLに関してはpostメソッドで送信した際の結果でしょうか? いいえ。ブラウザに表示されたHTMLです。 ブラウザで右クリック→ソースを表示、か、デベロッパツールで確認してください。
Martin

2020/10/29 09:20

HTMLの内容を追加しました。
Martin

2020/10/29 09:22

また、Web.xmlの追加も別途行いました。
Martin

2020/10/29 10:15

プロジェクトの構成を質問の最後の方に追加しました。 すみませんがよろしくお願いいたします。
guest

回答1

0

ベストアンサー

「Tomcat 6」をお使いのようですが、サーブレットクラスに指定している「@WebServlet」アノテーションは「servlet2.5」では本来の役割を果たしていないので、記述はしないでも大丈夫です。

そこで、「web.xml」にURLマッピングを行うのですが、サーブレットクラスとJSPから呼び出しているURLを拝見したところ「TestP」となっているので、記述は以下のようになるのではないでしょうか。

xml

1<servlet> 2 <servlet-name>Servlet1</servlet-name> 3 <servlet-class>Controller.TestP</servlet-class> 4</servlet> 5<servlet-mapping> 6 <servlet-name>Servlet1</servlet-name> 7 <url-pattern>/TestP</url-pattern> 8</servlet-mapping>

※Tomcat 8.5などが安定しないのは、Java 6に問題があるような気がするので、長期サポートが行われている「Java 8」の導入を試してみるのも良いのかなと思います。「servlet3.1」になれば「@WebServlet」が機能するので「web.xml」が不要になりますよ。

<付記>
ちなみに「新規登録画面」って「TestP」サーブレットからフォワードさせることはできますか?
クラス内に「doGet()」を定義すれば作成できるかと思います。

Servlet

1import javax.servlet.RequestDispatcher; 2 3protected void doGet(HttpServletRequest request, HttpServletResponse response) 4 throws ServletException, IOException { 5 6 RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/jsp/NewF.jsp"); 7 rd.forward(request, response); 8}

<付記2>
「Eclipse」をお使いですと「server.xml」へ自動的に<Context>(Webアプリケーション情報)が追加されます。この中に「path」の設定があるので、必要に応じて変更を行ってください。※「新規作成画面」の内容を活かすのであれば「path="/Controller"」となるのでしょうか。

XML

1<Context docBase="Project2" path="/Project2" reloadable="false" source="org.eclipse.jst.jee.server:Project"/></Host>

投稿2020/10/29 03:58

編集2020/10/29 12:33
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Martin

2020/10/29 09:23

実際にWeb.xmlを回答していただいた通り記述しなおしてみましたが、うまくいかず.... 一応、web.xmlの内容を記載しましたのでご確認いただけますと幸いです。
退会済みユーザー

退会済みユーザー

2020/10/29 09:43

そうですか・・・。ちなみに現在のプロジェクト構成は、どのようになっていますか? フォルダ名やファイル名とかが分かるようにスクリーンショットして頂けると助かります。
Martin

2020/10/29 10:27

質問の最後の方にキャプチャを載せましたのでご確認を願いいたします。
退会済みユーザー

退会済みユーザー

2020/10/29 11:21

プロジェクト構成を確認しました。「TestP」パッケージが何のためにあるのかが気掛かりですが・・・ 現状は「NewF.jsp」から「Controller.TestP.java」を呼び出すタイミングで「404」になってしまうってことでいいのでしょうか? それと、サーブレットのURLにアクセスして「新規登録画面」に遷移させることはできますか? 「回答」の付記に例文を載せておきました。ご確認ください。
Martin

2020/10/31 11:40

全て試してみたのですがやはりうまくいきませんでした。 ここから考えられることとしては、そらくEclipseのインストールの際に設定や追加でインストールしておかなければいけない箇所があったのかと... 何度も実行し、サーバーもサーブレット7や9に変更し実行してみましたが同じでした....
Martin

2020/10/31 11:42

その為、一度Eclipseをアンインストールし、環境を再度構築しなおしてみます。 なので、一度この質問に対する回答として、ベストアンサーをつけさせていただきます。 ご協力ありがとうございました。
退会済みユーザー

退会済みユーザー

2020/10/31 13:21

引っかかりそうなポイントは概ね伝えさせて頂いたのですが、それでもダメなら確かにイチからやり直した方が良さそうですね。また、何かできることがあれば、協力させて頂きますね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問