2011-05-26 27 views
1

我有幾個jsp頁面,其中都有一個javabean,其中scope =「application」。第一個被調用的頁面實例化對象(我們稱它爲obj1),然後所有頁面從中共享(很棒!)。如何在servlet中訪問具有應用程序範圍的javabean

不過,我也有一些servlet映射到該類。每當這些調用中的一個被調用時,該類的第二個實例就被實例化(稱爲這個obj2)。使用特定servlet映射的更多調用由obj2提供服務。

怎樣才能Tomcat使用OBJ1處理servlet映射電話?

+0

我想我應該提到(雖然我暗示)我正在使用Tomcat。我正在Eclipse中開發。 – 2011-05-26 00:32:09

+0

我不確定要理解,您是否想要使用類作爲servlet,並同時作爲應用程序作用域bean使用? – svachon 2011-05-26 00:44:06

+0

@svachon,是的,我希望這個類充當一個servlet和一個應用程序作用域bean。這個類的行爲就像一種數據存儲庫。頁面可以從中獲取數據,並且用servlet形式傳遞給該類的用戶反饋也需要存儲在那裏。 – 2011-05-26 16:23:27

回答

0

我認爲你將不得不發表您的web.xml文件的部分解決這項問題,但如果你是通過定義得到同一個bean的兩個實例在同一應用程序那麼它是不是應用程序作用域。

你能告訴我們你的servlet映射參考是什麼樣子?我懷疑它們是以上下文不同的方式被調用的,因此容器不會將這兩個引用看作是在同一個應用程序中。它或者是這個bean的範圍沒有被正確聲明。

+0

分兩部分... <?xml version =「1.0」encoding =「UTF-8」?> MyApp index.jsp 2011-05-26 16:27:35

+0

\t \t FeedbackAcceptor \t \t app.FeedbackAcceptor \t \t \t \t \t FeedbackAcceptor \t \t /反饋 \t 2011-05-26 16:27:41

+0

對不起,亂七八糟的,我不知道怎麼弄它在這個網站上格式化。 – 2011-05-26 16:27:53

0

這個問題不是很清楚。如果你的問題是

如何使tomcat成爲servlet的應用程序創建實例。這是答案!

沒有應用程序不能告訴容器使用一些應用程序創建的實例作爲servlet。容器將創建對象並自行銷燬。

2

你需要一個ServletContextListener創建它。

@WebListener 
public class Config implements ServletContextListener { 

    @Override 
    public void contextInitialized(ServletContextEvent event) { 
     event.getServletContext().setAttribute("data", new Data()); 
    } 

    // ... 
} 

這樣你就可以抓住它在每一個servlet的如下

Data data = (Data) getServletContext().getAttribute("data"); 
// ... 

,並在每個JSP訪問如下

${data} 

注意,你需要老式<jsp:useBean>這個標籤。

0

基於您的評論,你的做法是錯誤的,Servlet都不做用作在應用程序中的bean。 Sevlet充當mvc pradigm中的控制器,並且您的應用程序bean是模型的一部分。所以你將你的控制器與你的模型耦合不好。此外,你正在嘗試做的只是不如你所見。請參閱BalusC的正確實施答案。

相關問題