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

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

ただいまの
回答率

88.10%

JSP→サーブレット「遷移ができない」

解決済

回答 5

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 13K+

score 17

JAVA初心者です。
JSPとサーブレットを使って、ログイン画面を作成しているのですが、
【HTTPステータス 404】エラーで原因が分からず。。。。。困ってます。。。。
どなたか分かる方いらっしゃいましたら、教えてください。(*‘ω‘ *)

MMPC003.jsp---------------------------------------------------
<body>
<form method="post" action="/MyManeger/MMPC003">
<br>
<font face="HGS明朝B" size="3" color="#00008b">メールアドレス(ID):</font>
<input type="text" name="emailaddress">
<br>
<input type="submit" value="ログイン">
</form>
</center>
</body>

</html>

MMPC003.java(Servlet)-----------------------------------------------
package servlet;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import model.MMPC003form;
import validate.S007;

/**
 * Servlet implementation class MMPC003
 */
@WebServlet("/MMPC003")
public class MMPC003 extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String email = request.getParameter("emailaddress");

/*MMPC003form.javaに値を渡す*/
MMPC003form mform = new MMPC003form();
mform.setEmail(email);
String mail = mform.getEmail();

/*S007.javaをインスタンス化*/
S007 cheak = new S007();
String uac = cheak.execute(mail);
mform.setError(uac);

/*取得した値をJSPへ*/
request.setAttribute("error", mform);
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/MMPC004.jsp");
dispatcher.forward(request, response);
    }
}
MMPC003form.java----------------------------------------------------------
package model;

public class MMPC003form {

    private String email;
    private String error;

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getError() {
        return error;
    }

    public void setError(String error) {
        this.error = error;
    }
}

S007.java------------------------------------------------
package validate;

public class S007 {
public S007() {
}

/* メールアドレスは31文字以内で入力してください */
public String execute(String mform) {
if (mform.length() >= 31) {
return "メールアドレスは31文字以内で入力してください。";
} else {
return null;
       }
    }

}

MMPC004.jsp--------------------------------------------------
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ page import="model.MMPC003form"%>
<%MMPC003form mmpc003 = (MMPC003form) request.getAttribute("error");%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<%= mmpc003.getError()%>
<font face="HGS明朝B" size="5" color="#00008b">

Login
<br>
MyManegerへようこそ!
</font>
</body>

</html>

よろしくお願いいたします。

【追記】
一番最後のMMPC004.jspのみ実行してみると、
HTTPステータス 500 - JSPのクラスをコンパイルできません: というエラーが出てきました!(泣)

type 例外レポート
メッセージ JSPのクラスをコンパイルできません: 
説明 The server encountered an internal error that prevented it from fulfilling this request.
例外 
org.apache.jasper.JasperException: JSPのクラスをコンパイルできません: 

An error occurred at line: [14] in the generated java file: [C:\pleiades\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\MyManeger\org\apache\jsp\MMPC004_jsp.java]
Only a type can be imported. model.MMPC003form resolves to a package

JSPファイル: /MMPC004.jsp の中の4行目でエラーが発生しました
MMPC003form cannot be resolved to a type
1: <%@ page language="java" contentType="text/html; charset=UTF-8"
2:     pageEncoding="UTF-8"%>
3: <%@ page import="model.MMPC003form"%>
4: <%MMPC003form mmpc003 = (MMPC003form) request.getAttribute("error");%>
5: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
6: <html>
7: <head>

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • junpi-ya

    2016/02/28 21:42

    Eclipseのサーバーで実行しております。
    「MMPC003form」のソース追加させて頂きました。このクラスは値を保持する為のクラスです。

    実際の操作は、
    ①MMPC003.jspをサーバーで実行し、Eclipseで画面を展開。
    ②・メールアドレス・パスワードを入力
    ③「ログイン」ボタンを押下。

    ①の画面は出てくるのですが、③を実行すると、
    ------------------------------------------------------------------
    HTTPステータス 404 - /MyManager/MMPC003
    type ステータスレポート
    メッセージ /MyManager/MMPC003
    説明 The requested resource is not available.
    ---------------------------------------------------------
    と出てきております。
    上記の返信でいかがでしょうか。わかりにくくてすみません"(-""-)"




    キャンセル

  • argius

    2016/02/28 22:17

    あといくつか教えてください。Eclipseのプロジェクト名はMyManagerですか? ①のときにアドレスバーに表示されているURLを書いていただけますか? 直接手で入力せずにコピペが望ましいです。

    キャンセル

  • junpi-ya

    2016/02/28 22:19

    URLは、
    http://localhost:8080/MyManeger/MMPC003.jsp
    になります。よろしくお願いいたします!

    キャンセル

回答 5

checkベストアンサー

0

最初に、MyManegerはマネージャーの英単語だとしたらつづりが正しくないですね。
後々のことを考えると本当は直しておいたほうが良いと思うのですが、ここを変えてしまうとまた別の問題が起きそうなので、今はやめておきましょう。

...

一度にいろいろやってしまうと収拾がつかなくなりますので、確実にひとつひとつ直していってください。

まず、JSPの先頭のpageEncodingの前にスペースがありません。

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>`


これを直してみてください。

MMPC004.jspのみ実行というのは今のところやってみなくて結構です。

formのaction属性ですが、プロジェクト名を後で変えても良いように、相対パスで書いておいた方が良いと思います。これならもしコンテキスト名が誤っていてもサーブレットを呼び出せるはずです。 

<form method="post" action="./MMPC003">

(コメント2016/03/01 15:43 を受けての追記)

フォルダー構成は以下のようになっています。
(不要なファイルは除く)

ファイルを作った以外の特別な操作・設定はしていません。

MyManeger
├─build
│  └─classes
│      ├─model
│      │      MMPC003form.class
│      │
│      ├─servlet
│      │      MMPC003.class
│      │
│      └─validate
│              S007.class
│
├─src
│  ├─model
│  │      MMPC003form.java
│  │
│  ├─servlet
│  │      MMPC003.java
│  │
│  └─validate
│          S007.java
│
└─WebContent
    │  MMPC003.jsp
    │
    ├─META-INF
    │      MANIFEST.MF
    │
    └─WEB-INF
        │  web.xml
        │
        ├─jsp
        │      MMPC004.jsp
        │
        └─lib

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/01 17:37

    解決できて良かったです。

    キャンセル

  • 2016/03/01 18:24

    >hato_pato さま
    自動ビルドはチェック入ってます。
    チェック入っていると何か問題あるのでしょうか・・・?
    よろしくお願いいたします。

    キャンセル

  • 2016/03/01 18:28

    >hato_patoさま

    引き続き、失礼いたします。
    わたしのEclipseでは、コンテキストの再ロードが自動的にされる場合と
    されない場合があるのですが、これも原因なのでしょうか。

    また、どういう条件で再ロードされるのか教えて頂けると助かります。。。(´;ω;`)

    キャンセル

0

<form method="post" action="/MyManeger/MMPC003"> 

この行じゃないですかね。
相対パスでしか書いてないのでURLが解析できないのでは?
http://localhost/MyManager/MMPC003とかにしてみてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/02/28 20:18

    絶対パスでも実行してみましたが、エラーは解決できませんでした。
    環境の問題なのでしょうか。
    よろしくお願いいたします。

    キャンセル

0

ServletにdoGetを実装して、web.xmlなどを記述して、まずURLが呼べるかどうかをチェックしてみてはどうでしょうか。画面が思った通りに遷移できるようにしてから、それからログイン処理を書いたらよいかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/02/28 20:19

    ありがとうございます。
    画面遷移から作成してみたいと思います。

    キャンセル

0

フォルダ配置は以下で間違いないでしょうか?
Web-Content
 └WEB-INF
   └jsp
      └MMPC004.jsp

↓こちらではありませんか?
Web-Content
  └jsp
    └MMPC004.jsp

//修正前
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/MMPC004.jsp");

//修正後
 RequestDispatcher dispatcher = request.getRequestDispatcher("/jsp/MMPC004.jsp");

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/02/29 00:47

    私がよく、上のような間違いをしていたので確認しました。
    コメントではなく質問で確認すべきだったかもしれません、申し訳ありません。

    キャンセル

  • 2016/02/29 08:56

    ファイルの配架は、
    Web-Content
     └WEB-INF
       └jsp
       └MMPC004.jsp
    で間違いありません。

    RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/MMPC004.jsp");
    もいくつか試してみたのですが、解決に繋がらず。。。。
    よろしくお願いいたします。

    キャンセル

  • 2016/03/01 17:04

    JSPファイルはWEB-INF配下に置かないのでは?
    http://www.atmarkit.co.jp/ait/articles/0704/19/news129.html

    キャンセル

0

eclipseのプロジェクトのワークスペース以下の
アプリケーション構成は送ってもらえますか?

{workspace}\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps

実際に動作するclassファイル等が配置されているはずです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.10%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る