Spring 4 DispatcherServlet与WebSocket的映射

Spring 4 DispatcherServlet与WebSocket的映射,websocket,web.xml,spring-4,welcome-file,Websocket,Web.xml,Spring 4,Welcome File,我正在将Spring4的新websocket功能添加到现有的企业SpringWeb应用程序中 这里的大多数示例都基于使用Spring的注释配置,更重要的是Spring引导。我的应用程序两者都不使用,而且根本没有时间/兴趣将其转换为这样做 通过大量的研究,我已经解决了大多数配置应用程序的问题,这些问题与Eclipse中的示例XML配置和部署到tomcat服务器略有不同 我现在面临的障碍是DispatcherServlet的地图。为了让WebSocket正常工作,我不得不从类似这样的东西开始: &l

我正在将Spring4的新websocket功能添加到现有的企业SpringWeb应用程序中

这里的大多数示例都基于使用Spring的注释配置,更重要的是Spring引导。我的应用程序两者都不使用,而且根本没有时间/兴趣将其转换为这样做

通过大量的研究,我已经解决了大多数配置应用程序的问题,这些问题与Eclipse中的示例XML配置和部署到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>
看起来像这样的东西:

<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底部的以下列表:

例如,我们的应用程序中有几十个URL路径依赖于从空URL路径加载的非类型化index.htm


如何将特定映射到拾取我的websocket通信的DispatcherServlet,或仅使用/mapping使欢迎文件列表再次工作?

您可以为此注册viewController:

@Configuration
public class YourWebConfig extends WebMvcConfigurerAdapter {

  @Override
  public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/").setViewName("forward:/index.html");
  }
}

您可以为此注册viewController:

@Configuration
public class YourWebConfig extends WebMvcConfigurerAdapter {

  @Override
  public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/").setViewName("forward:/index.html");
  }
}

我找到了一个似乎很有效的解决方案。我认为旧的servlet映射和新的/映射是相互排斥的,但事实并非如此。我只是简单地将/mapping添加到现有的文件中,现在DispatcherServlet似乎可以为JSP、JSON和websocket请求提供服务,包括欢迎文件URL路径

我找到了一个似乎很有效的解决方案。我认为旧的servlet映射和新的/映射是相互排斥的,但事实并非如此。我只是简单地将/mapping添加到现有的文件中,现在DispatcherServlet似乎可以为JSP、JSON和websocket请求提供服务,包括欢迎文件URL路径

这是一个新颖的想法,适用于根URL,但我还必须为依赖欢迎文件的几十个其他URL路径添加类似的映射。例如,还需要这是一个新颖的想法,对于根URL来说效果很好,但我还必须为依赖欢迎文件的几十个其他URL路径添加类似的映射。例如,还需要