我正在尝试直接在JSP页面中访问通过JMX管理的MBean属性。 我尝试过使用类似的东西
<jsp:useBean id="beanName" class="com.example.MBeanClass" scope="application" />
这没有错误,但是一旦我尝试<%= beanName.getPropert() %>
,就会打印出null。我转到JMX管理器页面并验证bean已初始化并正确设置了所有属性,因此我的理论是我的代码以某种方式创建了bean的新实例而不是利用现有的。
根据我读过的useBean文档,只要创建新bean,就会运行jsp:useBean标记之间的任何内容。所以我修改了我的代码:
<jsp:useBean id="beanName" class="com.example.MBeanClass" scope="application" />
<jsp:setProperty name="beanName" property="propertyName" value="12345" />
</jsp:useBean>
仍导致null
被打印。所以我的观点毕竟不是创建一个新的bean。那么为什么当JMX清楚地显示值被设置时它返回null?
我觉得我需要更深入地了解正在调试的内容,因为我正处于随意改变代码的过程中,看看是否有神奇的东西。我还使用了useBean中的scope属性和其他属性,但没有成功。
答案 0 :(得分:1)
JSP页面神奇地可以看到JMX bean。 JMX是一个单独的API(javax.management
)并在内部管理它的bean,并且通常没有理由尝试将两者结合在一起。
如果您需要在JSP页面中访问JMX bean,那么您需要在JSP中嵌入一个调用javax.management
API的Java scriptlet(请参阅this rather unpleasant example here,或者让您的servlet获取JMX bean通过相同的API,然后将JMX bean作为请求属性。然后你的JSP可以像任何其他的那样获取bean。
(如果没有servlet充当JSP的控制器,那么你真的应该这样做。)