我没有找到在我想在部署描述符文件中声明的上下文参数名称中使用双引号字符的正确语法。
这是 web.xml 中的参数定义:
<context-param>
<param-name>Catalina:type=GlobalRequestProcessor,name=\"http-nio-8080\"</param-name>
<param-value>requestCount</param-value>
</context-param>
以下 JSP 代码:
<%@ page import="java.util.*,javax.management.*"%>
JMX testing
<%
Enumeration ipn = application.getInitParameterNames();
String ipnName = "";
while(ipn.hasMoreElements()) {
ipnName = (String)ipn.nextElement();
ObjectName on = new ObjectName( ipnName );
}
%>
触发此异常:
HTTP 状态 500 – 内部服务器错误h1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} h2 {font-family:Tahoma,Arial,sans- serif;color:white;background-color:#525D76;font-size:16px;} h3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px ;} body {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} b {font-family:Tahoma,Arial,sans-serif;color:white;background-color:# 525D76;} p {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;} a {color:black;} a.name {color:black;} .line {高度:1px;背景颜色:#525D76;边框:无;}
HTTP 状态 500 – 内部服务器错误
类型异常报告
消息 javax.servlet.ServletException: javax.management.MalformedObjectNameException: Invalid character '"' in value part of property
说明 服务器遇到了阻止它完成请求的意外情况。
例外
org.apache.jasper.JasperException: javax.servlet.ServletException: javax.management.MalformedObjectNameException:无效字符 '"' 在属性的值部分 org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:598) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:499) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330) javax.servlet.http.HttpServlet.service(HttpServlet.java:742) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)根本原因
javax.servlet.ServletException: javax.management.MalformedObjectNameException:无效字符 '"' 在属性的值部分 org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:909) org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:838) org.apache.jsp.ko_jsp._jspService(ko_jsp.java:138) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:742) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:476) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330) javax.servlet.http.HttpServlet.service(HttpServlet.java:742) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)根本原因
javax.management.MalformedObjectNameException: 属性值部分中的无效字符 '"' java.management/javax.management.ObjectName.construct(ObjectName.java:621) java.management/javax.management.ObjectName.<init>(ObjectName.java:1406) org.apache.jsp.ko_jsp._jspService(ko_jsp.java:122) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:742) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:476) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330) javax.servlet.http.HttpServlet.service(HttpServlet.java:742) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
我尝试更改JASPER strictQuoteEscaping值和不同的语法,但没有效果。我正在使用 Java 9 u181 运行 Tomcat 8.5.40
顺便说一下,直接调用这个 JMX 效果很好:
<%@ page import="java.util.*,javax.management.*"%>
JMX testing
<%
ObjectName on = new ObjectName("Catalina:type=GlobalRequestProcessor,name=\"http-nio-8080\"");
%>
我错过了什么明显的东西吗?