昨天学习了struts的ActionForm 才知道,原来在struts中ActionForm扮演N多重要角色。
今天学习到ActionForward。
下面开始简述一下自己学到的心得体会。
在刚开始我理解的请求的转发和重定向只是有一个区别,
那就是如果用请求的转发那么在上下文环境中储存的参数些在转发的下一个Action或JSP中还能用。
而相反请求的重定向则会把上下文清空。所以那些参数也不复存在。
其实在一开始这么理解确实没有错的。
这几天猛然翻起struts的书才发现。自己懂的还很少。
请求的转发:
请求的转发实际是在服务器那端执行的。也就是说那些request、session这里里面存放的东西只能在服务器端访问。
现在从客户端发送一个请求过来,如果在Action中进行了请求的重定向,那么struts就会把请求对象传给下一个Servelt
处理。所以大家在上下文件环境中保存的参数都还有。在我们做的程序开发中差不多全是请求的转发,因为要利用
上下文环境来传递数据。因为在请求的转的同时,这一次请求并没有返回客户端,只是在服务器端做了转发。所以
当响应回到客户端的时候,客户端并不知道服务器端进行过请求的转发所以在客户端的地址栏的url不做任何变化。
请求的重定向:
请求的重定向实际是当在服务器端接受到请求的重定向请求的时候,他会即时响应客户端然后告诉客户端要请求的地址。并
自动再将请求发送给传回来的url。实际上请求的重定向两次向服务器发送了请求。所以当服务器第一次响应请求的时候,
不能把request对象传送回客户端,所以在请求的重定向中无法通过上下文环境来保存数据。那我们怎么传递数据呢,只能通过
服务器第一次响应的时候会传送回来一个再次请求的url(
http://www.baidu.com?keyword=123)。可以在url中跟上对应的参数可以达到数据传递的目的。这样用着比较麻烦,但这样做就可以改变客户端的url地址。因为请求第一次是返回过客户端的。所以客户端就知道了新的url地址,相应
也就会改变。
小结:
个人认为请求的重定向的转发最大的差别就是:请求的转发是在服务端完成的,并没有返回客户端。而请求的重定向会返回一次客户端,通过
客户端的身份再次请求相应的url。