浏览 6957 次
锁定老帖子 主题:jsp页面跳转方法及区别
精华帖 (0) :: 良好帖 (0) :: 新手帖 (6) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-05-10
这里首先介绍一下jsp中实现页面跳转的两种常用方法,及与普通http跳转请求(如直接输入网址)之前的区别。 在项目的web.xml中加入自己实现Filter接口的过滤器,实现对指定的请求进行转发。 1、 通过dispatcher的forward方法实现转发,如 request.getRequestDispatcher("/login.jsp").forward(request, response); 2、 通过HttpServletResponse的sendRedirect方法实现跳转,如 responseHttp.sendRedirect(requestHttp.getContextPath()+"/login.jsp") 上面这两种方法在请求响应之前,都能实现转发,但是又有不同。 forward方法只是在后台进行转发,客户端并不知道它发出的请求发生了转换,如客户端需要向后台请求A资源,但后台发现A资源不是A所有,这时后台使用forward转发请求到拥有A资源的B这里,之后由B返回给客户端,所以客户端这时并不知道A资源不是它所以的A所提供的! sendRedirect方法,后台并不像上者那样作为一个中介方,后台若发现客户端请求的A资源不在A这里,则返回客户端A资源的正确路径,这时客户端再次发送请求。 但需要注意的是,上面提到的两种方法,并不是每种请求都有效的。这里就是它们和直接输入网址的区别。当客户端发出的请求时Ajax异步请求时,该请求本身并没有跳转页面的请求,只是获取后台数据,这时上面的两种方法都是不能实现跳转的,因为后台是没有权利要求客户端实现页面刷新的,这也是说请求必须是在响应请求之前转发。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-05-10
楼主幸苦啦
|
|
返回顶楼 | |
发表时间:2011-05-10
后者本质上是返回一个302的response,header部分声明location为临时的转发地址
|
|
返回顶楼 | |
发表时间:2011-05-11
yangyi 写道 后者本质上是返回一个302的response,header部分声明location为临时的转发地址 这次我并没有详细去观察forward和sendRedirect这两种方法header部分的区别。但是我遇到的问题是:当我需要转发一个action请求时,如"test_test"(在Struts.xml声明_的后面为action,前面为方法),这时sendRedirect可以达到预计的效果,但是forward并不能实现转发! |
|
返回顶楼 | |
发表时间:2011-05-13
forward 在同一个request 里,redirect 不在同一个request 里。 所以,当您使用redirect时: 浏览器的地址栏会发生改变,forward则不会改变!
|
|
返回顶楼 | |
发表时间:2011-05-13
楼上说的一样
request.getRequestDispatcher("/login.jsp").forward(request, response); 此时相当于一中间过程,并带有请求前的信息,与请求后的信息 responseHttp.sendRedirect(requestHttp.getContextPath()+"/login.jsp") 是一定要转发的,且不带原始页面参数, |
|
返回顶楼 | |