2009-04-29 6 views
5

基本的には、パスに関係なく、すべての着信要求を1つのサーブレットで処理します。私は自分のweb.xmlファイルを設定するためのアクセス権を共有ホスティング環境に置いています。すべての着信要求を1つのサーブレットが処理するようにweb.xml(Tomcat 5)を構成しますか?

私はweb.xmlに以下を設定しているが、それはTomcat 5の上では動作しません:

www.mydomain.com/anypath1/anypath2... 
www.mydomain.com/anypath1 

<?xml version="1.0" encoding="UTF-8"?> 
<web-app id="WebApp_ID" version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation= 
     "http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
    <display-name>Redirect</display-name> 
    <servlet> 
     <display-name>Redirect</display-name> 
     <servlet-name>Redirect</servlet-name> 
     <servlet-class>com.Redirect</servlet-class> 
     <init-param> 
      <param-name>host</param-name> 
      <param-value>www.myredirectdomain.com</param-value> 
     </init-param> 
     <init-param> 
      <param-name>redirect-type</param-name> 
      <param-value>301</param-value> 
     </init-param> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Redirect</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 
</web-app> 

上記のようなパス内のディレクトリから始まる何のために働いていました

しかし、のために動作しませんでした:

www.mydomain.com/ or 
www.mydomain.com 

私はまた、次のサーブレットマッピングを試してみました:

<servlet-mapping> 
    <servlet-name>Redirect</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

と同じ結果です。どちらもうまくいきません...誰でも何か提案がありますか?

答えて

-1

あなたは

<url-pattern>*</url-pattern> 

を試してみましたか?

+1

いいえ、私は試してみましょうが、それが法的な構文であるかどうかはわかりません。 –

0

Pattern/*は、間違いなくリダイレ​​クトサーブレットを呼び出します。サーブレットをデバッグして、そのURLのリクエストを受信したかどうかを確認しましたか?あなたが何を意味するのはうまくいかなかったのですか?何かエラーや何が起こったのですか?

+0

リダイレクトサーブレットは、少なくともディレクトリを含むリクエストのみを受信しました。ドメインに直接移動した場合、つまりwww.mydomain.comまたはwww.mydomain.com/の場合、リダイレクトサーブレットは呼び出されませんでした。 リダイレクトサーブレットは意図したとおりに動作します。私が得るエラーは403禁止です。しかし、index.jspファイルをルートに置くと、エラーは発生しません。 –

+0

インデックスページを使用しない場合は、を使用します。 –

+0

あなたの質問を今編集しました。 web.xmlを設定したWebアプリケーションのコンテキスト名や、tomcatのルートコンテキストがweb.xmlのコンテキスト名を持っていませんか?私はそれがうまくいくとは思っていません。 welcome.file-listにindex.jspを定義し、jspでその要求をサーブレットにリダイレクトすることができます。 –

1

<url-pattern>/*</url-pattern>が有効です。 Webアプリケーションをルートコンテキストでデプロイする必要があります。デフォルトでは、tomcatはROOTという名前のWebアプリケーションを使用します。しかし、それを変更してserver.xml内の別のWebアプリケーションを探すことができます。

もう1つのアプローチは、ServletFilterを作成して作業を行い、同じ方法でマップすることです。各アプローチ(サーブレットとサーブレットフィルタ)には長所と短所があります。しかし、あなたの例からは、すべてのものを別のサイトに送るだけなので、どちらかがうまくいくように見えます。

4

Tomcat 5はServlet 2.4仕様を実装しています。それはここからダウンロードできます: JCP Servlet 2.4 Spec

86 - SRV.11.2では、サーブレットのマッピングを指定する方法について説明しています。あなたが正しくしようとしていることを理解していれば、あなたは単一のサーブレットを使ってサーバーへのあらゆる要求(パスに関係なく)を傍受しようとしています。そのためには、Tomcatの場合はWebアプリケーションをデフォルトコンテキスト( "ROOT")にマウントし、web.xmlのデフォルトサーブレットにサーブレットをマップする必要があります。 web.xml内のマッピングが正しい。

<servlet-mapping> 
    <servlet-name>Redirect</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

私は、あなたが持つ問題はROOTコンテキストにあると思います。 www.mydomain.com/とwww.mydomain.comにアクセスすると、何が表示されますか?あなたの共有ホスティング環境があなた自身のTomcat設定への完全なアクセスを提供するのであれば言及しませんが、あなたが$ TOMCAT5_HOME/confディレクトリにアクセスして変更することができるなら、あなたのためにいくつかの方法があります。

< Context path="" debug="0" docBase="your-app"> 

$ TOMCAT5_HOME/confに/ server.xmlに:

おそらく最もクリーンな方法は、以下を追加することです。これはあなたのアプリケーションが "your-app.war"と仮定しています。

これが役に立ちます。

+2

Context path = ""またはpath = "/"の場合は重要ですか?私は過去に "/"と定義されているのを見ました。 –

関連する問題