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

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

ただいまの
回答率

88.92%

Strutsの勉強を始めましたが手順書通りにやってもうまくActionまで走らない

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 218

Apeynd

score 5

前提・実現したいこと

ログイン画面を作り、IDとPASSを入力してログインボタンを押下することでメニュー画面に遷移する機能を作っています。
メニュー画面は一旦後回しにして、とりあえずログインボタン押下時にActionまで動くか試そうとしているのですが、ボタン押下時に404エラーとなってしまいます。

発生している問題・エラーメッセージ

HTTPステータス 404 - Not Found
The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.

該当のソースコード

<html:form action="/login">
    <table>
        <tr>
            <th>ログインID:</th>
            <th><input type="text" name="loginid"/></th>
        </tr>
        <tr>
            <th>パスワード:</th>
            <th><input type="text" name="password"/></th>
        </tr>
    </table>
    <input type="submit" class="login" value="ログイン" />
</html:form>
public class LoginAction extends Action {
    public ActionForward execute(
            ActionMapping mapping,
            ActionForm form,
            HttpServletRequest req,
            HttpServletResponse res) throws NotInputException, LoginNgException {
        // formをLoginFormにキャスト
        LoginForm lf = (LoginForm)form;

        DataSource ds = getDataSource(req);
        LoginLogic ll = new LoginLogic(ds);

        // ログインチェック
        ll.checkLoginOk(lf.getLoginid(), lf.getPassword());

        ActionForward af = mapping.findForward("OK");

        return af;
    }
}
public class LoginForm extends ActionForm{
    private String loginid;
    private String password;

    // getter/setter
    public String getLoginid() {
        return loginid;
    }

    public void setLoginid(String loginid) {
        this.loginid = loginid;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}
 <form-beans>
        <form-bean
            name="loginForm"
            type="form.LoginForm" />
        </form-beans>
 <action-mappings> 
        <action path="/login" type="action.LoginAction"
                name="loginForm"
                scope="request">
            <forward name="OK" path="/menu.jsp"/>
        </action>
 </action-mappings>
<?xml version="1.0" encoding="windows-31j"?>

<!DOCTYPE web-app
  PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
  "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

<web-app>
  <display-name>Struts Blank Application</display-name>

  <!-- Standard Action Servlet Configuration (with debugging) -->
  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <init-param>
      <param-name>debug</param-name>
      <param-value>2</param-value>
    </init-param>
    <init-param>
      <param-name>detail</param-name>
      <param-value>2</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
  </servlet>


  <!-- Standard Action Servlet Mapping -->
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>


  <!-- The Usual Welcome File List -->
  <!-- �X�^�[�g��ʂ�ݒ� -->
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>


  <!-- Struts Tag Library Descriptors -->
  <taglib>
    <taglib-uri>/tags/struts-bean</taglib-uri>
    <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
  </taglib>

  <taglib>
    <taglib-uri>/tags/struts-html</taglib-uri>
    <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
  </taglib>

  <taglib>
    <taglib-uri>/tags/struts-logic</taglib-uri>
    <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
  </taglib>

  <taglib>
    <taglib-uri>/tags/struts-nested</taglib-uri>
    <taglib-location>/WEB-INF/struts-nested.tld</taglib-location>
  </taglib>

  <taglib>
    <taglib-uri>/tags/struts-tiles</taglib-uri>
    <taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
  </taglib>

</web-app>

試したこと

<html:form action="/login">を
<form action="/login">
に変更したりしましたが駄目でした。

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

Struts1.2.9

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • Apeynd

    2020/07/07 13:33

    直接URLたたきましたが動いていません。

    キャンセル

  • momon-ga

    2020/07/07 14:51

    webアプリのリモートデバッグは経験済みで、ブレークポイント使った確認方法は間違っていないと思ってよい?(要は、actionは動いてるってことない?)
    もし、動いてないんだとしたらweb.xmとStruts-configに問題がありそう。
    あと再起動してないから読み込まれてないとか・・・

    キャンセル

  • Apeynd

    2020/07/07 14:58

    デバッグは以前Spring勉強の際に使っていたので使い方の問題はないはずです。
    自分も問題があるとしたらxmlのどちらかになるかとは思うのですが何度も見直してますがいまいち・・・
    再度確認し直してみます。
    サーバーの再起動は都度行っています。

    キャンセル

回答 1

checkベストアンサー

0

あまりチカラにたててないので、解決方法ではないですが。
問題の切り分けを書いてみます。

1.strutsが動作しているかの確認
index.jspを配置して、コンテキストルートへアクセスしたさいに、index.jsp(welcomeファイル)が表示される。

2.actionが動作しているかの確認
リモートデバッグができていない可能性があるなら、コンソール出力をして当該actionが動作しているかを確認する

この時、formなどを通さずURLを直叩きする(xxx.doをたたく)

3.actionが動作した場合
フォワードの指定が間違っているので、パスなどを確認

1がダメならstrutsが動作していないので、web.xmlとstruts-configの確認
2がダメならstruts-configの確認

という感じですかね。

あとは、わざとエラーを起こす挙動をして想定通りのエラーになるかとかも確認するとよいです。
tomcatの404エラーの出方が同じかどうかなど。

login.do、login2.do、loginlogin.dod などエラーの挙動の違いで、設定が正しいか確認できるかも。

ActionServlet経由で、login.doが呼ばれる。
ActionServlet経由で、login2.doが、ないというエラーになる
loginlogin.dod そもそもtomcatの404になる。

みたいな感じ

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2020/07/07 16:45

    サーバー起動時のコンソールに
    サーブレット[action]を利用不可能にマークします
    という文字があったため、そちらの原因を調査した結果正常にActionが動くようになりました。
    struts-config内の記述におかしい点があったようです(手順書のミスのようです)
    長い時間ありがとうございました

    キャンセル

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

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

関連した質問

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