GetSession(false)在JSP和Servlet首次访问结果不同的问题--原创
GetSession(false)在JSP页面第一次访问为什么不是Null,按照Servlet Specification 2.4应该为Null。由于前两年在做业务网站后台程序时,为了防止刷新数据重复提交,导致数据库异常的问题时,我查阅资料,亲自实现了令牌机制。所以我对这个理解才有一个深刻理解。JSP页面会交给Tomcat容器编译成Servlet,Servlet会生成一个像 public void_jspService(HttpServletRequest req,HttpServletRespose res)的方法,在这个方法中用到了getSession()方法,这个方法相当于调用了getSession(true),就是当前会话不存在就创建,所以你在访问JSP页面时,在页面调用Scriplet时,得到的是非NULL值。如果你不信可以在JSP页面中分别用session.getSession(false),和session.getSession()得到两个变量,打印出他们的HashCode(),值是一样的。另外说明的是由于JSP面面中使用的session非JSP声明变量(其实就是隐含变量),所以用到的session就是void_jspService中的session,是同一个对象的引用。
但如果把getSession(flase)放在一个Servlet中,第一次访问这个Servlet得到的是Null值。
如有不妥之处,欢迎提出宝贵意见.
注:
有些东西,不要看网上的,自己弄出来才是真本事。请不要枉驾评论。我的这篇文章其实也没有深奥的道理,但可以给新手一些帮助。
不要乱评别人,我不算新手,也不算成手。至今用过Spring,Hibernate,Xfire,Lucene,Struts等技术做过开发,三年多。这是一天没事,突然想起前两年做的东东,想把过程记录下来。
以后有时间,打算每有心得就写篇文章。