Mik*_* S. 3 tomcat java-ee servlet-filters mime-types
我正在为Apache Tomcat编写一个过滤器,我想知道是否有办法获取放置在/conf/web.xml文件配置文件中的mimetypes而不显式读取xml文件.Apache Tomcat库中是否有可用的东西?
pal*_*int 11
来自tomcat/conf/web.xml:
<!-- ======================== Introduction ============================== -->
<!-- This document defines default values for *all* web applications -->
<!-- loaded into this instance of Tomcat. As each application is -->
<!-- deployed, this file is processed, followed by the -->
<!-- "/WEB-INF/web.xml" deployment descriptor from your own -->
<!-- applications. -->
Run Code Online (Sandbox Code Playgroud)
所以它们可以通过ServletContext.getMimeType方法获得:
@Override
protected void doGet(final HttpServletRequest req,
final HttpServletResponse resp) throws ServletException, IOException {
final ServletContext servletContext = req.getServletContext();
final String mimeType = servletContext.getMimeType("filename.txt");
...
}
Run Code Online (Sandbox Code Playgroud)
我还没有找到任何其他公共API来获取整个MIME类型映射.如果你真的需要它,你可以通过这个丑陋的黑客获得完整的扩展列表:
import java.util.Arrays;
import java.lang.reflect.Field;
import org.apache.catalina.connector.Request;
import org.apache.catalina.connector.RequestFacade;
import org.apache.catalina.core.StandardContext;
...
// ugly reflection hack - do NOT use
final RequestFacade tomcatRequestFacade = (RequestFacade) req;
final Class<? extends RequestFacade> requestFacadeClass =
tomcatRequestFacade.getClass();
try {
final Field field = requestFacadeClass.getDeclaredField("request");
field.setAccessible(true);
final Request tomcatRequest = (Request) field.get(tomcatRequestFacade);
final StandardContext standardContext =
(StandardContext) tomcatRequest.getContext();
final String[] mappings = standardContext.findMimeMappings();
logger.info("mapping list: {}", Arrays.asList(mappings));
} catch (final Exception e) {
logger.error("", e);
}
Run Code Online (Sandbox Code Playgroud)
它适用于Tomcat 7.0.21.由于它使用Tomcat的内部类,因此无法保证它可以与其他Tomcat版本一起使用.
请注意,您仍然需要调用ServletContext.getMimeType以获取MIME类型.
所需的maven依赖:
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-catalina</artifactId>
<version>7.0.21</version>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2755 次 |
| 最近记录: |