我的servlet執行三項任務:服務器URL模式 - 顯示java.lang.NullPointerException在servlet上下文
當它收到消息「resourceupdate」商店所請求的資源(HTML頁面)爲對象sharedClient。
當它接收到異步get(由「t = UPDATE」指示的查詢字符串)時,將該對象sharedClient添加此請求掛起。
當它收到delivery_resource(由pathinfo myServlet/sharedsessionID指示 - 例如myServlet/8439jfndofsd93jcanjc)執行資源調度時。
這是我的web.xml:
<servlet>
<description></description>
<display-name>MyServlet</display-name>
<servlet-name>MyServlet</servlet-name>
<servlet-class>it.package.MyServlet.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/MyServlet/*</url-pattern>
</servlet-mapping>
我把所有的積極SharedClients這樣:
ConcurrentHashMap<String, SharedClient> hmClients = (ConcurrentHashMap<String, SharedClient>) this.getServletConfig().getServletContext().getAttribute("sharedClients");
我也得到了SharedClient在這樣一個特定的SharedSessionID:
SharedClient targetClient = hmClients.get(ssid);
現在的問題: 直到我做了一個resourceupdate servlet工作正常,b當我做一個delivery_resource(到類型爲myServlet/sharedsessionID的路徑)時,servlet無法獲得sharedClient引用,並且我得到一個空指針異常。
if (resourceUri!=null) {
String ssid = resourceUri.substring(1);
ConcurrentHashMap<String, SharedClient> hmClients = (ConcurrentHashMap<String, SharedClient>) this.getServletConfig().getServletContext().getAttribute("sharedClients");
if (hmClients.containsKey(ssid)) {
SharedClient targetClient = hmClients.get(ssid);
if (targetClient.getParticipantSession().containsKey(session)) {
IoUtils.copy(targetClient.streamSnapshot(), response.getOutputStream());
}
} else System.out.println("hmClient do not contains ssid"); //always in this branch
從此時間開始,異步獲取的長輪詢也沒有成功完成。
如果在更新之後,我沒有將delivery_resource傳遞給myServlet/sharedsessionID類型的路徑,那麼異步get將繼續正常運行。
感謝所有。