Servlet 入门—请求转发和重定向
入门案例以登录为例子,介绍了servlet 的概念以及请求响应模型。实际的工程中,登录后通常都会跳转到新的页面。挑战就是我们今天要学习的新的知识点。
请求转发
1. 从 index.jsp 复制一个新的页面,作为登录成功后跳转的新页面
页面内容:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>首页</title>
</head>
<body>
欢迎您, <%= request.getAttribute("username") %>
</body>
</html>
2. 修改后台 servlet
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// req 对象获取客户端发送过来的请求参数
// 解决请求参数乱码
req.setCharacterEncoding("utf-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
System.out.println("Your Input: " + username + "/" + password);
// 解决响应参数乱码
resp.setContentType("text/html;charset=utf8");
// resp.getWriter().write("登录成功!");
// 请求转发
// 1. 携带登录成功的用户名到页面
req.setAttribute("username", username);
// 2. 通过请求转发的方式,跳转到 success.jsp 页面
req.getRequestDispatcher("success.jsp").forward(req, resp);
}
3. 启动 tomcat 验证
输入用户名密码,点击登录后:
重定向
1. 修改 success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>首页</title>
</head>
<body>
欢迎您, <%= session.getAttribute("username") %>
</body>
</html>
2. 修改后台 servlet
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// req 对象获取客户端发送过来的请求参数
// 解决请求参数乱码
req.setCharacterEncoding("utf-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
System.out.println("Your Input: " + username + "/" + password);
// 解决响应参数乱码
resp.setContentType("text/html;charset=utf8");
// resp.getWriter().write("登录成功!");
// 重定向
// 1. 携带登录成功的用户名到页面
req.getSession().setAttribute("username", username);
// 2. 通过重定向的方式,跳转到 success.jsp 页面
resp.sendRedirect("success.jsp");
}
3. 启动 tomcat ,验证
区别
跳转页面可以通过请求转发和重定向中的任意一种方式实现,具体区别:
1. 请求转发是 request 对象的方法,重定向是 response 的方法;
2. 请求转发,转发的是同一个请求,request.setAttribute 后,页面中还能通过 request 获取传参;
重定向,是让浏览器发第二次请求,所以无法继续通过 request 传递参数,需要借助 session !
3. 浏览器地址栏变化:请求转发地址栏不会变化,重定向地址栏会变成新的地址!
如果觉得还不错的话,关注、分享、在看(关注不失联~), 原创不易,且看且珍惜~