2

Spring 4 の新しい websocket 機能を既存のエンタープライズ Spring Web アプリケーションに追加する作業を行っています。

このための例のほとんどは、Spring のアノテーション構成、さらに重要なことに Spring Boot の使用に基づいています。私のアプリケーションはどちらも使用しておらず、そのように変換する時間/関心はありません。

一連の調査により、サンプルとは少し異なるアプリケーションの構成に関する問題のほとんどを回避しました (XML 構成と Eclipse での tomcat サーバーへのデプロイ)。

私が今直面している障害は、DispatcherServlet のマッピングです。WebSocket を機能させるために、次のようなものから移動する必要がありました。

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/mvc-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.htm</url-pattern>
    <url-pattern>*.json</url-pattern>
    <url-pattern>*.tpl</url-pattern>
    <!-- REST web services location -->
    <url-pattern>/api/*</url-pattern>
    <url-pattern>/gadget/*</url-pattern>
    <url-pattern>/rr/*</url-pattern>
    <url-pattern>/public/*</url-pattern>
</servlet-mapping>

このようなものに:

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>/WEB-INF/mvc-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <async-supported>true</async-supported>
</servlet>

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

DispatcherServlet にすべての WebSocket 通信を取得させる他の方法を見つけることができませんでした。しかし、それはほとんど問題ありません。静的リソースを引き続き提供できるように、コンテキスト XML に以下を追加しました。

<mvc:resources mapping="/resources/**" location="/resources/" />
<mvc:resources mapping="/**/favicon.ico" location="/favicon.ico" />

実際の問題として、ルート マッピング "/" を使用すると、web.xml で提供できるウェルカム ファイル リストが完全に無視されているようです。web.xml の下部にある次のリストを使用しています。

<welcome-file-list>
    <welcome-file>index.htm</welcome-file>
</welcome-file-list>

私たちのアプリケーションには、空の URL パス (例: https://somesite.com/member/account/ ) から読み込まれる型指定されていない "index.htm" に依存する多数の URL パスがあります。

Websocket 通信を取得する DispatcherServlet への特定のマッピングを行うにはどうすればよいですか? または「/」マッピングだけでウェルカム ファイル リストを再び機能させるにはどうすればよいですか?

4

2 に答える 2