请求转发和重定向

转发(forward):RequestDispatcher.forward() 方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。
重定向(redirect):HttpServletResponse.sendRedirect() 方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的 访问请求。

本质区别:转发是服务器行为,重定向是客户端行为。
请求转发特点:一次请求,浏览器地址不变,访问的是自己本身的web资源,传输的数据不会丢。
重定向特点:两次请求,浏览器地址发生变化,可以访问自己Web之外的资源,传输的数据会丢失。

1.请求转发
(1)forward 可以将请求转发到 WEB-INF目录下的资源
例:return "forward:/WEB-INF/jsp/test.jsp";
(2)转发不能访问 Web 应用外部资源

2.重定向
(1)redirect 不能将请求重定向到 WEB-INF目录下的资源
注:WEB-INF下面的内容都是只能由服务器级别才能访问,客户端并不能访问。转发就是服务器级别,重定向是客户端级别
(2)重定向可以访问 Web 应用外部资源

补充:如何访问WEB-INF下的jsp文件
因为web-inf下,应用服务器把它指为禁访目录,即直接在浏览器里是不能访问到的.
但是可以让servlet进行访问,如web-inf下有a.jsp则可以用

request.getrequestdispatcher("/web-inf/a.jsp").forward(request,response);  

补充一下,如果你想访问web-inf下的html文件的话,用

request.getrequestdispatcher("/web-inf/a.htm").forward(request,response);是访问不了的。
原因很简单,jsp就是servlet,会被编译成class文件,而htm的就不行了。
所以需要配置以下conf下的web.xml文件才能去访问htm。
具体实现如下:
用打开tomcat安装目录下conf下的web.xml文件,找到

<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>

然后在它下面添加

</servlet-mapping>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>

这样的话,你就能用request.getrequestdispatcher("/web-inf/a.htm").forward(request,response);去访问web-inf下的html了

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hvk_l

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值