プロが教える店舗&オフィスのセキュリティ対策術

java初心者です。
どなたか教えていただけませんでしょうか?

JAVAのstrutsを使用してソフトを作成しています。
JSPに記載した「<html:form action="/authentication" focus="id"> 」
との記述が、WEB(IE)に展開されたソースを見ると、「<form name="AuthenticationForm" method="post" action="/strutsTest/authentication">」
に変換されています。
action="/authentication"と記述しているにもかかわらず、
action="/strutsTest/authentication"と展開されているのですが
/strutsTestが自動的に付与されているのは、なぜなのでしょうか?
なにか設定するところがあるのでしょうか?
※struts-config.xmlに指定したpathと一致しない為、404NotFoundになるので自動設定しないように変更したいのです。

ちなみに環境は
struts-1.3.10
Apache Tomcat 6.0.14 Server
EclipsVersion: 3.4.2
pakage名:struts
プロジェクト名:strutsTest

struts-config.xmlの設定
  <form-beans>
<form-bean name="AuthenticationForm" type="struts.AuthenticationForm"/>
</form-beans>
<global-exceptions>
</global-exceptions>
<global-forwards>
<forward name="fail" path="/login.jsp"/>
</global-forwards>
<action-mappings>
<action path="/authentication" name="AuthenticationForm" type="struts.AuthenticationAction" scope="session">
<forward name="success" path="/welcome.jsp"/>
<forward name="fail" path="/login.jsp"/>
</action>
</action-mappings>
login.jsp
<%@ page contentType="text/html; charset=Windows-31J" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<html:html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-31J"/>
<title>ログイン画面</title>
</head>
<body>
<html:errors/>
ID・パスワードを入力してください。
<html:form action="/authentication" focus="id">
<html:text property="id" size="16"/>
<br>
<html:password property="pas" size="16" redisplay="false" />
<br>
<html:submit property="submit" value="送信"/>
<html:reset value="リセット"/>
</html:form>
</body>
</html:html>

動作順は、login.jsp => AuthenticationAction.class => welcome.jsp
です。
よろしくお願いします。

A 回答 (5件)

> JSPに記載した「<html:form action="/authentication" focus="id"> 」


> との記述が、WEB(IE)に展開されたソースを見ると、「<form name="AuthenticationForm" method="post" action="/strutsTest/authentication">」
html:form のアクションに、コンテキストパスが付加されるのは正しい動作だと思いますが、
なんで、404NotFound になるんだろう?

コンテキストの設定は、何をやっているんですか?

参考
http://struts.apache.org/1.3.10/struts-taglib/ta …
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。
>コンテキストの設定は、何をやっているんですか?
今回特に設定していません。何か設定が必要なのでしょうか?

struts-config.xmlのaction-mappingに
<action path="/authentication" name="AuthenticationForm" type="struts.AuthenticationAction" scope="session">
を定義しており、<action path="/authentication" のURLでないと
だめなものと思い込んでいました。
他の視点から調べてみます。

ありがとうございます。

お礼日時:2009/06/17 22:47

>/strutsTestが自動的に付与されているのは、なぜなのでしょうか?


仕様です。

>※struts-config.xmlに指定したpathと一致しない為、404NotFoundになるので自動設定しないように変更したいのです。
Tomcat起動時にEclipseのコンソールにエラーが表示されていませんか?
(コンテキストの起動が失敗していないか)

この回答への補足

すみません。補足は1回だけなのですね。
回答No3の続きです。読みにくくなってしまい
申し訳ありません。
------------------------------
ちなみに、EclipsからTOMCATへの連動設定で
strutsTest.xmlの定義(Eclipsで自動設定)は以下のようになっていました。
<Context path="/strutsTest" reloadable="true" docBase="C:\eclipse\workspace\strutsTest" workDir="C:\eclipse\workspace\strutsTest\work" >
<Logger className="org.apache.catalina.logger.SystemOutLogger" verbosity="4" timestamp="true"/>
</Context>

WEB.xmlの内容
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
       -- 省略 --
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>
TOMCATの起動ログではエラーは出てません。
(ログの内容)
2009/06/18 18:13:52 org.apache.coyote.http11.Http11Protocol init
情報: Coyote HTTP/1.1を http-8080 で初期化します
2009/06/18 18:13:52 org.apache.catalina.startup.Catalina load
情報: Initialization processed in 390 ms
2009/06/18 18:13:52 org.apache.catalina.core.StandardService start
情報: サービス Catalina を起動します
2009/06/18 18:13:52 org.apache.catalina.core.StandardEngine start
情報: Starting Servlet Engine: Apache Tomcat/6.0.14
2009/06/18 18:13:53 org.apache.struts.tiles.TilesPlugin initDefinitionsFactory
情報: Tiles definition factory loaded for module ''.
2009/06/18 18:13:53 org.apache.struts.validator.ValidatorPlugIn initResources
情報: Loading validation rules file from '/WEB-INF/validator-rules.xml'
2009/06/18 18:13:53 org.apache.struts.validator.ValidatorPlugIn initResources
情報: Loading validation rules file from '/WEB-INF/validation.xml'
2009/06/18 18:13:58 org.apache.coyote.http11.Http11Protocol start
情報: Coyote HTTP/1.1を http-8080 で起動します
2009/06/18 18:13:58 org.apache.jk.common.ChannelSocket init
情報: JK: ajp13 listening on /0.0.0.0:8009
2009/06/18 18:13:58 org.apache.jk.server.JkMain start
情報: Jk running ID=0 time=0/31 config=null
2009/06/18 18:13:58 org.apache.catalina.startup.Catalina start
情報: Server startup in 5404 ms
いろいろとTRYしていますが、原因不明です。
別のプロジェクトを新たに作成して比較してみたいと思います。

補足日時:2009/06/18 18:32
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。
Tomcat起動時には、エラーは出ていませんでした。
>>/strutsTestが自動的に付与されているのは、なぜなのでしょうか?
>仕様です。
そういう仕様なのですね。
struts-config.xmlのpath設定の方を変更してみます。
ありがとうございました。

お礼日時:2009/06/17 22:36

>struts-config.xmlのpath設定の方を変更してみます。


変更する必要はありません。
ってか他のやり方があるのかすら微妙です。
struts-config.xmlのPathの設定が悪いのではなく他の要因だと思います。

あと、404が出るのはどの画面ですか?
login.jspですか?
welcome.jspですか?

とりあえず手順を書きます。
1、ファイル配置が以下のようになっているか。
strutsTest
   -WEB-INF/src
     -struts
       -AuthenticationAction.java
       -AuthenticationForm.java
   -WEB-INF
     -struts-config.xml
     -web.xml
   -login.jsp
   -welcome.jsp

2、Tomcatを起動してコンソールにエラーがないことを確認。
2、接続URLの確認
  http://localhost:8080/strutsTest/
  または
  http://localhost:8080/strutsTest/login.jsp
3、2でhttp://localhost:8080/strutsTest/で接続している場合web.xmlのwelcome-fileタグにlogin.jspが記載されているか。

この回答への補足

添付できませんでしたので、何回かに分けます。
>あと、404が出るのはどの画面ですか?
エラーの出るタイミングは、
1 login.jspを表示  => http://localhost:8080/strutsTest/
2 ユーザIDとパスワードを入力しSUBMITボタンを押下
3 http://localhost:8080/strutsTest/authentication; …に遷移しエラー HTTPステータス 404 - /strutsTest/authenticationとなります。
手順に沿って確認してみました。
フォルダー構成は eclipsを使用しており、
 C:\eclipse\workspace\strutsTest\WEB-INF\src\struts
       => AuthenticationAction.java
       => AuthenticationForm.java
C:\eclipse\workspace\strutsTest\WEB-INF\classes\struts
       => AuthenticationAction.class
       => AuthenticationForm.class
C:\eclipse\workspace\strutsTest
       => login.jsp
       => welcome.jsp
C:\eclipse\workspace\strutsTest\WEB-INF
       => web.xml
       => struts-config.xml
C:\Program Files\Apache Software Foundation\Tomcat 6.0\conf\Catalina\localhost
       => strutsTest.xml
となっておりたぶん間違いはなさそうなのですが・・・

補足日時:2009/06/18 18:27
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
1000文字を超えるため、内容はテキストに添付させていただきます。

いろいろとTRYしていますが、いまだ原因不明です。
別のプロジェクトを新たに作成して比較してみたいと思います。

お礼日時:2009/06/18 18:26

login.jspが表示されているということはTomcatの起動には問題がないと思います。



そうなるとwelcome.jspのスペル間違いの可能性が高いです。
パッケージエクスプローラーでF2でwelcome.jspの名前をコピペしてstruts-config.xmlに貼り付けてください。

あとAuthenticationAction.javaにブレイクポイントを張ってActionに到達しているか、遷移文字列(ActionForwardの文字列)も確認してください。

Actionに到達すれば、あとは遷移先の指定が間違っているだけだと思います。

この回答への補足

すみません。原因がはっきりしました。
eclipesの開発環境の問題だと思うのですが、eclipesではClassファイルがbinフォルダーに入っており、これを手動でWEB-INF/Classes/にコピーしてみると動きました。Tomcat6.0のwebapps eclipesのwebapps両方とも確認できました。
eclipesの環境をもっと熟知しておくべきでした。申し訳ありません。
いろいろとありがとうございました。

補足日時:2009/06/22 11:37
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。

土日にかけて新しいプロジェクトを作成して試してみたところ
EclipsのStrutsIDEとTomcat6.0の関係が原因ではないかというところ
が出てきました。
以下検証手順です。
1 struts2というUrlでプロジェクトを作成。(Eclipse)
2 EclipseでTomcat6.0起動し、検証=>NG(同じエラー)
3 tomcat6.0のServer.xmlを書き換え、tomcatのWebapps内にプロジェクトをハンドで作成。TldファイルはEclipesからコピー
4 Tomcat再起動し実行 検証=>NG(同じエラー)
5 WEBからstruts1.3をダウンロードして、TOMCATフォルダーにwarファイルを展開
6 blankプロジェクトをリネームして、struts2プロジェクトを作成
7 apacheプロジェクトのwebページに書かれている内容に沿ってweb.xml struts-config.xmlの内容を書き換え。
8 server.xmlをTOMCATフォルダ参照に変更
9 TOMCAT再起動 検証=>OK (動きました)
struts1.3とstrutsIDE(Struts Ver 1.2)の違いは、tldファイルがなくなり、jarファイル化されています。
eclipesに、Struts1.3の環境を使用してプロジェクトの作成はまだしていませんので、すべて検証できていませんが、tomcat6.0とstruts1.2は動かないのでしょうか?
取っ掛かりが出来たので、ここから問題解決していきたいと思います。

ここまでお付き合いくださり、またいろいろヒントをくださいまして
感謝の気持ちで一杯です。ありがとうございます。

お礼日時:2009/06/22 10:12

パッケージエクスプローラーで



右クリック→新規→その他→Java→Tomcatプロジェクト

でプロジェクトを作成しなかったってことですか?
    • good
    • 0
この回答へのお礼

>右クリック→新規→その他→Java→Tomcatプロジェクト
これで作成しましたが、なぜかWEB-INFの配下にClassesフォルダーが出来ません。
今も何回かやり直したのですが・・・
設定がどこかにあるのかどうかWEBで探して見ます。
フォルダー構造
WEB-INF
- LIB(フォルダ)
struts-config.xml
struts-html.tld

     ・
     ・

お礼日時:2009/06/23 10:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!