Jsp与Servlet 重定向与转发探究(二)

4 篇文章 0 订阅
3 篇文章 0 订阅
      Servlet中的请求转发与重定向探究

a. 探究过程
b. 经验总结


1.采用与 Jsp与Servlet 重定向与转发探究(一) 一样的servlet Demo,想做测试的请前往此处copy。index.jsp、servlet(ServletRequest.java 与 ServletResponse.java)与web.xml此三文件。


图1. 修改ServletRequest.java中的代码:

request.getRequestDispatcher("end.jsp").forward(request, response);

你会看到结果
这里写图片描述

无影响!


图2 继续修改:

request.getRequestDispatcher(request.getContextPath()+"/end.jsp").forward(request, response);

你会看到结果:
这里写图片描述

message处显示的是: /servletForR/servletForR/end.jsp(servletForR为我项目名)

此处报错。


图3 继续修改代码:

request.getRequestDispatcher(request.getContextPath()+"end.jsp").forward(request, response);

结果:
这里写图片描述

message处显示的是: /servletForR/servletForR.jsp


图4 我们测试response重定向对应的servlet(ServletResponse.java):

response.sendRedirect(request.getContextPath()+"end.jsp");

少了个’/’。结果是:
这里写图片描述

message处显示的是: /servletForend.jsp

这不就是少了个‘/’所以拼接错误嘛!


图5 ServletResponse.java继续修改:

response.sendRedirect("/end.jsp");

结果是:
这里写图片描述

message处显示的是: /end.jsp

有没有发觉!!! 和request请求转发的区别!!!

好,我们继续。


图6 代码修改:

response.sendRedirect("end.jsp");

结果是:
这里写图片描述

有没有感到很奇怪!!!

好吧,我总结下:

如果URL都是“x.jsp”。转发和重定向指向的都是根目录下的文件,会在根目录下索引。

而如果有”/x.jsp”。则有很大的区别。
首先从图 2 5图中的message 你可以看出。response的默认目录是整个项目的上一级目录。request默认的目录是项目的根目录。

3 4我们知道getContextPath()是项目名的路径是没有’/’结尾

因此如果以后是在根目录,则可以选择都不加‘/’直接“x.jsp即可”。

如果不是在根目录,在某一文件中。建议:
重定向用 :request.getContextPath()+"/jsp_name";
请求转发用 : /filename/jsp_name.

例:
重定向:
response.sendRedirect(request.getContextPath()+”/end.jsp”);

请求转发:


request.getRequestDispatcher("/ns/end.jsp").forward(request, response);
(ns为webroot下的子文件夹)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值