我认为用户能看到的每个信息,我们都应斟酌它是否妥当。
如果服务端是转发处理相应,而不是重定向给浏览器一个新的请求链接,此时,上次请求的action依然保留在地址栏中。
这样是会出问题的,如果刷新页面将再次执行一遍servlet(因为地址栏没变,依旧指向servlet),这是一个毫无意义的页面刷新,就因为你没有思考地址栏的作用。这是用户体验上的不爽吧!
既然,转发有问题,重定向就不会了吧!它的链接刷新是有意义的(因为如果服务端用重定向跳到jsp页面,地址栏会发生变化指向一个jsp,不再是servlet,所以刷新相当于刷新jsp页面)
但是,有时为了安全考虑,我们会把页面放在WEB-INF里面,可是,这样一来重定向就不能访问WEB-INF里面的页面了。还必须用转发。
解决方案:
如果用转发技术直接到jsp页面,那么刷新jsp页面时会因为地址栏还是原先的servlet而再次执行一次该servlet,但如果用重定向又无法访问web-inf目录下的jsp
最专业的解决方法:
就是先用重定向技术将原先的表单提交servlet跳转到一个新创建的servlet(用重定向是使地址栏变成新建的servlet,该新建servlet没有任何业务操 作,只是简单的实现与jsp页面的转发交互),再通过新建的servlet转发技术(转发才可以访问web-inf目录下的jsp)跳转到jsp,该新建的servlet主要作用就是使jsp页面的地址栏不会再是表单提交的servlet,因此就不会发生刷新jsp重复提交表单的现象啦!
=============