2015-04-22 84 views
1

我試圖直接在JSP頁面中訪問通過JMX管理的MBean屬性。 我一直在使用這樣的事情在JSP中獲取MBean屬性

<jsp:useBean id="beanName" class="com.example.MBeanClass" scope="application" /> 

這給了沒有錯誤嘗試,但一旦我試過<%= beanName.getPropert() %>,印空。我去了JMX管理頁面,並驗證了豆被初始化並且有正確設置的所有屬性,所以我的理論是,我的代碼以某種方式創建bean的新實例,而不是利用現有的一個。

按照useBean的文檔我看了,在jsp之間的任何東西:每當只創建一個新的bean 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屬性和其他屬性,但都沒有成功。

回答

1

JMX bean對於JSP頁面來說是奇蹟般可見的。 JMX是一個獨立的API(javax.management),並在內部管理它的bean,通常沒有什麼理由嘗試將它們結合在一起。

如果您需要訪問JSP頁面中的JMX bean,那麼您需要在您的JSP中嵌入一個Java scriptlet,以調用javax.management API(請參閱this rather unpleasant example here,或讓您的servlet通過相同的API獲取JMX bean ,然後將JMX bean粘貼爲一個請求屬性,然後您的JSP可以像其他任何其他bean一樣獲取該Bean。

(如果您的JSP沒有充當控制器的servlet,那麼您確實應該這樣做)。