跳转
概述
在servlet中实现资源的跳转。包含请求转发和重定向两种方式
重定向
概述
请求发送给服务器后,服务器产生新的地址并发送给客户端;
客户端接收到新地址后重新发送请求并得到响应。
实现
response对象.sendRedirect(URL);
@WebServlet(urlPatterns = {"/Redirect01"})
public class Redirect01 extends HttpServlet {
private static final long serialVersionUID = -5096088127501474424L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("我是 Redirect01");
request.setAttribute("slogan","桃李不言下自成蹊");
// 网页重定向
response.sendRedirect(request.getContextPath() + "/Redirect02");
}
}
@WebServlet(urlPatterns = {"/Redirect02"})
public class Redirect02 extends HttpServlet {
private static final long serialVersionUID = -1046620871038602664L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("我是 Redirect02");
// 网页重定向
response.sendRedirect(request.getContextPath() + "/Redirect03");
}
}
@WebServlet(urlPatterns = {"/Redirect03"})
public class Redirect03 extends HttpServlet {
private static final long serialVersionUID = -1514803687180205194L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String slogan = (String) request.getAttribute("slogan");
System.out.println("slgoan >>> " + slogan);
System.out.println("我是 Redirect03");
}
}
@WebServlet(urlPatterns = {"/RedirectOuter"})
public class RedirectOuter extends HttpServlet {
private static final long serialVersionUID = -1514803687180205194L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("我是 RedirectOuter");
// 网页重定向
response.sendRedirect("https://blog.csdn.net/qq_24330181");
}
}
请求转发
概述
请求发送给服务器,服务器经过内部跳转后将响应结果发送给客户端。
实现
request对象.getRequestDispatcher(URL).forward(request对象,response对象);
@WebServlet(urlPatterns = {"/Forword01"})
public class Forword01 extends HttpServlet {
private static final long serialVersionUID = 2433576604630172419L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("我是Forword01");
// 向request域中存储数据 与request绑定
request.setAttribute("slogan","桃李不言下自成蹊");
// 请求转发
request.getRequestDispatcher("/Forword02").forward(request, response);
}
}
@WebServlet(urlPatterns = {"/Forword02"})
public class Forword02 extends HttpServlet {
private static final long serialVersionUID = -3977086887896944656L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("我是Forword02");
// 请求转发
request.getRequestDispatcher("/Forword03").forward(request, response);
}
}
@WebServlet(urlPatterns = {"/Forword03"})
public class Forword03 extends HttpServlet {
private static final long serialVersionUID = -4225527567848221026L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String slogan = (String) request.getAttribute("slogan");
System.out.println(slogan);
System.out.println("我是Forword03");
}
}
@WebServlet(urlPatterns = {"/ForwardInner01"})
public class ForwardInner01 extends HttpServlet {
private static final long serialVersionUID = -8498702182563506773L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("我是 ForwardInner01");
request.getRequestDispatcher("/forward.jsp").forward(request, response);
}
}
@WebServlet(urlPatterns = {"/ForwardInner02"})
public class ForwardInner02 extends HttpServlet {
private static final long serialVersionUID = -5216328735605010196L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("我是 ForwardInner02");
request.getRequestDispatcher("/forward/forward.jsp").forward(request, response);
}
}
@WebServlet(urlPatterns = {"/ForwardInner03"})
public class ForwardInner03 extends HttpServlet {
private static final long serialVersionUID = 8277160841787323521L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("我是 ForwardInner03");
request.getRequestDispatcher("/WEB-INF/forward.jsp").forward(request, response);
}
}
@WebServlet(urlPatterns = {"/ForwardOuter"})
public class ForwardOuter extends HttpServlet {
private static final long serialVersionUID = -6089159988815403493L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("我是 ForwardOuter");
// 请求无法跳转到站外站点
request.getRequestDispatcher("https://space.bilibili.com/480308139").forward(request, response);
}
}
问
请求转发与重定向有什么不同?
1、重定向地址栏发生改变;请求转发地址栏不发生改变
2、重定向需要进行二次跳转;请求转发一次跳转完成
3、重定向过程中参数会丢失;请求转发过程中参数不会丢失
4、重定向可以跳转到服务器以外的资源;请求转发无法跳转到服务器以外的资源
5、重定向一次跳转后返回302码及ULR地址;请求转发直接返回200
6、重定向无法跳转WEB-INF目录内的站点;请求转发可以跳转WEB-INF目录内的站点
使用
1、重定向:a、服务器外的跳转;b、浏览器地址栏需要改变
2、请求转发:a、不访问外部资源;b、参数不能丢参数失