Я пишу фильтр для Apache Tomcat, мне было интересно, есть ли способ получить mimetypes, помещенные в файл конфигурации файла /conf/web.xml, без явного чтения XML-файла. Возможно ли что-либо в библиотеках 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>
Я понял, что ОП хотел собрать их все в какую-то «карту» или что-то в этом роде. Но это действительно один из «лучших способов», о которых я говорил в своем комментарии к вопросу :) – BalusC
@BalusC: Да, я знаю, но я не хотел использовать конкретный код контейнера с отражением, и у меня нет нашел публичный API. Во всяком случае, я написал это просто для удовольствия :-) – palacsint
Мне нужна эта информация, чтобы проверить, имеет ли запрашиваемый ресурс известный тип mime для сервера, я просто не знал, что req.getServletContext(). GetMimeType() делает именно это ... Я использовал: URLConnection.getFileNameMap(). getContentTypeFor(), но я хотел что-то, что было специфичным для сервера ... Будет ли предыдущее делать то, что я после? –
- 1. Rails nil errors - любой способ их остановить?
- 2. Получить номер порта для Apache Tomcat
- 3. Symfony получить Mimetypes от Entity File Constraint
- 4. Любой способ получить значение checkbox
- 5. PHP разрешено почтовый MIMETYPES
- 6. Apache tomcat или apache ant?
- 7. Netbeans и apache tomcat
- 8. apache и tomcat получить удаленный ip
- 9. Apache Tomcat Catalina Журналы
- 10. Apache Tomcat WebApp freezes
- 11. Конфигурация Apache Tomcat - один сервер Apache и несколько сайтов Tomcat
- 12. Apache Tomcat: несколько webapps
- 13. Tomcat В Apache
- 14. Apache Tomcat Security
- 15. Любой способ указать предпочтительные типы mime?
- 16. Отсутствует каталог в Apache Tomcat
- 17. FireBreath multiple MIMETypes
- 18. django render_to_response mimetypes
- 19. Набор мульти Mimetypes
- 20. Что именно делает Apache Tomcat?
- 21. Apache CXF и tomcat
- 22. Проблемы с Apache TomCat
- 23. Любой способ программно получить FPS видео?
- 24. Требует ли Tomcat Apache httpd?
- 25. Любой способ получить группу HaxeFlixel для очистки?
- 26. Apache CXF Webservice без Tomcat
- 27. Tomcat Workers - Подключение Tomcat и Apache
- 28. Список Mimetypes, поддерживаемый контактами android
- 29. Рекомендуемый способ доступа к весенним бобам в Apache Tomcat webapp?
- 30. SSL На apache tomcat 6
Что именно вам нужна эта информация? Там могут быть более эффективные способы, чем взломать в некоторых контейнерах конкретный код, который сделает ваш Webapp не переносимым. – BalusC