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 への特定のマッピングを行うにはどうすればよいですか? または「/」マッピングだけでウェルカム ファイル リストを再び機能させるにはどうすればよいですか?