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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Eclipse

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

Q&A

解決済

2回答

5938閲覧

Javaでのおみくじ作成について

ikechan

総合スコア5

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Eclipse

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

0グッド

0クリップ

投稿2020/11/08 12:05

編集2020/11/08 13:25

初心者です。Javaでおみくじを作っています。
http://localhost:8080/first_webapp/omikuji.jspにて"占う!"と押すと404エラーになってしまいます。
どのように改善すればよろしいでしょうか?
氏名が未入力で送信⇨「入力内容にエラーがあります。氏名を入力してください」を表示。
氏名を入力    ⇨氏名と一緒に占い結果が表示。としたいです。
Macbook AirとEclipse使用してます。
コードを載せます。
まだまだ初心者なので、どの画面の何行目をどう改善したらいいなどと指摘してくださったら嬉しいです。
よろしくお願いします。
入力フォーム(omikuji.jsp)

java

1<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2<!DOCTYPE html> 3<html lang="ja"> 4 <head> 5 <meta charset="UTF-8"> 6 <title>今日のおみくじ</title> 7 </head> 8 <body> 9 <h1>今日のおみくじ</h1> 10 <form method="POST" action="/first_webapp/OmikujiServlet"> 11 <label for="username">氏名</label> 12 <br> 13 <input type="text" name="username"> 14 <br> 15 <br> 16 <button type="submit">占う!</button> 17 </form> 18 </body> 19</html> 20

サーブレット(OmikujiServlet.java)

java

1pakege test 2 3import java.io.IOException; 4import java.util.ArrayList; 5import java.util.List; 6 7import javax.servlet.RequestDispatcher; 8import javax.servlet.ServletException; 9import javax.servlet.annotation.WebServlet; 10import javax.servlet.http.HttpServlet; 11import javax.servlet.http.HttpServletRequest; 12import javax.servlet.http.HttpServletResponse; 13 14/** 15 * Servlet implementation class OmikujiServlet 16 */ 17public class OmikujiServlet extends HttpServlet { 18 private static final long serialVersionUID = 1L; 19 20 public OmikujiServlet() { 21 super(); 22 } 23 24 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 25 String username = request.getParameter("username"); 26 27 String[] omikuji_results = {"大吉", "吉", "中吉", "小吉”, 末吉", "凶"}; 28 String omikuji_result = omikuji_results[(int)(Math.random() * 6)]; 29 30 //入力チェック 31 List<String> errors = new ArrayList<String>(); 32 33 if (username == null || username.equals("")) { 34 errors.add("名前を入力してください。"); 35 } 36 37 if (errors.size() > 0) { 38 request.setAttribute("errors", errors); 39 40 } else { 41 request.setAttribute("username", username); 42 request.setAttribute("omikuji_result", omikuji_result); 43 } 44 45 // ビューとなるJSPを指定して表示する 46 RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/omikuji_result.jsp"); 47 rd.forward(request, response); 48 } 49}

サーブレットのビューとなるJSPファイル(omikuji_result.jsp)

java

1<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 3<!DOCTYPE html> 4<html lang="ja"> 5 <head> 6 <meta charset="UTF-8"> 7 <title>おみくじの結果</title> 8 </head> 9 <body> 10 <c:choose> 11 <c:when test="${errors != null}"> 12 <h1>入力にエラーがあります。</h1> 13 <ul> 14 <c:forEach var = "error" items="${errors}"> 15 <li><c:out value="${error}"/></li> 16 </c:forEach> 17 </ul> 18 </c:when> 19 <c:otherwise> 20 <h1> おみくじの結果</h1> 21 <p><c:out value="${username}" />さんの今日の運勢は <c:out value="${omikuji_result}" /> です。</p> 22 </c:otherwise> 23 </c:choose> 24 </body> 25</html>

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

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

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

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

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

y_waiwai

2020/11/08 12:44

コードはテキストで提示しましょう。 画像ではみる気がないですw コードは、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
ikechan

2020/11/08 13:09

ご指摘ありがとうございます。 修正いたしました。
YT0014

2020/11/08 15:51

java及びtomcatのバージョンをご提示ください。 tomcatのバージョンによっては、web.xmlにサーブレットマッピングを明示的に記載する必要があります。
ikechan

2020/11/09 12:41

ご指摘ありがとうございます。 Eclipse4.6.3でTomcat(Java8)です。
guest

回答2

0

「OmikujiServlet.java」の先頭で行っているパッケージ名の指定に誤りがあるように見えます。これではエラーとなってしまうはずなので、修正を行ってみてください。

(誤)pakege test
(正)package test;

投稿2020/11/09 06:10

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ikechan

2020/11/23 09:29

お返事遅れてしまい、申し訳ありません。 エラー修正できました。ありがとうございます!
guest

0

ベストアンサー

404のメッセージをみると、どの箇所で「見つからなかった」のか、わかると思います。
こちらでやってみたところ、以下2か所で404エラーが発生していました。
どちらも、サーブレット(OmikujiServlet.java)の修正です。

【修正1】
「メッセージ 要求されたリソース [/WebSample/OmikujiServlet] は利用できません。」

@WebServletアノテーションが設定されていないようです。
サーブレットの定義の前にこれを追加してみてください。

java

1/** 2 * Servlet implementation class OmikujiServlet 3 */ 4@WebServlet("/OmikujiServlet") /* ★これを追加する */ 5public class OmikujiServlet extends HttpServlet {

【修正2】
「メッセージ JSP ファイル [/WEB-INF/omikuji_result.jsp] が見つかりません」

omikuji_result.jspの指定で"/WEB-INF"はいらないようです。
"/WEB-INF"を削除してみてください。

java

1// ビューとなるJSPを指定して表示する 2//RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/omikuji_result.jsp"); /* ★修正前 */ 3RequestDispatcher rd = request.getRequestDispatcher("/omikuji_result.jsp"); /* ★修正後 */

投稿2020/11/09 01:49

akiruno-oneone

総合スコア815

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

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

ikechan

2020/11/09 13:23

ありがとうございます。 おかげでサーブレット側のエラーが消えました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問