我正在努力将Spring 4的新websocket功能添加到现有的企业Spring Web应用程序中。
大多数示例都基于使用Spring的注释配置,更重要的是Spring Boot。我的应用程序既不使用也没有时间/兴趣转换它。
通过大量研究,我已经解决了配置应用程序的大多数问题与示例略有不同(XML配置和部署到Eclipse中的tomcat服务器)。
我现在面临的障碍是DispatcherServlet的映射。为了让websockets工作,我不得不从看起来像这样的东西:
<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" />
现在针对真正的问题,使用根映射&#34; /&#34;似乎您可以在web.xml中提供的欢迎文件列表被完全忽略。我在web.xml的底部使用以下列表:
<welcome-file-list>
<welcome-file>index.htm</welcome-file>
</welcome-file-list>
我们的应用程序中有许多URL路径依赖于无类型的&#34; index.htm&#34;从空URL路径加载,例如https://somesite.com/member/account/
我怎样才能对获取我的websocket通信的DispatcherServlet进行特定映射,或者只使用&#34; /&#34;再次使用欢迎文件列表。映射吗
答案 0 :(得分:3)
我找到了一个似乎运作良好的解决方案。我在想我的旧servlet映射和新的&#34; /&#34;映射为互斥,但情况并非如此。我只是添加了&#34; /&#34;映射到我现有的,现在DispatcherServlet似乎正在服务JSP,JSON和websocket请求没问题,包括欢迎文件URL路径。
答案 1 :(得分:1)
您可以为此注册一个viewController:
@Configuration
public class YourWebConfig extends WebMvcConfigurerAdapter {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("forward:/index.html");
}
}