servlet请求转发与重定向的区别:
request.setAttribute("test","hello");
request.getRequestDispacther("/test.jsp").forword(request,response);
response.sendRedirect("test.jsp");
一、显示结果:
1、当用request.getRequestDispacther("/test.jsp").forword(request,response); 请求转发后,结果页面输出:hello
2、当用response.sendRedirect("test.jsp");重定向后,结果页面输出:null
二、底层分析:
1、请求转发(RequestDispatcher)的过程:
客户首先发送一个请求到服务器端,服务器端发现匹配的servlet,并指定它去执行,当这个servlet执行完之后,它要调用getRequestDispacther()方法,把请求转发给指定的test.jsp,整个流程都是在服务器端完成的,而且是在同一个请求里面完成的,因此servlet和jsp共享的是同一个request,在servlet里面放的所有东西,在jsp中都能取出来,因此,jsp能把结果getAttribute()出来,getAttribute()出来后执行完把结果返回给客户端。整个过程是一个请求,一个响应。
2、重定向(sendRedirect)的工作原理:
客户发送一个请求到服务器,服务器匹配servlet,这都和请求转发一样,servlet处理完之后调用了sendRedirect()这个方法,这个方法是response的方法,所以,当这个servlet处理完之后,看到response.senRedirect()方法,立即向客户端返回这个响应,响应行告诉客户端你必须要再发送一个请求,去访问test.jsp,紧接着客户端受到这个请求后,立刻发出一个新的请求,去请求test.jsp,这里两个请求互不干扰,相互独立,在前面request里面setAttribute()的任何东西,在后面的request里面都获得不了。可见,在sendRedirect()里面是两个请求,两个响应。
三、表面分析:
1、当用RequestDispatcher请求转发后,地址栏为http://localhost:8080/test/TestServlet
这真好应正了上面的分析,我们起初请求的就一个servlet,至于你服务器端怎么转,流程怎么样的,我客户端根本就不知道,我发了请求后我就等
着响应,那你服务器那边愿意怎么转就怎么转,我客户端不关心也没法知道,所以当服务器端转发到jsp后,它把结果返回给客户端,客户端根本就
不知道你这个结果是我真正访问的servlet产生的,还是由servlet转发后下一个组件产生的。
2、当用sendRedirect重定向后,地址栏为http://localhost:8080/test/test.jsp
因为这个时候,客户端已经知道了他第二次请求的是test.jsp,服务器已经告诉客户端要去访问test.jsp了,所以地址栏里会显示想要访问的结果。
分享到:
相关推荐
实现原理: 1.在网页上访问URL(HTTP:localhost:8080/Login),...3.如果登录验证成功,则sendRedirect重定向到(HTTP:localhost:8080/Main),服务器获取请求头Get,forword转发到(HTTP:localhost:8080/Main.jsp),在浏
Forword Tdesign
还有,转发是在web应用程序之内进行的,可以访问web应用程序所设定的内部目录,像是WEB-INF目录,只能在Web应用程序中进行,不能指定至其它的Web应用程序的地址。 redirect就是服务端根据逻辑,发送一个状态码,告诉...
在doPost方法中处理查询,最后进行转发处理,可使用forword方法。 4. 登录界面login.jsp如下,将用户在JSP页面输入的用户名username和密码password,通过servlet到数据库中验证用户信息。通过验证,跳转到success....
浅析 重定向 与 跳转 对java 初学者有很大的帮助
Forward机制: 这种方式是在服务器端作的重定向。服务器往client发送数据的...如果在<JSP:FORWORD>之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么这种重定向方式将不起作用,这一点应该特别注意。
启动WSL容器并转发端口.vbs -> 启动WSL容器.cmd -> 转发端口到WSL容器.vbs -> 转发端口到WSL容器.cmd -> 转发WSL容器端口到主机.vbs -> 转发WSL容器端口到主机.cmd 其中vbs用于管理员身份调用cmd,并且隐藏执行时的...
forward kinmatics program with matlab
这个是一个支持TCP端口转发的小软件,采用IOCP模型设计,同时支持多个监听端口.这是这个软件的第一个版本,后期版本将支持过滤器插件,可以实现IP过滤,消息过滤,消息解码等用户自己定义功能.实现IP Forword功能.
c++,vs2019,悉尼大学作业,mark全部通过
主要介绍了android手机端与PC端使用adb forword通信的相关资料,需要的朋友可以参考下
2、使用表单提交的方式跳转页面,3、修改HTTP header的Location属性来重定向,4、JSP中实现在某页面停留若干秒后,自动重定向到另一页面,5、jsp标签跳转:“url” />,6、RequestDispatcher.forword(),7、response...
转发多个电子邮件与1点击-在背景。 需要转发许多电子邮件给某人吗? 这是一种选择所有您想转发的电子邮件并将其发送给1个收件人的快速方法。 即使您关闭Gmail,浏览器甚至PC,一切仍将继续进行,就好像您一次花时间...
串口转发示例代码 关键字:serial,forword,串口,转发
forword_it_datascience_batch_6th:Forword it数据科学第6个批处理文件
Tcp转发golang简单的TcpForward
udp 转发udp-forward 是一个简单的程序,用于隐藏某些 UDP 消息的内容。 该程序只是侦听 UDP 端口,加密数据报并将它们转发到指定的端口。 所使用的加密方案绝不是加密强的。 它只是为了向不聪明的欺骗者/嗅探者隐藏...
3、重定向 对于数据流的转发方向作重定向 (高端交换机才支持) 注意:如果没有说明一条语句的操作行为,默认的行为是forward。如果进入VLAN的数据流没有匹配上任何一条语句,最后将被丢弃掉。 基于IP的: Config#...
all_libtorch_forward.tar.xz