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

簡単なフィルタを設定しようとしています。
web.xmlに<filter>タグを記載し、URLに
http://localhost:8080/Servlet/サーブレット名 
を指定すると404エラーになってしまいます。
<filter>タグを取り除けば、正常にサーブレットが表示されます。
明らかにweb.xmlの<filter>タグが問題なのですが、
問題をどう切り分けたらいいかもわからず、困っております。
スペルミス等も何度も確認したのですが・・・
どなたかアドバイスお願いします。

A 回答 (6件)

訂正です



<servlet-class>practice.filter.TestServlet</servlet-class>

<servlet-class>practice.filter.XXXXXXXXX</servlet-class>
          ↓
<filter-class>practice.filter.TestFilter</filter-class>

<filter-class>practice.filter.XXXXXXXXX</filter-class>
    • good
    • 0

<url-pattern>/test</url-pattern>を<url-pattern>/*</url-pattern>


としてみてください。

解決できない場合は、
■フィルタークラスが存在しない
<servlet-class>practice.filter.TestServlet</servlet-class>

<servlet-class>practice.filter.XXXXXXXXX</servlet-class>
のような絶対に存在しないクラスを指定し、現象が変わらなければ、
フィルタークラスが存在しないか、パスが通っていない。
あるいは、フィルタークラスがjavax.servlet.Filterをインプリメントしていない。
■デバッグする
デバッガは使えないのですか?
使えないのなら、doFilterにコンソール出力のログをいれて処理を追跡する。
    • good
    • 0

フィルタを設定しない場合は、どんな画面が表示されているのですか?


<filter>と<filter-mapping>タグを書かない場合のとこです。

この回答への補足

名前を入力するテキストボックスと送信ボタン、これだけが表示されています。

補足日時:2007/07/29 11:09
    • good
    • 0

そもそも、webアプリケーションは正常に起動してますか?


コンソールマネージャで確認してみてください。
あとは、ログ出力も確認されましたか?

この回答への補足

webアプリケーションは正常に起動していると思われます。
ログは\tomcat\logs\にあるログでしょうか?
特になにも吐き出されていないのですが・・・

補足日時:2007/07/27 13:05
    • good
    • 0

Java APIが2.3以降ですか?


ServletはFilterをインプリメントしていますか?
ServletはdoFilterメソッドをインプリメントしていますか?
web.xmlにfilter/filter-mappingタグを書くなら、servlet/servlet-mappingタグは消した方がよさげ
(大丈夫なはずなんだけど、念のために)

この回答への補足

>Java APIが2.3以降ですか?

APIのバージョンはどうやって調べるのでしょうか?
Googleってみたのですが、わかりませんでした。
教えていただけますでしょうか。

>ServletはFilterをインプリメントしていますか?
>ServletはdoFilterメソッドをインプリメントしていますか?

インプリメントしていますが、404エラーとなってしまっているので、
サーブレットまで到達していないと思われます。

>web.xmlにfilter/filter-mappingタグを書くなら、servlet/servlet-mappingタグは消した方がよさげ

servlet/servlet-mappingタグを消してみましたが、結果は同じ404エラーでした。

以上です。
宜しくお願いします。

補足日時:2007/07/27 11:56
    • good
    • 0

>

http://localhost:8080/Servlet/サーブレット名
「Servlet」と「サーブレット名」の意味は何ですか。
servletタグとfilterタグの内容を教えて下さい。

この回答への補足

>> ​http://localhost:8080/Servlet/​サーブレット名
>「Servlet」と「サーブレット名」の意味は何ですか。

わかりづらくてすみません。
localhost:8080/以降は、web.xmlに登録したサーブレット名のことです。(<servlet-mapping>の<url-pattern>に登録した名前です)
正確には、
http://localshot:8080/Servlet/test(以下参照)
Servletフォルダの/testサーブレットです。

>servletタグとfilterタグの内容を教えて下さい。
--------------------------------------------------------
<filter>
<filter-name>testfilter</filter-name>
<filter-class>practice.filter.TestFilter</filter-class>
<init-param>
<param-name>encode</param-name>
<param-value>Shift_JIS</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>testfilter</filter-name>
<url-pattern>/test</url-pattern>
</filter-mapping>

<servlet>
<servlet-name>testservlet</servlet-name>
<servlet-class>practice.filter.TestServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>testservlet</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
------------------------------------------------------------
どうぞ、宜しくお願いします。

補足日時:2007/07/27 09:08
    • good
    • 0

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