【问题标题】:How to specify mime-mapping using servlet 3.0 java config?如何使用 servlet 3.0 java config 指定 mime 映射?
【发布时间】:2013-11-26 11:24:55
【问题描述】:

我正在使用 Servlet 3.0 并希望将现有的 web.xml 文件转换为 java 配置。配置 servlet/过滤器等似乎很简单。我不知道如何转换以下 mime 映射。谁能帮帮我?

<mime-mapping>
    <extension>xsd</extension>
    <mime-type>text/xml</mime-type>
</mime-mapping>

【问题讨论】:

    标签: java spring servlets web.xml servlet-3.0


    【解决方案1】:

    使用spring MVC,这个方法对我有用。

    在网络上下文中,添加以下内容:

    public class WebContext implements WebMvcConfigurer {
    
      @Override
      public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
        configurer.mediaType("xsd", MediaType.TEXT_XML);
      }
    }
    

    【讨论】:

      【解决方案2】:

      只需写一个Filter。例如用于 web.xml 中的 mime 映射:

      <mime-mapping>
          <extension>mht</extension>
          <mime-type>message/rfc822</mime-type>
      </mime-mapping>
      

      我们可以写一个过滤器:

      @WebFilter("*.mht")
      public class Rfc822Filter implements Filter {
      
          public void doFilter(ServletRequest req, ServletResponse resp,
                  FilterChain chain) throws IOException, ServletException {
              resp.setContentType("message/rfc822");
              chain.doFilter(req, resp);
          }
      
          ...
      }
      

      【讨论】:

        【解决方案3】:

        我在 Spring Boot 应用程序中遇到了这个问题。我的解决方案是创建一个实现org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer 的类,如下所示:

        @Configuration
        public class MyMimeMapper implements EmbeddedServletContainerCustomizer {
          @Override
          public void customize(ConfigurableEmbeddedServletContainer container) {
            MimeMappings mappings = new MimeMappings(MimeMappings.DEFAULT);
            mappings.add("xsd", "text/xml; charset=utf-8");
            container.setMimeMappings(mappings);
          }
        }
        

        【讨论】:

        • 有趣,我不知道这个类存在(org.springframework.boot.context.embedded.MimeMappings)。虽然我希望有一个不依赖于 Spring Boot 的解决方案,但这确实适用于现在。感谢分享。
        • 我没有深入研究这个,没有。
        • @Samuli Kärkkäinen 上面的代码是用于嵌入式 tomcat 的,那么外部 tomcat 呢?
        【解决方案4】:

        据我所知,您无法在 Java 配置中设置它们。您只能在 Web 应用程序的部署描述符或您的 serlvet 容器中执行此操作。

        ServletContext#getMimeType(String) 的 javadoc 提示了这一点

        MIME 类型由 servlet 的配置决定 容器,并且可以在 Web 应用程序部署中指定 描述符。

        【讨论】:

        • 这正是我结束的地方。我仍然希望有另一种方法。
        猜你喜欢
        • 2015-06-09
        • 1970-01-01
        • 1970-01-01
        • 2017-09-12
        • 2023-03-21
        • 2014-08-19
        • 2011-07-09
        • 2015-01-03
        • 2015-11-19
        相关资源
        最近更新 更多