Вам не нужно экранировать символы "
, если они находятся между тегами. В основном строка между тегами <param-name>
:
<param-name>Catalina:type=GlobalRequestProcessor,name=\"http-nio-8080\"</param-name>
равно строке (обратите внимание на три обратных слеша):
Catalina:type=GlobalRequestProcessor,name=\\\"http-nio-8080\\\"
Таким образом, при указании имени объекта в web.xml, просто сделайте это так, как вы написали бы это на бумаге (т.е. без обратной косой черты):
<param-name>Catalina:type=GlobalRequestProcessor,name="http-nio-8080"</param-name>
ОБНОВЛЕНИЕ (о втором выпуске из комментариев)
Это не работает, на этот раз исключение
org.apache.jasper.JasperException: javax.servlet.ServletException:
javax.management.MalformedObjectNameException: ключевые свойства не могут
быть пустым Правильно ли вы определили предложение на Tomcat с JMX?
настроен и включен?
key properties
- это пары ключ-значение после двоеточия. В вашем примере у вас есть две клавиши:
- Тип = GlobalRequestProcessor
- имя = "HTTP-NiO-8080"
Таким образом, единственное объяснение состоит в том, что это исключение вызвано либо потому, что:
- с использованием другого конструктора (маловероятно, что ваш код в вопросе использует правильный)
- У вас больше параметров контекста, чем показано, и некоторые из них не имеют ничего после
:
. Обратите внимание, что вы перебираете все контекстные параметры, и некоторые из них могут не являться именами объектов: while(ipn.hasMoreElements())
Вы можете найти контекстный параметр, который вызывает проблему, просто напечатав его имя:
<%
Enumeration ipn = application.getInitParameterNames();
String ipnName;
while (ipn.hasMoreElements()) {
ipnName = (String) ipn.nextElement();
try {
ObjectName on = new ObjectName(ipnName);
out.println("<br>Good param: " + ipnName);
}catch (Exception e){
out.println("<br>Bad param: " + ipnName);
}
}
%>