基于Struts1.2.9框架的登录页面的处理过程

首先谈一下对session对象在web开发中的创建以及sessionId生成并返回客户端的运行机制。

  session对象当客户端首次访问时,创建一个新的session对象。并同时生成一个sessionId,并在此次响应中将sessionId以响应报文的方式些回客户端浏览器内存或以重写url方式送回客户端,来保持整个会话,只要sever端的这个session对象没有销毁,以后再调用request.getSession()时就直接根据客户端的sessionId来检索 server端生成的session对象并返回,不会再次去新建,除非根据此sessionId没有检索到session对象。

  下面是在IE下测试,因为IE6.0的一个BUG就是IE的隐私设置即使是阻止所有cookie时,也还是会以会话cookie来保存sessionId.所以下面都是以会话cookie来讨论的,

  (1)在server没有关闭,并在session对象销毁时间内,当客户端再次来请求server端的servlet或jsp时,将会将在第一次请求时生成的sessionId并附带在请求信息头中并向server端发送, server端收到sessionId后根据此sessionId会去搜索(此过程是透明的)server对应的session对象并直接返回这个 session对象,此时不会重新去建立一个新的session对象。

  (2)当server关闭(之前产生的session对象也就消亡了),或 session对象过了其销毁时间后,浏览器窗口不关,并在本浏览器窗口再次去请求sever端的servlet和jsp时,此时同样会将 sessionId(server关闭或session销毁时生成的sessionId)发送到server端,server根据sessionId去找其对应的session对象,但此时session对象已经不存在,此时会重新生成一个新的session对象,并生成新的sessionId并同样将这个新生成的sessionId以响应报文的形式送到浏览器内存中。

  (3)当server没有关闭,并session对象在其销毁时间内,当请求一个 jsp页面回客户端后,关闭此浏览器窗口,此时其内存中的sessionId也就随之销毁,在重新去请求sever端的servlet或jsp时,会重新生成一个sessionId给客户端浏览器,并存在浏览内存中。

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

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

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

  首先说明:IndexAction中没有去产生session对象,login.jsp中设置<%@ page session="false"%>.

  (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 Web框架是现在构建Web应用必须的开发框架之一。以下是我们学习Struts框架时通常都会看到的登录页面程序的处理流程分析,希望和广大博友交流:

基于Struts框架登录程序应用的UML顺序图

处理步骤:

1、客户从浏览器客户端向Web服务器发出请求,服务器将请求转发到Web容器,比如:Tomcat;根据请求路径URL找到ActionServlet,Web容器调用Servlet的servic()方法,根据请求参数的不同调用doGet()或者doPost()方法。

2、而ActionServlet的doGet()或者doPost()方法调用process()方法处理请求和响应,生成RequestProcess对象处理配置文件struts-config.xml中的配置信息,依次调用processMapping()-查找处理此次请求的Action信息并返回ActionMapping对象;processActionForm()--创建此次请求的ActionForm对象;processActionCreate()--创建处理此次请求的Action实例(LoginAction对象);processActionPerform()--执行Action实例的execute()方法。

3、通过调用execute()方法获取LoginForm存储的用户和密码等数据信息,其中将ActionForm Bean、ActionMapping、request、response对象传递给LoginAction对象(Action实例);执行完必要的逻辑处理比如查询数据库后,返回一个ActionForward对象,由该对象调用RequestProcess对象中的processForwardConfig()方法解析配置文件中跳转参数,转发到相应的View页面success.jsp或者failure.jsp。

以上是 基于Struts1.2.9框架的登录页面的处理过程 的全部内容, 来源链接: utcz.com/p/206340.html

回到顶部