forward redirect 理解

1. forward:

   1.1 request.getRequestDispatcher("newUrl").forward(request,response).

   1.2 forward操作,是request请求指向新的地址,但并没有使IE重新改写URL,IE仍旧采用request的url

   1.3 servlet中,forward不能带参数指向新地址,只能以request.setAttribute(key,value)方式传递给新的url中。

在新url中,使用request.getAttribute(key)获取参数值。

   1.4 整个forward跳转过程中,没有结束一次request→response过程,request一直有效,所以可以使用1.3中所述的request.getAttribute(key)方式获取参数值。

   1.5 不能指向另一个context的地址

2. redirect

   2.1 response.sendRedirect("newUrl")

   2.2 redirect重定向操作,重写IE的url,结束当前request请求,使得当前request在新的url中失效

   2.3 新的url中,IE新建request

   2.4 可以以url?p1=p1v&p2=p2v方式传递参数给新的url

   2.5 可以指向自己、其他context范围中的url

 

 

 3. 由上述1 、2中总结,想实现避免重复提交操作(struts、servlet中):

   3.1 使用redirect重定向IE的url,避免刷新重复访问servlet、action的url

   3.2 在3.1中,会导致request失效,request.setAttribute(key,value)无法传递参数,为解决此问题,需要以forward方式指向一个临时url(eg. redirect.jsp),获得request的attribute后,使用3.1的redirect方式,以参数传递方式访问最终url,获取参数。同时改写IE 的url,避免刷新后重复执行上次的url操作。

 

 

你可能感兴趣的:(jsp,servlet,struts,IE)