如何使用servlet 3.0 java配置指定mime-mapping?

时间:2013-11-13 17:53:44

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

我正在使用Servlet 3.0并希望将现有的web.xml文件转换为java config。配置servlet /过滤器等似乎非常直接。我无法弄清楚如何转换以下mime-mapping。任何人都可以帮助我吗?

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

4 个答案:

答案 0 :(得分:6)

我在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);
  }
}

答案 1 :(得分:3)

只需写一个Filter。例如对于web.xml中的mime-mapping:

<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);
    }

    ...
}

答案 2 :(得分:1)

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

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

public class WebContext implements WebMvcConfigurer {

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

答案 3 :(得分:0)

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

ServletContext#getMimeType(String)的javadoc提示

  

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