Servlets Servlet url模式-Servlet上下文中的java.lang.NullPointerException
我的servlet执行三项任务: 当它收到消息“resourceupdate”时,将请求的资源(HTML页面)存储到对象sharedClient 当它接收到异步get(由“t=UPDATE”指示的querystring)时,会将对象sharedClient添加到此请求挂起 当它接收到传递时,资源(由pathinfo myServlet/sharedsessionID指示-例如myServlet/8439jfndofsd93jcanjc)执行资源的分派 这是我的Web.xml:Servlets Servlet url模式-Servlet上下文中的java.lang.NullPointerException,servlets,asynchronous,servletconfig,Servlets,Asynchronous,Servletconfig,我的servlet执行三项任务: 当它收到消息“resourceupdate”时,将请求的资源(HTML页面)存储到对象sharedClient 当它接收到异步get(由“t=UPDATE”指示的querystring)时,会将对象sharedClient添加到此请求挂起 当它接收到传递时,资源(由pathinfo myServlet/sharedsessionID指示-例如myServlet/8439jfndofsd93jcanjc)执行资源的分派 这是我的Web.xml: <servl
<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>
现在的问题是:
在我执行resourceupdate之前,servlet可以正常工作,但是当我执行资源交付(到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
if(resourceUri!=null){
字符串ssid=resourceUri.substring(1);
ConcurrentHashMap hmClients=(ConcurrentHashMap)this.getServletConfig().getServletContext().getAttribute(“SharedClient”);
if(hmClients.containsKey(ssid)){
SharedClient targetClient=hmClients.get(ssid);
如果(targetClient.getParticipantSession().containsKey(会话)){
copy(targetClient.streamSnapshot(),response.getOutputStream());
}
}else System.out.println(“hmClient不包含ssid”);//始终在此分支中
从这时起,异步get的长轮询也没有成功完成
如果在更新之后我没有将资源传递到myServlet/sharedsessionID类型的路径,则异步get将继续正常工作
谢谢大家。好的,我决定了
我需要写信
@WebServlet(urlPatterns = {"/myServlet/*"}, asyncSupported=true)
在myServlet声明之前
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
@WebServlet(urlPatterns = {"/myServlet/*"}, asyncSupported=true)