什么是转发和重定向?两者之间有什么区别?

转发和重定向

Forward(转发)
如果请求之后希望跳转到另一个页面,转发和重定义均可以做到,如果想要回传信息的时候,这个时候只有转发才能做到

特点:
转发使用的是request对象,当浏览器请求到达servlet时候不会结束,而是等待处理完成之后继续跳转一次页面,因为request是一个作用域,故可以将信息携带到指定的参数到指定的页面中去

总结:
1.转发是在服务器内部实现的,故不用写虚拟目录
2.只有一次请求,一次响应
3.浏览器地址栏不会有什么变化
4.转发的页面是最后的路径的响应

工作流程图:
什么是转发和重定向?两者之间有什么区别?_第1张图片
例如举个例子:
什么是转发和重定向?两者之间有什么区别?_第2张图片
登录成功跳转页面:
在这里插入图片描述

package cn.ujiuye.servlet;
import cn.ujiuye.domin.User;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/successServlet")
public class SuccessServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取用户的用户名
        User user = (User) request.getAttribute("user");
        if (user != null){
            //1.设置编码格式
            response.setContentType("text/html;charset=utf-8");
            //2.输出语句
            response.getWriter().write("登录成功,用户名是"+user.getUsername());
        }
    }

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

什么是转发和重定向?两者之间有什么区别?_第3张图片
Redirect重定向
当请求传达到servlet的时候,我们会同样可以通过response对象去跳转到新的页面,但是这种跳转不能携带参数,因为response没有域对象,相当于服务器重新做了一个新的url,和原来的对象没有什么关系了,实际上发生了新的资源定位,重定向发生了两次的资源的跳转,资源会相对的消耗点
什么是转发和重定向?两者之间有什么区别?_第4张图片
以登录页面验证重定向:
什么是转发和重定向?两者之间有什么区别?_第5张图片
在这里插入图片描述
什么是转发和重定向?两者之间有什么区别?_第6张图片
什么是转发和重定向?两者之间有什么区别?_第7张图片

你可能感兴趣的:(Javaweb)