我正在爲Apache Tomcat編寫一個過濾器,我想知道是否有一種方法可以在不顯式讀取xml文件的情況下獲取放置在/conf/web.xml文件配置文件中的mimetypes。也許有什麼可用的Apache Tomcat庫?Apache Tomcat MimeTypes - 以任何方式獲取它們?
回答
從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. -->
所以他們都可以通過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");
...
}
我還沒有發現任何其他公共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);
}
它的工作原理在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>
我明白,OP想把它們全部放入一些'Map'或其他東西。但這確實是我在我對這個問題的評論中談到的「更好的方法」之一:) – BalusC
@BalusC:是的,我知道,但我不想使用反射的容器特定代碼,我沒有發現任何公共API。無論如何,我寫它只是爲了好玩:-) – palacsint
我需要此信息以檢查請求的資源是否具有已知的MIME類型到服務器,我只是不知道req.getServletContext()。getMimeType()這只是... 我正在使用: URLConnection.getFileNameMap()。getContentTypeFor(),但我想要的是服務器特定的東西... 以前會做我以後做什麼? –
- 1. 以任何方式獲取BindingResult for @RequestParam?
- 2. Python ftplib - 以任何方式關閉它?
- 3. 在webapp中以編程方式獲取tomcat日誌文件
- 4. 以編程方式獲取Tomcat的「appBase」目錄?
- 5. 以編程方式創建複選框,並使用tkinter獲取它們的值
- 6. 獲取端口號的Apache Tomcat
- 7. 在網頁上動畫GIF - 以任何方式重新啓動它們?
- 8. 任何方式來獲取JavaScript以外的文本?
- 9. 以任何方式獲取Express用戶的續集鉤子?
- 10. TextArea - 以任何方式獲取所有文本?
- 11. 以任何方式編程獲取視頻的FPS?
- 12. scala - 以編程方式從綱要獲取類(Apache avro)
- 13. 以編程方式從架構中獲取類(Apache avro)
- 14. 以所需格式從Apache Solr中提取值。任何更好的方法
- 15. 如何在Android中迭代控件以獲取它們的值在循環中獲取它們的值
- 16. 任何方式來從數據庫獲取流式讀取?
- 17. RESTful API的Mimetypes
- 18. 獲取它們使用jQuery
- 19. Xcode 8的最新AppIcon的大小以及如何以更簡單的方式獲取它們?
- 20. 如何以編程方式獲取android小部件大小(如果它們以百分比表示)
- 21. 如何以編程方式獲取layout_weight?
- 22. Apache Tomcat問題
- 23. DOMDocument xmlns屬性 - 如何獲取它們?
- 24. 如何從函數獲取值並以html格式打印它們
- 25. Apache Certifcate for Apache/Tomcat
- 26. 從mysql獲取時間並以任何我們想要的格式回顯它 - php
- 27. 我們可以使用請求方法「POST」獲取apache中的流狀態nifi
- 28. tomcat獲取所有信任證書
- 29. 獲取插件信息以及如何更新它們?
- 30. Rails有2個返回值的方法 - 如何獲取它們?
正是你需要什麼信息呢?在黑客中使用一些容器特定的代碼可能會有更好的方式,這會讓你的webapp變得不適用。 – BalusC