我的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将继续正常运行。
感谢所有。