java通过不同请求转发不同端口_java重定向与请求转发的区别

请求转发:

request.getRequestDispatcher().forward();

重定向:

response.sendRedirect();

例如:

请求转发:

request.getRequestDispatcher("/student_list.jsp").forward(request,response);

重定向:

response.sendRedirect(request.getContextPath + "/student_list.jsp")

转发过程:客户端首先发送一个请求到服务器,服务器匹配Servlet,并指定执行。当这个Servlet执行完后,它要调用getRequestDispacther()方法,把请求转发给指定的student_list.jsp,整个流程都是在服务端完成的,而且是在同一个请求里面完成的,因此Servlet和jsp共享同一个request,在Servlet里面放的所有东西,在student_list.jsp中都能取出来。因此,student_list.jsp能把结果getAttribute()出来,getAttribute()出来后执行完把结果返回给客户端,整个过程是一个请求,一个响应。

重定向过程:客户端发送一个请求到服务器端,服务器匹配Servlet,这都和请求转发一样。Servlet处理完之后调用了sendRedirect()这个方法,这个方法是response方法。所以,当这个Servlet处理完后,看到response.sendRedirect()方法,立即向客户端返回个响应,响应行告诉客户端你必须再重新发送一个请求,去访问student_list.jsp,紧接着客户端收到这个请求后,立刻发出一个新的请求,去请求student_list.jsp,在这两个请求互不干扰、相互独立,在前面request里面setAttribute()的任何东西,在后面的request里面都获得不了。因此,在sendRedirect()里面是两个请求,两个响应。

Forward是在服务器端的跳转,就是客户端一个请求给服务器,服务器直接将请求相关参数的信息原封不动的传递到该服务器的其他jsp或Servlet去处理。而sendRedirect()是客户端的跳转,服务器会返回客户端一个响应报头和新的URL地址,原来的参数信息如果服务器没有特殊处理就不存在了,浏览器会访问新的URL所指向的Servlet或jsp,这可能不是原来服务器上的webService了。

总结:

1、转发是在服务器端完成的,重定向是在客户端发生的;

2、转发的速度快,重定向速度慢;

3、转发是同一次请求,重定向是两次请求;

4、转发地址栏没有变化,重定向地址栏有变化;

5、转发必须是在同一台服务器下完成,重定向可以在不同的服务器下完成。

a1aeca246c2087f9db67691a0b81d245.png

6c8e901da94f87fb690039cbe47fda68.png

补充:

原文链接:https://blog.csdn.net/fighting_sxw/article/details/79302512

一、请求转发和请求重定向的区别

请求转发和请求重定向又分别称为服务器跳转和客户端跳转

1.1、组件之间可否共享信息不同(本质区别)

当客户端向服务器发送请求时,服务器收到请求后,会将请求封装成一个HttpServletRequest对象request,并且所有的请求参数都封装在request对象中,这个对象时Jsp的内置对象可以直接在Jsp中使用。服务器收到请求后,还需要请求别的页面,这是就有两种方式:请求转发和请求重定向。

所谓请求转发,是服务器的行为,请求由服务器转发给另外一个页面处理,如何转发,何时转发,转发几次,客户端是不知道的。请求转发时,从发送第一次到最后一次请求的过程中,web容器只创建一次request和response对象,新的页面继续处理同一个请求。也可以理解为服务器将request对象在页面之间传递。

所谓请求重定向,是客户端的行为,每次请求重定向都是由客户端发起的,也就是说重定向一次,就刷新request对象的属性,之前的request对象的属性值就失效了。

1.2、浏览器地址栏显示不同(表面区别)

请求转发之后地址栏的信息并不会有任何的改变。

请求重定向之后地址栏是会改变的,变为跳转之后的页面地址。

二、Java实现

2.1 Java中的请求转发(服务器跳转)

执行到跳转语句时就会立刻进行跳转

Java代码:

1 request.getRequestDispatcher("success.jsp").forward(request,response);

在jsp页面中你也会看到通过下面的方式实现转发:

1

2.2 Java中的请求重定向(客户端跳转)

response.sendRedirect("apage.jsp");  不能传递request 范围的属性 ,但是可以通过地址重写的方式向跳转页传递参数,因为该方法执行完之后就相当于一次http request 的结束,这是服务器会向客户端发送302 状态码和新的url ,告诉客户端重新发送request 请求到新的url ,然后客户端照此执行,执行即新的请求响应流程开始,服务器再重新创建HttpServletRequest 对象和HttpServletResponse 对象,此时两个请求已经不在一个线程了,所以request 和response 对象都不是开始的那个了;

response.setHeader("refresh","2;URL=index.jsp")  2 秒后跳转到其他页面;

百度  超链接

表单提交

三、路径问题

转发和重定向的URLString前有加 / 为绝对路径 反之为相对路径

3.1绝对路径

1、重定向的 / 表示:http://服务器ip:端口/

1 response.sendRedirect("/Manager/index.jsp")

生成的地址:web服务器本身地址+参数生成完整的URL 即:http://localhost:8080/Manager/index.jsp

2、请求转发的 / 表示:http://服务器ip:端口/项目名

1 request.getRequestDispatcher("/index.jsp").forward(request, response);

生成的地址:http://localhost:8080/项目名/index.jsp

重定向是浏览器发来的,只知道发到某个服务器,但是不知道发到服务器的哪个project,所以需要自己用代码声明; 而请求转发是服务器某个project内部的转发,转来转去都是在某个project内部,所以不需要手动声明项目名。

3.2 相对路径

假设通过表单请求指定的Url资源 action="LoginServlet"

则表单生成的请求地址为:http://localhost:8080/项目名/LoginServlet

请求重定向: response.sendRedirect("Manager/index.jsp") 生成相对路径:http://localhost:8080/项目名/Manager/index.jsp

请求转发:相对路径情况下生成的完整URL与重定向方法相同。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值