Servlet-请求转发
Servlet-请求转发
请求转发(forward): 一种在服务器内部的资源跳转方式
实现方式:
写到资源A里
req.getRequestDispatcher("资源B路径").forward(req, resp);
/**
* 转发
*/
@WebServlet("/req5")
public class RequestDemo5 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo5...");
// 请求转发
request.getRequestDispatcher("/req6").forward(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
请求转发资源间共享数据:使用Request对象
- void setAttribute(String name, Object o): 存储数据到request域中
- Object getAttribute(String name): 根据key, 获取值
- void removeAttribute(String name): 根据key, 删除该键值对
// RequestDemo5.java
/**
* 转发
*/
@WebServlet("/req5")
public class RequestDemo5 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo5...");
//存储数据
request.setAttribute("msg", "hello");
// 请求转发
request.getRequestDispatcher("/req6").forward(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
// RequestDemo6.java
/**
* 转发请求
*/
@WebServlet("/req6")
public class RequestDemo6 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo6...");
// 获取数据
Object msg = request.getAttribute("msg");
System.out.println(msg);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
请求转发的特点:
- 浏览器地址栏路径不发生变化
- 只能转发到当前服务器的内部资源
- 一次请求,可以在转发的资源间使用request共享数据