请求转发forward()
请求转发:一种在服务器内部的资源跳转方式
步骤:
- 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
- 使用RequestDispatcher对象来进行转发:forward(ServletRequest request, ServletResponse response)
代码实现:
1.通过request对象获取请求转发器对象
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/zhuanfaDemo02");
2.使用RequestDispatcher对象来进行转发
requestDispatcher.forward(request,response);
3.简单的转发方法:链式编程(常用)
request.getRequestDispatcher("/zhuanfaDemo02").forward(request,response)
特点:
- 浏览器地址栏路径不发生变化
- 只能转发到当前服务器内部资源中。
- 转发是一次请求,能使用request对象来共享数据
实例代码
第一个页面
@WebServlet("/zhuanfaDemo01")
public class zhuanfaDemo01 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("第一个页面被访问");
//通过request对象获取请求转发器对象
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/zhuanfaDemo02");
//使用RequestDispatcher对象来进行转发
requestDispatcher.forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
第二个页面
@WebServlet("/zhuanfaDemo02")
public class zhuanfaDemo02 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("第二个页面被访问了");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
重定向:sendRedirect()
重定向:资源跳转的方式
步骤:
- 设置状态码为302
2.设置响应头location
代码实现:
1. 设置状态码为302
response.setStatus(302);
2.设置响应头location
response.setHeader("location","/day15/responseDemo2");
3.简单的重定向方法(常用)
response.sendRedirect("/day15/responseDemo2");
重定向的特点:redirect
- 地址栏发生变化
-
重定向可以访问其他站点(服务器)的资源(例如访问百度)
-
重定向是两次请求。不能使用request对象来共享数据
实例代码
第一个页面
@WebServlet("/cdxDemo01")
public class cdxDemo01 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("第一个页面被访问了");
//访问cdxDemo01会自动跳转到cdxDemo02
// //重定向方法一
// //1.设置状态码
// response.setStatus(302);
// //2.设置响应头
// response.setHeader("location","/code1/cdxDemo02");
//重定向方法二
//可以访问其他服务器资源
response.sendRedirect("http://www.baidu.com");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
第二个页面
@WebServlet("/cdxDemo02")
public class cdxDemo02 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("第二个页面被访问了");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}