如何在 web.xml 中配置 spring-boot servlet?

Posted

技术标签:

【中文标题】如何在 web.xml 中配置 spring-boot servlet?【英文标题】:How to configure spring-boot servlet like in web.xml? 【发布时间】:2014-04-18 20:36:27 【问题描述】:

我在 web.xml 中有一个简单的 servlet 配置:

<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.atmosphere.cpr.MeteorServlet</servlet-class>
    <init-param>
        <param-name>org.atmosphere.servlet</param-name>
        <param-value>org.springframework.web.servlet.DispatcherServlet</param-value>
    </init-param>
    <init-param>
        <param-name>contextClass</param-name>
        <param-value>
            org.springframework.web.context.support.AnnotationConfigWebApplicationContext
        </param-value>
    </init-param>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>net.org.selector.animals.config.ComponentConfiguration</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <async-supported>true</async-supported>
</servlet>

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

如何为 SpringBootServletInitializer 重写?

【问题讨论】:

不清楚您要做什么。如果您想要使用 Servlet 3.0 的完全相同的 Spring 应用程序,为什么要定义不同的 Servlet 类型(MeteorServlet 与 DispatcherServlet)?您在 web.xml 中加载的配置类不会在任何地方显式使用。您还扩展了SpringBootServletInitializer,但似乎没有覆盖关键的configure 方法。 对不起,也许是您误入歧途的代码示例。我需要配置 Meteor Servlet,如 web.xml 中所述 抱歉,没有关注。 web.xml 有一个DispatcherServlet。如果您想要另一种 servlet 作为默认 servlet,请使用答案中的代码,但使用不同的 servlet 类(尽管 bean 名称仍然必须是“DispatcherServlet”)。 啊,我明白了。我错过了流星 servlet 声明。有机会我会更新答案。 谢谢戴夫!你解决了我的问题。 【参考方案1】:

如果我从表面上看你的问题(你想要一个复制你现有应用程序的SpringBootServletInitializer),我猜它看起来像这样:

@Configuration
public class Restbucks extends SpringBootServletInitializer 

    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) 
        return builder.sources(Restbucks.class, ComponentConfiguration.class);
    

    @Bean
    public MeteorServlet dispatcherServlet() 
        return new MeteorServlet();
    

    @Bean
    public ServletRegistrationBean dispatcherServletRegistration() 
        ServletRegistrationBean registration = new ServletRegistrationBean(dispatcherServlet());
        Map<String,String> params = new HashMap<String,String>();
        params.put("org.atmosphere.servlet","org.springframework.web.servlet.DispatcherServlet");
        params.put("contextClass","org.springframework.web.context.support.AnnotationConfigWebApplicationContext");
        params.put("contextConfigLocation","net.org.selector.animals.config.ComponentConfiguration");
        registration.setInitParameters(params);
        return registration;
    


更多详情请参阅docs on converting an existing app。

但是,与使用 Atmosphere 相比,这些天您可能会更好地使用 Tomcat 和 Spring 中的本机 Websocket 支持(参见 websocket sample 和 guide 示例)。

【讨论】:

对于其他 url 映射,请使用 registration.addUrlMappings("/whatever/*", "/whatever2/*"); 我在研究如何为 Spring Boot servlet 定义过滤器列表时发现了这篇文章,因为尝试允许匿名访问 Spring Boot 应用程序中的命名 servlet 导致出现错误消息。你愿意发表评论吗?这是链接:***.com/questions/36489253/…

以上是关于如何在 web.xml 中配置 spring-boot servlet?的主要内容,如果未能解决你的问题,请参考以下文章

web.xml中如何设置配置文件的加载路径

web.xml中url-pattern有啥意义,servlet如何配置?

web.xml中如何设置配置文件的加载路径

在eclipse下建一个web工程中,xml配置文件应该放在哪个文件夹

SpringBootSpringBoot框架中如何向web.xml中添加配置(以配置DataSource的后台监控功能为例)

java web项目 web.xml中如何读取properties配置文件中的值?