失礼致します。
初歩的なことですが質問させてください。
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ではサーブレットの追加は出来ないのでしょうか?ご指摘お願いします。
No.1
- 回答日時:
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>
を追加してもうまくいきません。
よろしければ教えてください。
No.2
- 回答日時:
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を使っているためコンテクストが把握し辛いです。
No.3ベストアンサー
- 回答日時:
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下に移動させるべきなのでしょうか?
No.4
- 回答日時:
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下に変えたほうが良いのでしょうか?
皆さんのお話を聞いているとそんな気がしてきました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- その他(Microsoft Office) Microsoft Edgeの「ニュースと関心事項」についてお聞きします。 3 2023/05/22 12:08
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Tomcatでサーブレットを動かそ...
-
サーバーで実行できる?
-
tomcatとapacheの連携
-
JSPからServletへの遷移
-
Eclipseにおけるサーブレット作...
-
servletでHTTPステータス404エ...
-
サーブレットが実行できない
-
足し算アプリ
-
DB接続しようと思ったら下記の...
-
Eclipseで、プロジェクト名のと...
-
html上で、バッチやexeファイル...
-
Eclipseのアンインストールの仕方
-
Eclipse(JAVA)のデバッグで他...
-
classファイルについて
-
javaクラスファイルをEclipseで...
-
JSPのクラスをコンパイルできな...
-
正しいURL指定しているにもかか...
-
「%CATALINA_HOME%」とはどこの...
-
「ワークスペースをビルド中」...
-
SVFの設定について:クラスパス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JSPからServletへの遷移
-
servlet (resin) について
-
【Servletのエラーについて教え...
-
サーブレットが起動しない
-
「javax.servlet.ServletExcept...
-
servletでHTTPステータス404エ...
-
eclipse servlet 404対処方法
-
JSPからサーブレットを呼び出す...
-
[Servlet]ページ表示に関して
-
サーブレットが実行できない
-
resin.confの設定でご質問です
-
Eclipseにおけるサーブレット作...
-
WEB開発をはじめたばかりの初心...
-
eclipse でjspからJavaを実行す...
-
Tomcatでサーブレットを動かそ...
-
HTTPステータス 404 - /servlet...
-
Tomcat起動時にエラーが発生し...
-
サーブレット フィルタ
-
list<クラス名> とは何でしょう...
-
テーブルにレコードを追加する...
おすすめ情報