要实现注销功能 public boolean loginOut() throws Exception {
try{
Map session = ActionContext.getContext().getSession();//该方式获取session失败,注销失败
session.remove("user");
// WebContext webContext = WebContextFactory.get();//该方式获取session成功,注销成功
// webContext.getSession().removeAttribute("user");
}catch(Exception e){
e.printStackTrace();
}
return true;
}报错:
java.lang.NullPointerException
at org.action.UserAction.loginOut(UserAction.java:58)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.directwebremoting.impl.DefaultRemoter$1.doFilter(DefaultRemoter.java:740)
at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:744)
at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:593)
at org.directwebremoting.dwrp.BaseCallHandler.handle(BaseCallHandler.java:90)
at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:120)
at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:141)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:389)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
1.为什么用Map session = ActionContext.getContext().getSession()获取session失败呢?
2.使用WebContextFactory时,在上面显示一条横线,Myeclipse提示:deprecated,就是弃用,不赞成使用,那现在用什么代替了呢?

解决方案 »

  1.   

    你试试用另外一种方式  Action implements SessionAware{
           Map session = new HashMap()
           
           //setter;
      }
      

  2.   

    1.因为你那个方法只能在action中使用,struts2会负责初始化ActionContext对象,放到普通类中它肯定是空,因为缺少上下文环境。
    2.虽然不推荐使用但是也可以用的,还有另一种方式就是给这个函数加个参数: public boolean loginOut(javax.servlet.http.HttpSession session) throws Exception {
            try{
                session.getAttrubute("user");  //获得 
                session.removeAttribute("user");//注销
            }catch(Exception e){
                e.printStackTrace();
            }
            return true;
        }
      

  3.   

    服务器类的处理方法中增加了javax.servlet.http.HttpSession参数,DWR引擎会负责初始化这个参数,js调用的时候还是loginOut(),不用写那个参数。