重定向
resp.sendRedirect(“重定向位置”);
原理:
web资源A收到客户端请求后,会通知客户端去访问另一个web资源B,这个过程叫重定向。
- 常见场景:用户登录(登录后跳转到另一个页面)
public void sendRedirect(String location) throws IOException;
测试
//RequestTest.java
public class RequestTest extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//System.out.println("进入请求");
String username = req.getParameter("username"); //从请求里获取参数
String password = req.getParameter("password");
//输出
System.out.println(username + ":" + password);
//重定向:注意路径问题,如果不带/r会报404
resp.sendRedirect("/r/success.jsp");
/*
原理:
resp.setHeader("Location", "/r/img");
resp.setStatus(302);
*/
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
//index.jsp
<html>
<body>
<h2>Hello World!</h2>
<%--这里提交的路径,需要寻找到项目的路径--%>
<%--${pageContext.request.contextPath}代表当前的项目--%>
<form action="${pageContext.request.contextPath}/login" method="get">
账号:<input type="text" name="username"> <br>
密码:<input type="password" name="password"> <br>
<input type="submit">
</form>
</body>
</html>
//success.jsp
<%--
Created by IntelliJ IDEA.
User: ℒ ℬ
Date: 2020/12/2
Time: 8:56
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>Success</h1>
</body>
</html>
注意:${pageContext.request.contextPath}代表当前的项目
面试题:重定向和转发的区别?
相同点:
- 页面都会实现跳转
不同点:
- 请求转发的时候,url不会产生变化
- 重定向的时候,url地址栏会发生变化