客户端跳转(重定向):
客户端给服务器发送一个请求,服务器给客户端一个响应(响应包含一个URL),客户端根据这个响应中的URL再次向服务器发送一个请求。地址栏改变。客户端跳转是两次请求,服务器给出两次响应。
服务器端跳转(forward):
客户端给服务器发送一个请求,服务器直接访问目标地址的URL,将URL的相应内容读取过来,再将这些内容发送给客户端。客户端不知道内容来自哪里,故地址栏不改变。客户端发送一次请求,服务器给出一次响应。
forward与redirect的区别:
Redirect | Forward |
---|---|
不同的request | 不同的对象,但可以取到上一个页面的内容 |
send后面的语句会继续执行,除非return | forward后的语句不执行 |
速度慢 | 速度快 |
需要到客户端的往返,可以跳转到任何页面 | 服务器内部转换 |
地址栏有变化 | 地址栏没有变化 |
可以传参数,直接写在URL后面 | 可以传参数 |
<%response.sendRedirect();%><’form action=”/test/ServletToJSP”><’a href=”/test/ServletToJSP”>test | this.getServletContext().getRequestDispatcher(“/servlet_jsp/ServletUseJSP.jsp”).forward(req,resp); 并且只能以 / 开 |