在web开发中,转发与重定向有很大的区别。
直观看来,转发不会发生URL址的变换,而重定向则会发生URL的改变。
这仅仅只是一种表象。HttpServlet中的request对象和response对象是在用户请求网页时由服务器根据浏览器传过来的参数封装生成的。一旦从浏览器请求过来,服务器响应回去那么request和response的也就到了生命的终点了。
当使用转发的时候,浏览器仅仅请求一次但是服务器端可能经历了多次的跳转。服务器端执行时发生了转发那么服务器就停止正在执行的任务,去指定转发给定地址的任务。
而使用重定向的话,浏览器则会项服务器发生多次请求。在服务器端执行代码的时候,发现发生了重定向,那么它就会通知浏览器,去访问另一个URL。浏览器就会向被发送的URL请求资源。
看一段代码:
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>login</title></head><body> <form action="myServlet" method="post"> name :<input type="text" name="username"/><br/> <input type="submit" value="submit"/> </form></body></html>
这是一段jsp代码,当点击提交的时候,会把表单提交给myServlet。
界面长这样:
public class MyServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = (String)request.getParameter("username"); request.setAttribute("welcome", "welcome!!!"); RequestDispatcher rd = request.getRequestDispatcher("welcome.jsp"); rd.forward(request,response); } }
这是MySerlet,当用户点击提交表单,服务器就会调用MyServlet的doPost方法,在这个方法里面进行的是页面转发。
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>welcome</title></head><body> <%=request.getParameter("username")%> <br/> <%=request.getAttribute("welcome") %></body></html>
这是welcome.jsp的代码。
提交结果为:
当点击提交按钮后后我们可以看一下网络的请求过程。
可以发现浏览器只向服务器发送了一个请求。
接下来看一下重定向。
如果把MyServlet的代码改一下。
public class MyServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = (String)request.getParameter("username"); request.setAttribute("welcome", "welcome!!!");// RequestDispatcher rd = request.getRequestDispatcher("welcome.jsp");// rd.forward(request,response); response.sendRedirect("welcome.jsp"); } }
可以看到结果为:
而且浏览器项服务器发送了两次请求:
从上面的结果可以看出重定向后,因为是发起的另一个请求因此welcom页面中的内容都是null。而转发则由于是同一个request对象和response对象因此既能获得浏览器请求的参数,还能拿到request总放入的属性值。
其实从代码也可以看出来,sendRedirect()方法是HttpServletResponse对象的响应方法,既然调用了响应对象的方法,那么就表明整个请求结束了,服务器端项客户端返回执行结果。而getRequestDispatcher方法是request对象的方法,表明依旧在请求因此不会立即向浏览器返回结果,而是继续执行其转发的任务。
有一点需要说明的时,不论forward方法还是sendRedirect方法中传的URL需要注意,如果以“\”开头那么,就表示这个URL是现对于servlet容器根的请求,即localhost:8080,如果没有以“\”开头,那么表明这个请求地址是相对于当前的请求URL来寻址的。
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>login</title></head><body> <!--这里改成了绝对地址 --> <form action="/myServlet" method="post"> name :<input type="text" name="username"/><br/> <input type="submit" value="submit"/> </form></body></html>
当我再次点击提交的时候:
不以”\”开头的请求地址为:
转发模型为:
重定向模型为:
本文讲解了网页的转发与重定向,更多相关内容请关注php中文网。
相关推荐:
以上是网页的转发与重定向的详细内容。更多信息请关注PHP中文网其他相关文章!

只需要将语音转成笔记再发给别人即可。教程适用型号:iPhone13系统:iOS15.5版本:微信8.0.7解析1首先把语音信息添加到收藏,然后在收藏页面打开语音。2在语音界面点击右上角的三个点。3接着在下方的列表中点击转存为笔记。4最后在笔记界面点击发送给朋友即可。补充:微信语音怎么转文字1首先在微信聊天界面长按要转化的语音。2然后在弹出的窗口中点击转文字。3最后语音就被转换成文字了。总结/注意事项微信语音信息不能直接进行转发,需要先转成笔记的形式。

微信,作为一款功能丰富的社交软件,支持多种通讯方式,包括文字、语音和视频等。其中,语音消息为用户提供了便捷的沟通方式。然而,微信原生并不支持直接转发语音消息。但可以通过其他方法实现,微信语音转发的方法有多种,以下提供两种常见方式:如收藏转发或录屏转发。微信语音怎么转发?微信语音转发的方法第一种方法,收藏转发1、长按需要转发的微信语音消息,直到出现多选菜单。2、勾选需要转发的语音消息,然后点击屏幕下方的【收藏】按钮。3、进入微信【我】的页面,点击【收藏】选项,找到刚才收藏的语音消息。4、点击语音消

Servlet生命周期是指servlet从创建直到毁灭的整个过程,可分为3个阶段:1、初始化阶段,调用init()方法实现Servlet的初始化工作;2、运行阶段(处理请求),容器会为指定请求创建代表HTTP请求的ServletRequest对象和代表HTTP响应的ServletResponse对象,然后将它们作为参数传递给Servlet的service()方法;3、销毁阶段。

微信是我们常用的媒体社交软件。很多个人或者博主喜欢在朋友圈分享记录自己的生活。当我们看到一些好的文章,网红的博客,诱人的菜谱时,往往想要转发到自己的朋友圈,分享给亲朋好友,顺便在自己方便的时候再次查看。以免再想看的时候找不到。那么我们来学习一下微信如何转发文章吧!微信如何转发文章?微信转发文章的方法1、如果是朋友圈的链接,可以直接分享到自己的朋友圈,如果是别人发的文章,只能长按复制,然后长按右上角相机图标三秒,粘贴文字,然后发布,如果要转发别人图片,必须先将图片保存到自己手机上,然后选择上传。2

JavaServlet可用于:1.动态内容生成;2.数据访问与处理;3.表单处理;4.文件上传;5.会话管理;6.过滤器。示例:创建一个FormSubmitServlet来处理表单提交,将name和email作为参数,并重定向到success.jsp。

JavaServlet中实现分布式会话管理的方法有两种:1.会话复制:将会话数据复制到各个服务器。2.会话分布:使用集中式存储服务存储会话数据,由多个服务器访问。具体实现方式有:会话复制配置web.xml文件中的true;会话分布使用Redis:引入jedis库,编写Servlet使用Jedis存储和检索会话数据;使用SpringSession:引入spring-session依赖,注入SessionRepository,通过它操作会话数据。

Servlet全称“Java Servlet”,中文意思为小服务程序或服务连接器,是运行在Web服务器或应用服务器上的程序,它是作为来自Web浏览器或其他HTTP客户端的请求和HTTP服务器上的数据库或应用程序之间的中间层。Servlet具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

Dreamweaver Mac版
视觉化网页开发工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。