2011-10-29 7 views
1

すべてのリクエストをマップするプロキシサーブレットで作業しています。 私は次のようにweb.xmlファイルを指定:Spring MVC - 静的リソースのHTTP GET要求がカスタムサーブレットによって処理される

<servlet> 
    <servlet-name>appServlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>appServlet</servlet-name> 
    <url-pattern>/admin/*</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>appServlet</servlet-name> 
    <url-pattern>/home</url-pattern> 
</servlet-mapping> 

<servlet> 
    <description>Servlet to proxy all requests.</description> 
    <display-name>ProxyServlet</display-name> 
    <servlet-name>ProxyServlet</servlet-name> 
    <servlet-class>com.epam.alpha.servlets.ProxyServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>ProxyServlet</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

<welcome-file-list> 
    <welcome-file>home</welcome-file> 
</welcome-file-list> 

この方法は、すべての要求は、ホーム・ページと管理ページ用に予約されている*//家及び/管理者を除いて、私のプロキシサーブレットによって処理されます。これはいいです!

ここでは、jspページでjavascriptとcssファイルを使用したいと考えています。それらはresourcesフォルダの下に置かれるので、それらは適切な場所にあります。

次が指定されたサーブレットのcontext.xmlで:

<resources mapping="/resources/**" location="/resources/" /> 

問題は、私のサーブレットは、静的なリソースへのすべてのGETリクエストをキャッチしていることです。リソースが見つかって使用されている場合、ProxyServletのサーブレットマッピングをコメントアウトすると、もちろんこの場合はプロキシサーブレットは機能しません。一方、jspからjavascriptファイルを参照しないと、プロキシサーブレットが動作します(静的リソースの要求は発生しません)。助けて!

+0

私はあなたの問題を理解していません。プロキシサーブレットで何をしたいですか?それは実際に何をしていますか? –

+0

URLにマップされるエイリアスがありますが、目的はlocalhost上で実行されるようにこれらのページにアクセスすることです。例: - エイリアス 'google'はhttp://www.google.comにマッピングされます。 http:// localhost:8080/ProxyServlet/googleと入力するとgoogle.comが表示されます。それが目標です。プロキシサーブレットは上記の要求を処理し、応答を読み取り、結果をブラウザに表示します。実質的にすべてのリクエストは、保守の目的で使用されるhomeやadminのようないくつかの予約されたエイリアスを除いて、作成したこのプロキシサーブレットによって処理される必要があります。 – cslacika

+0

jsファイルとcssファイルをSpringのリソースメカニズムで処理する必要がある場合、/ resourcesパスをSpringディスパッチャサーブレットにマップする必要があります。したがって、/ resources/*のマッピングをappServletに追加するとすべてが修正されるはずです。 –

答えて

0

私は春のコントローラを介してページを提供し、JSスクリプトは、同様の構成を使用してこのページでロードされていることができました:

  • ディスパッチャサーブレット
  • /にマップされたサーブレット(プロキシサーブレット)は

私は/ * dispatcへのパス/リソースをマップ

  • に持っていました

サーブレットのcontext.xml:

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.0.xsd 
     http://www.springframework.org/schema/mvc 
     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 

    <context:component-scan base-package="fr.free.jnizet.springtest"/> 
    <mvc:annotation-driven/> 
    <mvc:resources location="/resources/**" mapping="/resources"/> 
    <mvc:default-servlet-handler/> 
</beans> 

キーポイントは<mvc:default-servlet-handler/>要素である(他のマッピングに加えて)web.xmlの彼女のサーブレット

  • は、次の春のコンテキストファイルを使用します。この要素がなければ、Springは/ resources /内のJSファイルのマッピングを見つけません。

  • +0

    それは働いている!私はまだ全体の話を理解していない、なぜ私のプロキシサーブレットが写真から外れていても、Springがjsマッピングを見つけたのはとにかくだ。下は、これが問題を解決したことです!ありがとうございました! – cslacika

    +0

    私は春がそれを見つけられなかったと思います。 JSのパスが実際のパスであるため、デフォルトのサーブレットがそれを検出しました。プロキシサーブレット「すべてにマップされた」マッピングを無効にするには、春のリソースマッピングのみが必要です。 –

    +0

    ああ、私は理解したと思う!再度、感謝します!! :) – cslacika

    関連する問題