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

来源:互联网 发布:淘宝商家登入 编辑:程序博客网 时间:2024/04/20 00:04
      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”。则有很大的区别。
首先从图25图中的message 你可以看出。response的默认目录是整个项目的上一级目录。request默认的目录是项目的根目录。

34我们知道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