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

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

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

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Struts

StrutsはJava向けのWebアプリケーションフレームです。MVCモデルに基づいており、JSPやJavaサーブレットを組み合わせ、アプリケーション構築時に使用する各機能を提供しています。

Q&A

解決済

1回答

1065閲覧

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

Apeynd

総合スコア5

Java

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Struts

StrutsはJava向けのWebアプリケーションフレームです。MVCモデルに基づいており、JSPやJavaサーブレットを組み合わせ、アプリケーション構築時に使用する各機能を提供しています。

0グッド

0クリップ

投稿2020/07/07 01:14

編集2020/07/07 02:12

前提・実現したいこと

ログイン画面を作り、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.

該当のソースコード

jsp

1<html:form action="/login"> 2 <table> 3 <tr> 4 <th>ログインID:</th> 5 <th><input type="text" name="loginid"/></th> 6 </tr> 7 <tr> 8 <th>パスワード:</th> 9 <th><input type="text" name="password"/></th> 10 </tr> 11 </table> 12 <input type="submit" class="login" value="ログイン" /> 13</html:form>

java

1public class LoginAction extends Action { 2 public ActionForward execute( 3 ActionMapping mapping, 4 ActionForm form, 5 HttpServletRequest req, 6 HttpServletResponse res) throws NotInputException, LoginNgException { 7 // formをLoginFormにキャスト 8 LoginForm lf = (LoginForm)form; 9 10 DataSource ds = getDataSource(req); 11 LoginLogic ll = new LoginLogic(ds); 12 13 // ログインチェック 14 ll.checkLoginOk(lf.getLoginid(), lf.getPassword()); 15 16 ActionForward af = mapping.findForward("OK"); 17 18 return af; 19 } 20}

java

1public class LoginForm extends ActionForm{ 2 private String loginid; 3 private String password; 4 5 // getter/setter 6 public String getLoginid() { 7 return loginid; 8 } 9 10 public void setLoginid(String loginid) { 11 this.loginid = loginid; 12 } 13 14 public String getPassword() { 15 return password; 16 } 17 18 public void setPassword(String password) { 19 this.password = password; 20 } 21}

xml

1 <form-beans> 2 <form-bean 3 name="loginForm" 4 type="form.LoginForm" /> 5 </form-beans> 6 <action-mappings> 7 <action path="/login" type="action.LoginAction" 8 name="loginForm" 9 scope="request"> 10 <forward name="OK" path="/menu.jsp"/> 11 </action> 12 </action-mappings>

xml

1<?xml version="1.0" encoding="windows-31j"?> 2 3<!DOCTYPE web-app 4 PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" 5 "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"> 6 7<web-app> 8 <display-name>Struts Blank Application</display-name> 9 10 <!-- Standard Action Servlet Configuration (with debugging) --> 11 <servlet> 12 <servlet-name>action</servlet-name> 13 <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> 14 <init-param> 15 <param-name>config</param-name> 16 <param-value>/WEB-INF/struts-config.xml</param-value> 17 </init-param> 18 <init-param> 19 <param-name>debug</param-name> 20 <param-value>2</param-value> 21 </init-param> 22 <init-param> 23 <param-name>detail</param-name> 24 <param-value>2</param-value> 25 </init-param> 26 <load-on-startup>2</load-on-startup> 27 </servlet> 28 29 30 <!-- Standard Action Servlet Mapping --> 31 <servlet-mapping> 32 <servlet-name>action</servlet-name> 33 <url-pattern>*.do</url-pattern> 34 </servlet-mapping> 35 36 37 <!-- The Usual Welcome File List --> 38 <!-- �X�^�[�g��ʂ�ݒ� --> 39 <welcome-file-list> 40 <welcome-file>index.jsp</welcome-file> 41 </welcome-file-list> 42 43 44 <!-- Struts Tag Library Descriptors --> 45 <taglib> 46 <taglib-uri>/tags/struts-bean</taglib-uri> 47 <taglib-location>/WEB-INF/struts-bean.tld</taglib-location> 48 </taglib> 49 50 <taglib> 51 <taglib-uri>/tags/struts-html</taglib-uri> 52 <taglib-location>/WEB-INF/struts-html.tld</taglib-location> 53 </taglib> 54 55 <taglib> 56 <taglib-uri>/tags/struts-logic</taglib-uri> 57 <taglib-location>/WEB-INF/struts-logic.tld</taglib-location> 58 </taglib> 59 60 <taglib> 61 <taglib-uri>/tags/struts-nested</taglib-uri> 62 <taglib-location>/WEB-INF/struts-nested.tld</taglib-location> 63 </taglib> 64 65 <taglib> 66 <taglib-uri>/tags/struts-tiles</taglib-uri> 67 <taglib-location>/WEB-INF/struts-tiles.tld</taglib-location> 68 </taglib> 69 70</web-app>

試したこと

<html:form action="/login">を

<form action="/login"> に変更したりしましたが駄目でした。 ### 補足情報(FW/ツールのバージョンなど)

Struts1.2.9

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

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

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

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

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

momon-ga

2020/07/07 02:03

ご提示の、struts-config.xmlでなく、 web.xmlって、どうなってます?
Apeynd

2020/07/07 02:12

すみません、あまり変更していないので関係ないのかと思っていました。 全内容追記しました。
momon-ga

2020/07/07 02:19

404なのでアクションサーブレットが未定義なのかなと思ったので。どうやら問題なさそうです。 menu.jspは作ってあります?
Apeynd

2020/07/07 02:21

menu.jspは作っていないですが、 menu.jspをindex.jspに変更しても同じだったので一緒かなと・・・ 一度menu.jspを作って動かしてみます
momon-ga

2020/07/07 02:23

<forward name="OK" path="/menu.jsp"/>と、なってるので、作ってみてください」
m.ts10806

2020/07/07 02:29

「手順書通りに」と仰いますが、その手順書についての情報が提示されていません。
Apeynd

2020/07/07 02:37

>>momon-ga さん menu.jspを作ってみましたがやはり同じように404エラーです・・・ >>m.ts10806 さん すみません、手順書はどう載せたらよいかわからないですが 手順書に記載されているコードはAction、web.xml、struts-config.xmlすべて上記と同じです jspは自分で書いてますがxmlの設定が間違いなければ<html:form action="/login">でActionが動くはずなんですが・・・
momon-ga

2020/07/07 02:59

jspの配置場所が違うのでは?手順書と比べてください。
Apeynd

2020/07/07 04:09

pathは"/menu.jsp"としてるので WebContent直下にmenu.jspは置いています デバッグでサーバー立ててLoginAction.javaにブレークポイントつけてみましたがやはりActionが動いていないです・・・
momon-ga

2020/07/07 04:14

あら・・・Strutsしばらく触ってないから忘れてしまったが。actionが動いていないなら action="/login" を action="/login.do" にしたら、どうでしょうか。
momon-ga

2020/07/07 04:27

acrionが動くのは、login.doの時だけです。
Apeynd

2020/07/07 04:31

では本来ならこれで動いてるはずなんですね・・・ うーん、わからない・・・
momon-ga

2020/07/07 04:32 編集

ちなみに、直接、login.doをたたいた場合、action動きますよね?
Apeynd

2020/07/07 04:33

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

2020/07/07 05:51

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

2020/07/07 05:58

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

回答1

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 06:12

momon-ga

総合スコア4826

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

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

Apeynd

2020/07/07 07:45

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問