转发与重定向区别

重点:
请求转发和重定向的区别:
本质区别:请求转发只发了一次请求,重定向发了两次请求
1)请求转发:地址栏还是初始请求的地址
重定向:地址栏不是第一次请求的地址,是最后一次请求的地址
2)请求转发:在最终的servlet中,request对象和中转的request对象是同一个request对象
重定向:在最终的servlet中request对象和中转对象的request的对象不再是同一个request对象
3)请求转发:/代表当前web应用根目录 http://localhost:8989/servlet02--->这就是当前web应用根目录
重定向:/ 代表当前Web站点的根目录 http://localhost:8989---->这就是当前Web站点的根目录
4)请求转发:只能转发当前Web应用下的资源
重定向:可以重定向到外部资源

 

one.html:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="forWardServlet">请求转发</a>
<br/>
<a href="redriceServlet">重定向</a>
</body>
</html>

转发:ForWordServlet.java

package com.hpe.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/forWardServlet")
public class ForWardServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
   
    public ForWardServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("ForWardServlet.......");
        //向request中设置值
        request.setAttribute("name","ForWardServlet");
        String name = (String) request.getAttribute("name");
        System.out.println(name);
        //请求转发
        request.getRequestDispatcher("testServlet").forward(request, response);
        
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
    }

}

重定向:RedriceServlet.java

 

package com.hpe.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/redriceServlet")
public class RedriceServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    public RedriceServlet() {
        super();
    }

    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("RedriceServlet.......");
        //向request中设置值
        request.setAttribute("name","RedriceServlet");
        String name = (String) request.getAttribute("name");
        System.out.println(name);
        //重定向:
        response.sendRedirect("testServlet");
    }

    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }

}

 

posted @ 2019-09-17 21:29  专心搞开发  阅读(235)  评论(0)    收藏  举报