request 使用时遇到的问题

来源:互联网 发布:手机剪接视频软件 编辑:程序博客网 时间:2024/06/07 07:36

在公司中用的是一个UIFacade类来管理一些东西,我在使用的时候在UIFacade中设置了一个属性request。

代码如下:

 

public class UIFacade {

        protected HttpServletRequest request;
        protected HttpServletResponse response;

 

        public String getJsessionId() {
               return ";jsessionid=" + request.getSession().getId();
        }

}

 

在使用getJsessionId() 这个方法的时候总是报错,报空指针异常,也就是request.getSession()这个为空,上网查了一些资料,

 

 

HttpRequest对象有两种形式的getSession方法调用:
一个是getSession(),
另一个是getSession(boolean isNew)
getSession()相当于getSession(false),

参数为true时,若存在会话则返回该会话,否则新建一个会话。
参数为false时,若存在会话则返回该会话,否则应该返回一个NULL
我是在用户第一次访问的时候将request存起来的,之后再拿出来用。但这里是比较容易犯错误的,将request存起来的操作,实际上是将request指向request对象,而request对象是会随着每次访问而变化的。这样就会导致出现空指针异常。
解决的方法是,可以克隆一个request对象,然后将request指向那个克隆的request对象,这样这个request对象就不会变化了,但这样的效率不高。
在我遇到的问题中我只想得到session的ID,那我就直接将session的ID存储起来就好了,用户访问的时候session的ID是不会改变的。
修改的代码如下:

public class UIFacade {

        protected HttpServletRequest request;
        protected HttpServletResponse response;

        protected String sessionId;

 

        public String getJsessionId() {
               return ";jsessionid=" + sessionId;
        }

}


 

原创粉丝点击