【问题标题】:Spring Boot ServletRegistrationBean and Deployment to External TomcatSpring Boot ServletRegistrationBean 和部署到外部 Tomcat
【发布时间】:2016-12-29 04:57:33
【问题描述】:

最近我发现可以使用 Spring Boot 附带的 ServletRegistrationBean 将我自己的 servlet bean 添加到 MVC。但文档似乎表明这仅适用于嵌入式 servlet 容器:http://docs.spring.io/spring-boot/docs/current/reference/html/howto-embedded-servlet-containers.html 我的简单问题是: ServletRegistrationBean 是否可以仅用于嵌入式容器,或者也可以在将战争部署到外部 Tomcat 时使用?

【问题讨论】:

    标签: spring spring-mvc tomcat spring-boot servlet-3.0


    【解决方案1】:

    ServletRegistrationBean 也可以与外部 Tomcat 一起使用,事实上,当您将 Boot 应用程序部署到 Tomcat(或任何其他 Servlet 容器)时,这正是 Boot 注册自己的 DispatcherServlet 的方式。

    【讨论】:

      【解决方案2】:

      我在将 Spring Boot War 文件部署到 weblogic 时遇到了类似的问题。 Servlet 能够在 Servlet 3.x Web 容器的支持下注册。但是 weblogic 正在尝试创建 servlet bean 的新 servlet 实例。

      @Bean
      @ConditionalOnMissingBean
      public GraphQLServlet graphQLServlet(GraphQLSchemaProvider schemaProvider, ExecutionStrategyProvider executionStrategyProvider) {
          return new SimpleGraphQLServlet(schemaProvider, executionStrategyProvider, objectMapperConfigurer, listeners, instrumentation, errorHandler, contextBuilder, graphQLRootObjectBuilder);
      }
      
      @Bean
      ServletRegistrationBean graphQLServletRegistrationBean(GraphQLServlet servlet) {
          return new ServletRegistrationBean(servlet, graphQLServletProperties.getServletMapping());
      }
      

      weblogic 会抛出如下异常:

      <Oct 2, 2017 4:08:31 PM SGT> <Error> <HTTP> <BEA-101125> <[ServletContext@344074943[app:cpapps-gra3.1]] Error occurred while instantiating servlet: "simpleGraphQLServlet".
      java.lang.InstantiationException: graphql.servlet.SimpleGraphQLServlet
              at java.lang.Class.newInstance(Class.java:427)
              at weblogic.servlet.internal.WebComponentContributor.getNewInstance(WebComponentContributo
              at weblogic.servlet.internal.WebComponentContributor.getNewInstance(WebComponentContributo
              at weblogic.servlet.internal.WebComponentContributor.createServletInstance(WebComponentCon
              at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.newServletInstanceIfNece
              Truncated. see log file for complete stacktrace
      Caused By: java.lang.NoSuchMethodException: graphql.servlet.SimpleGraphQLServlet.<init>()
              at java.lang.Class.getConstructor0(Class.java:3082)
              at java.lang.Class.newInstance(Class.java:412)
              at weblogic.servlet.internal.WebComponentContributor.getNewInstance(WebComponentContributo
              at weblogic.servlet.internal.WebComponentContributor.getNewInstance(WebComponentContributo
              at weblogic.servlet.internal.WebComponentContributor.createServletInstance(WebComponentCon
              Truncated. see log file for complete stacktrace
      >
      

      好像web请求直接去weblogic而不是spring dispatcher servlet。

      但是很难看到相同的war文件可以在tomcat中部署和运行而没有任何错误。

      【讨论】:

        猜你喜欢
        • 2016-03-28
        • 2014-09-04
        • 2015-03-10
        • 2018-12-05
        • 2018-06-21
        • 1970-01-01
        • 1970-01-01
        • 2017-11-23
        • 2016-02-13
        相关资源
        最近更新 更多