Home > Web Front-end > HTML Tutorial > The difference between , requestDispatcher and sendRedirect()_html/css_WEB-ITnose

The difference between , requestDispatcher and sendRedirect()_html/css_WEB-ITnose

WBOY
Release: 2016-06-24 12:34:59
Original
1390 people have browsed it

1. Session information is stored in the server memory and can be accessed intermittently. Compared with cookies, it is stored on the server.
2. A man is like Bluetooth: he will only find you when you are close. After you left, he went to find other "devices". A woman is like Wi-Fi: she sees all the "devices" around her, but only chooses the stronger ones to "connect" to.
3. Session closure: browser close, active shutdown, session timeout
4. Session underlying implementation: cookie and url rewriting (the session ID is saved, which is to call response.encodeURL, then the id is automatically added)
5.session has the creation time and last access time, which is different from cookie (you have to write it yourself), but it returns the number of milliseconds, then new Date (method)
6.javabean class must be public, Otherwise it will not be accessible! ! ! Be sure to use public declaration
7.BeanUtils mainly provides various operations for JavaBean.
8.forward is server forwarding, inside the servlet, and sendRedirect is redirection (through the browser).

Forward forwarding is the forwarding between the same web application implemented inside the container, so the forward method can only redirect to a resource in the same web application. After redirection, the browser address bar URL remains unchanged. , and the sendRedirect method can redirect to any URL, because this method is implemented by modifying the http header, there are no restrictions on the URL, and the browser address bar URL changes after redirection. forward redirection passes the original HTTP request object (request) from one servlet instance to another instance, and the two are not the same application using sendRedirect. Based on the second point, the parameters are passed in different ways. The forward form parameter is passed along, so the parameters of the HTTP request can be obtained in the second instance. sendRedirect can only pass parameters through the link, response.sendRedirect("login.jsp?param1=a"). The process of using forward redirection is that the browser first sends a Request request to the destination Servlet, and then the Servlet on the server side sends the request to the destination URL, and then the server-side Servlet returns the Response to the browser side. The browser and server request and respond once (3 operations). In the process of forwarding using sendRedirect, the browser first sends a request to the destination Servlet. The Servlet sees sendRedirect and returns the destination URL to the browser. The browser then requests the destination URL, and the destination URL returns the response to the browser. The browser and server request and respond twice (four operations). You can see which way is slightly faster. Request and Response are shared between the caller and the callee of the forward method. The sendRedirect method has two Request and Response due to two browser server requests. If you use request.setAttribute to pass some attributes, you need to use forward. If you want to jump to the resources of another application, you need to use sendRedirect. Neither the forward method nor the sendRedirect method is called before a PrintWriter can be output to the client.
The forward method reports an error: java.lang.IllegalStateException: Cannot forward after response has been committed
sendRedirect reports an error: java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java :435)

Let’s look at a specific example! ! ! Reference: http://zhaoyuqiang.blog.51cto.com/6328846/1132795

<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="sycode" name="code"><html> 
Copy after login
Copy after login
Copy after login
<head> 
Copy after login
Copy after login
Copy after login
<title>web</title> 
Copy after login
Copy after login
Copy after login
</head> 
Copy after login
Copy after login
Copy after login
<body> 
Copy after login
Copy after login
Copy after login
<h1>我的技术博客:http://zhaoyuqinag.blog.51cto.com</h1> 
Copy after login
</body> 
Copy after login
Copy after login
Copy after login
</html> 
Copy after login
Copy after login
Copy after login
<pre class="sycode" name="code"><%@ page  language="java" contentType="text/html" pageEncoding="gbk" %> 
Copy after login
Copy after login
<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="sycode" name="code"><html>
Copy after login
Copy after login
<head> 
Copy after login
Copy after login
Copy after login
<title>web</title> 
Copy after login
Copy after login
Copy after login
</head> 
Copy after login
Copy after login
Copy after login
<body> 
Copy after login
Copy after login
Copy after login
<%   
Copy after login
Copy after login
Copy after login
Copy after login
    System.out.println("====forward跳转之前=========");  
Copy after login
%> 
Copy after login
Copy after login
Copy after login
Copy after login
<jsp:forward page="turnAfter.html"/> 
Copy after login
<%   
Copy after login
Copy after login
Copy after login
Copy after login
    System.out.println("====forward跳转之后=========");  
Copy after login
%> 
Copy after login
Copy after login
Copy after login
Copy after login
</body> 
Copy after login
Copy after login
Copy after login
</html> 
Copy after login
Copy after login
Copy after login

Run it , looking at the results of the browser, it does jump, but the address bar has not changed. What is more interesting is to look at the results of the server, as shown below:

According to the results Display, only before the jump, not after the jump. Let's look at what happens with another jump method.

<pre class="sycode" name="code"><%@ page  language="java" contentType="text/html" pageEncoding="gbk" %> 
Copy after login
Copy after login
<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="sycode" name="code"><html>
Copy after login
Copy after login
<head> 
Copy after login
Copy after login
Copy after login
<title>web</title> 
Copy after login
Copy after login
Copy after login
</head> 
Copy after login
Copy after login
Copy after login
<body> 
Copy after login
Copy after login
Copy after login
<%   
Copy after login
Copy after login
Copy after login
Copy after login
    System.out.println("====response跳转之前=========");  
Copy after login
%> 
Copy after login
Copy after login
Copy after login
Copy after login
   <% response.sendRedirect("turnAfter.html");%> 
Copy after login
<%   
Copy after login
Copy after login
Copy after login
Copy after login
    System.out.println("====response跳转之后 =========");  
Copy after login
%> 
Copy after login
Copy after login
Copy after login
Copy after login
</body> 
Copy after login
Copy after login
Copy after login
</html> 
Copy after login
Copy after login
Copy after login

Run it and look at the server results as follows:

It can be seen that forward is an unconditional jump. The statement before the jump will be executed, but the statement after the jump will not be executed. So if JDBC is used in jsp now, it is obvious that the database must be closed before the jump, otherwise the database will never be closed again. Yes; the sendredirect jump is completed after all statements have been executed.

Related labels:
source:php.cn
Previous article:Regaining the basics of CSS? Opening_html/css_WEB-ITnose Next article:Bootstrap 3.0 LESS source code analysis (2)_html/css_WEB-ITnose
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Latest Issues
Related Topics
More>
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template