请求转发(forward):一种服务器内部的资源跳转方式
reg.getRequestDispatcher("要跳转的路径").forward(req,resp);
创建两个Servlet,并配置他们的访问路径
- 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("/d3")
- public class ServletForward3 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- System.out.println("d3.........");
- req.getRequestDispatcher("/d4").forward(req,resp);
- }
-
- }
通过上面的程序,请求转发给下面的程序
- 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("/d4")
- public class ServletForward4 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- System.out.println("d4.......");
- }
-
- }
最后输出 d3.........
d4............
请求转发资源之间共享数据:使用Request对象
void setAttribute(String name,Object o) 存储数据到request域中。
Object getAttribute(String name) 根据键,获取值
void removeAttribute(String name) 根据键,删除键值对
- 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("/d3")
- public class ServletForward3 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- System.out.println("d3.........");
- req.setAttribute("张三","男");
- req.getRequestDispatcher("/d4").forward(req,resp); //数据存入域
- }
- }
- 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("/d4")
- public class ServletForward4 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- System.out.println("d4.......");
- System.out.println(req.getAttribute("张三"));// 通过键获取域中的值
-
- }
-
- }
最后输出 :男
共享数据就成功了
浏览器地址栏路径不发生变化
只能请求转发到当前服务器的内部资源
一次请求,可以转发的资源之间使用request共享数据