网站后台怎么转发网页内容(web开发中转发与重定向有很大的区别,你知道吗? )
优采云 发布时间: 2022-02-19 11:10网站后台怎么转发网页内容(web开发中转发与重定向有很大的区别,你知道吗?
)
在 Web 开发中,转发和重定向之间有很大的区别。
直观上看,转发不会改变 URL 地址,而重定向会改变 URL。
这只是表象。HttpServlet中的请求对象和响应对象是由服务器根据用户请求网页时浏览器传递的参数进行封装生成的。一旦请求来自浏览器,服务器就会响应,因此请求和响应将走到生命的尽头。
使用转发时,浏览器只请求一次,但服务器可能会经历多次跳转。当服务器执行时发生转发时,服务器停止正在执行的任务并指定转发给定地址的任务。
通过重定向,浏览器将向服务器发出多个请求。当代码在服务器端执行时,发现发生了重定向,则通知浏览器访问另一个URL。然后浏览器将从发送的 URL 请求资源。
看一段代码:
login
name :
这是一个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方法,页面在该方法中被转发。
welcome
这是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");
}
}
可以看到结果是:
浏览器项目服务器发送两个请求:
从以上结果可以看出,重定向后,欢迎页面中的内容为空,因为是另一个发起的请求。对于转发来说,因为是同一个请求对象和响应对象,所以不仅可以获取浏览器请求的参数,还可以获取请求总是放入的属性值。
其实从代码中可以看出sendRedirect()方法是HttpServletResponse对象的响应方法。既然调用了response对象的方法,就意味着整个请求结束了,服务器端item客户端返回执行结果。getRequestDispatcher 方法是请求对象的一个方法,表示它还在请求,所以它不会立即将结果返回给浏览器,而是继续执行它的转发任务。
当需要说明一件事时,无论是forward方法还是sendRedirect方法中传入的URL,都需要注意。如果以“\”开头,则表示该URL是对servlet容器根目录的请求,即localhost:8080。如果不以“\”\”开头,则表示请求地址是相对于当前请求URL寻址的。
login
name :
当我再次单击提交时:
不以“\”开头的请求地址有:
转发模型为:
重定向模型是: