Struts构架中的Session对象创建和控制

豆豆网   技术应用频道   2007年08月02日    社区交流

内容摘要:谈一下对session对象在web开发中的创建以及sessionId生成并返回客户端的运行机制.

  上面的理论在servlet中测试都是成立的,下面谈一下在struts框架下进行上面的测试时的不同的地方.

  先简要说下测试程序的流程:

  客户端请求index.do--->进入server端的IndexAction--->转向login.jsp页面----->请求login.do----->进入server端的LoginAction.

  首先说明:IndexAction中没有去产生session对象,login.jsp中设置.

  (1)环境servlet + jsp:

  在sevlet+jsp测试跟踪时,在index.do进入IndexAction后转向login.jsp时,此时浏览器内存中是没有会话cookie的,那么在login.jsp上请求login.do进入LoginAction后,用request.getCookies()测试时,其值是为null的!结果是稳合的,因为从始置终没有产生过session嘛!

  (2)环境struts + jsp:

  在struts+jsp测试跟踪时,跟上面的流程一样,开始想结果也应该是一样的,但经过调试后发现结果却不是所想的那样.在login.do进入LoginActoin后用,用request.getCookies()测试时,发现其值不为null,即其有name和value,开始很不理解,因为根本就没有创建过session对象,哪来的会话cookie值呢.但是结果有,那么想着此时浏览器内存中也就应该有会话cookie,问题就在这里!从哪里来的?

  后来经过仔细考虑后,想到struts中的特点,我们自己写的Action类是继承struts的Action的,而且之前是经过struts的中央控制器ActionServlet来控制转向的,所以我想肯定是在程序进入我自己写的IndexAction之前,struts框架中的代码肯定已经创建了session对象并已经生成了sessionId.于是就找到相关书籍查看了ActionServlet工作流程以及调用哪些类,看了之后果然在其中看到了HttpSession session = request.getSession();这样一句话!于是答案也就明了了.

  大家知道struts的ActionServlet类中在接收到我们客户端的请求(*.do)后(之前会做一系列初始化工作),并不是直接去处理我们的请求并调用相应的Action(我们写的如IndexAction),而是将处理工作交给RequestProcessor类,其process方法中会调用一系列的方法来完成相应的请求处理和转向操作.其中有一个方法引起了我的关注,就是processLocale()方法.

责编:豆豆技术应用

正在加载评论...