JavaWeb学习--请求转发和重定向

        请求是指服务器在接受并处理请求后,将请求转发到另一个服务器内部资源(例如Servlet或JSP页面),而客户端并不会知道这个转发的过程,浏览器的URL不会改变。其是由服务器内部完成的,请求仍然保持原来的URL路径不变。转发时,路径是基于当前的请求上下文的,即路径的写法是相对路径。你可以使用相对路径来进行资源转发,而无需提供完整的项目虚拟路径。

        例如我们做一个登录的功能,先填写用户名密码然后提交到一个负责登录的Servlet,Servlet为我们做用户名和密码的校验,如果我们都正确的话,我们就要跳转到登录的提示页面,如果错误就要跳转到登录失败的页面。请求转发也可以叫做服务器端的跳转,虽然有页面的跳转但是我们会发现地址栏是不会有变化的。

request.getRequestDispatcher("/success.html").forward(request, response);

        上面例子中,success.html是相对于当前Servlet或JSP所在的目录路径的,不需要加上完整的项目虚拟路径(如 /myapp/success.html)。服务器知道从当前请求的上下文路径来查找资源。

        总而言之,请求转发是一个内部操作,其只涉及到一次请求和响应,故其request和response的资源是可以被传递的,其在服务器内部完成,不会改变浏览器的URL。因此,路径写作时只需写相对路径或者从Web应用的根目录开始的路径即可。

        重定位是是服务器告诉客户端(浏览器)去请求另一个URL,客户端(浏览器)收到响应后会向新的URL发送请求,并且客户端(浏览器)的URL栏会发生变化,重定向操作后,request中的属性将会所有失效,并开始一个新的request对象。

        重定向要求浏览器发送一个新的请求到指定的URL。因此,路径必须是完整的URL或者是从Web应用的根路径开始的虚拟路径。

response.sendRedirect("/myapp/success.html");

在这个例子中,/myapp/success.html是一个虚拟路径,指示浏览器向服务器发送一个新的请求。这里需要使用虚拟路径(包括项目名称等),因为浏览器会直接向该路径发送请求,即整个流程会产生2次请求和响应。重定向是客户端控制的请求跳转,它可以定向到任何有效的资源,包括外部网站、其他Web应用程序等。如我们使用淘宝购买商品时,在付款时,淘宝会重定向到支付宝等付款软件,在这些软件内进行支付而不是在淘宝软件内支付。而如果仅使用请求跳转,则你只能使用淘宝内的服务,不能跳转到其他软件和页面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值