----------------siwuxie095
Servlet 跳转之请求的转发
修改
LoginServlet.java:
package com.siwuxie095.servlet; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; // LoginServlet 继承自 HttpServlet public class LoginServlet extends HttpServlet { /** * 用于序列化和反序列化的 ID */ private static final //覆盖父类 HttpServlet 的 doGet() 方法 @Override protected System.out.println("===== doGet ====="); //在 doGet() 方法里调用 doPost() 方法 //这样,GET请求和POST请求可以共用一套处理逻辑 doPost(req, resp); } //覆盖父类 HttpServlet 的 doPost() 方法 @Override protected System.out.println("===== doPost ====="); String userName=req.getParameter("uname"); String password=req.getParameter("upwd"); System.out.println("用户名:"+userName); System.out.println("密码:"+password); String forward=null; if (userName.equals("siwuxie095")&&password.equals("8888")) { //请求转发 forward="/success.jsp"; /** * 定义一个 RequestDispatcher对象 * RequestDispatcher 即 * 其对象rd封装了转发的操作,接收来自客户端的请求,然后将其转发到指定的资源上 * * 通过 req 的 getRequestDispatcher()方法获取一个RequestDispatcher对象 * 其String类型的参数 forward 表示要转发的地址 */ RequestDispatcher rd=req.getRequestDispatcher(forward); //使用forward()方法完成转发操作 rd.forward(req, resp); //请求重定向 //resp.sendRedirect(req.getContextPath()+"/success.jsp"); }else { //请求转发 forward="/error.jsp"; RequestDispatcher rd=req.getRequestDispatcher(forward); rd.forward(req, resp); //请求重定向 //resp.sendRedirect(req.getContextPath()+"/error.jsp"); } /** * 请求转发: * 整个过程只涉及一次浏览器与服务器的交互,即只有一次请求响应, * 在整个转发过程中,各组件共享同一组请求和响应对象 * * 注意:转发只能在同一应用的组件间进行,不能转发给其他应用的组件 * * 而请求重定向 sendRedirect 可以转发给其他应用地址 */ } } |
访问:localhost:8080/MyServlet/login.jsp,分别输入
siwuxie095 和 8888
转发到:http://localhost:8080/MyServlet/success.jsp,成功获取
用户名
和
密码
整个过程分析如下:
浏览器的请求首先发送给
LoginServlet
LoginServlet 处理完毕后,将 req 和 resp 对象传递给 success.jsp,
传递的过程称之为
请求转发
整个过程只涉及一次浏览器与服务器的交互,即只有一次请求响应
在整个转发过程中,各组件共享同一组请求和响应对象
注意:转发只能在同一应用的组件间进行,不能转发给其他应用的组件
而请求重定向 sendRedirect() 可以转发给其他应用地址
如:令 forward="https://www.baidu.com/"; ,将会报 HTTP Status 404 错误
说明:请求转发不能转发给其他应用的地址,而请求重定向则可以访问其他应用的地址
【made by siwuxie095】