プロが教えるわが家の防犯対策術!

失礼致します。
初歩的なことですが質問させてください。
strutsにおけるxmlファイルの記述例は次のようになります。

<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>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>


ここで、新しいサーブレット(download)を追加しようと次のように記述を加えました。

<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<servlet-name>download</servlet-name>
<servlet-class>Download</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-patte
<servlet-name>download</servlet-name>
<url-pattern>/download</url-pattern>rn>
</servlet-mapping>

すると、入り口のファイルに対し、「The requested resource (/プロジェクト名/ファイル名.jsp) is not available.」と警告されました。
strutsではサーブレットの追加は出来ないのでしょうか?ご指摘お願いします。

A 回答 (4件)

No.1 のものです。



ちょっと整理させてください。
webapps/addr/WEB-INF/web.xml
webapps/addr/WEB-INF/struts-config.xml
webapps/addr/WEB-INF/classes/dmaddr/Download.class(Download.class は、package dmaddr)
という配置でよろしいですよね?
この状態で、下記URLアドレスは正しく表示できますか?
「http://アドレス:ポート番号/addr/action1.do」

で、そこに今回新しいサーブレットファイル Download.class を追加する
というこでしょうか?

であれば、web.xml は何も変更する必要はありませんよ。
(「Downloadクラスに関する記述は何もいらない」という意味です)
struts-config.xml の <action>をどんどん追加していけばOKです。
<action path="/Download" type="dmaddr.Download">
</action>

こんな感じで良いかと・・・

この回答への補足

 書き込みありがとうございます。m(__)m
ただ、おっしゃられたようにaction-mappingsの中にactionを新たに追加しましたがうまく表示できませんでした。(下記のエラーと同じ。)
ただ、ファイル階層を調べたところ
C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps下ではなく、
C:\Documents and Settings\ログイン名\workspace\dmaddr\WEB-INF\classes\dmaddr\クラスファイル
となっておりました。
細部の配置(xmlファイルとクラスファイルの相対的な位置など)は正しいのですが大もとが違います。
Eclipseを使っている関係上仕方がないのでしょうか?
webapp下にもソースがありダブっているという可能性は有りません。
webapp下に移動させるべきなのでしょうか?

補足日時:2006/09/28 23:13
    • good
    • 0

ANo2です。


私はTomcat5.0を使用しているので若干違いがあるかもしれませんが、以下の場所に以下のxmlファイルがあればwebapp下にプロジェクトを移動させる必要はありませんよ。そのxmlにwebappとお使いのプロジェクトのフォルダとのマッピングが記述されています。
C:\Program Files\Apache Software Foundation\Tomcat 5.5\conf\Catalina\localhost\プロジェクト名.xml

まずはコンテキストルートの確認をしてみませんか?
Eclipseのプロジェクトを右クリックしてプロパティを表示してください。その中にTomcatという分類がありそれを選択すると、アプリケーションURLが表示されると思います。それがコンテキストルートです。

プロジェクトの直下に適当なHTMLを置いて、
以下のアドレスで表示してみてください。
「http://アドレス:ポート番号/コンテキストルート/HTMLファイル名」
これで表示されなければ、Struts以前のEclipseの設定の問題になると思います。
これが解決できてから、次にweb.xmlやstruts-config.xmlの設定を確認していきましょう!

この回答への補足

ありがとうございます。
ロケーションは、C:\Documents and Settings\ログイン名\workspace\コンテクスト名 となっていました。
そこでおっしゃられたようにコンテクストの下にhtmlファイル(test.html)を作ってhttp://localhost:8080/コンテクスト(Eclipse上で/コンテクスト と表示されている)/test.htmlにアクセスしましたが「The requested resource (/コンテクスト/test.html) is not available.」と言われました。
ロケーションをwebapp下に変えたほうが良いのでしょうか?
皆さんのお話を聞いているとそんな気がしてきました。

補足日時:2006/10/02 08:52
    • good
    • 0

Downloadというクラスはパッケージ化されていますか?


されている場合は、<servlet>タグの記述は以下のようになります。
(途中は省略してます。)
<servlet>
<servlet-name>download</servlet-name>
<servlet-class>パッケージ名.Download</servlet-class>
...
</servlet>

そのサーブレットをどういうURLで呼び出したいですか?
それを記述するのがサーブレットマッピングです。
下記の記述だと、「http://host:ポート番号/コンテキストルート/dmaddr/Download」というURLで呼び出したいといっている感じがします。意図しているURLかどうか確認してみて下さい。
<servlet-mapping>
<servlet-name>download</servlet-name>
<url-pattern>/dmaddr/Download</url-pattern>
</servlet-mapping>

この回答への補足

ご回答ありがとうございます。
しかし、教えていただいた方法では同じエラーが出ました。
No.3さんのアドバイスは気になります。
eclipseを使っているためコンテクストが把握し辛いです。

補足日時:2006/09/28 23:52
    • good
    • 0

struts に限らずですが・・・servlet 一つにつき、<servlet> 一つです。



<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>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet>
<servlet-name>download</servlet-name>
<servlet-class>Download</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>

こんな感じかと。。。

ついでに init-param を毎回書くのが面倒であるならば、
context-param に変更した方が良いと思います。

この回答への補足

ありがとうございます。o(^-^)o
さっそくやってみました。
簡単な質問で申し訳ありません。

ただ、やってみたところ
やはり「The requested resource (/addr/download) is not available.」と言われました。addrはクラスファイル下のファイルで、Download.classが入っています。

web.xml
<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>
<load-on-startup>2</load-on-startup>
</servlet>


<servlet>
<servlet-name>download</servlet-name>
<servlet-class>Download</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>


<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>download</servlet-name>
<url-pattern>/dmaddr/Download</url-pattern>
</servlet-mapping>
----------------------------------------

.jsp
<form action=download method=GET>
<html:hidden property="type" value="csv" />
<input type="submit" value="CSV出力">
</form>

-----------------------------------------
struts-config.xml
<action-mappings>
<action path="/action1"
name="page1form"
type="dmaddr.Page1Action">

<forward name="back" path="/page1.jsp"/>
<forward name="success" path="/page2.jsp"/>
<forward name="csv" path="/download"/>
<forward name="fail1" path="/page3.jsp"/>
<forward name="fail2" path="/page4.jsp"/>
</action>

となっております。
struts-config.xmlに新しい記述が必要なのかなと思うのですが・・
<action path="/Download"
name="Download"
type="dmaddr.Download">
</action>
を追加してもうまくいきません。
よろしければ教えてください。

補足日時:2006/09/25 15:21
    • good
    • 0

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