关于网友提出的“ Struts2结合Dwr 在Action中获取session问题”问题疑问,本网通过在网上对“ Struts2结合Dwr 在Action中获取session问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: Struts2结合Dwr 在Action中获取session问题
描述: 要实现注销功能
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;
}
以上介绍了“ Struts2结合Dwr 在Action中获取session问题”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3024883.html