HttpServletResponse应用(三)sendRedirect()实现请求重定向

说明

当Web服务器接收到客户端的请求后,可能由于某些条件限制,不能访问当前请求URL所指向的Web资源,而是指定了一个新的资源路径,让客户端重新发送请求。

为了实现重定向,在HttpServletResponse接口中定义了一个sendRedirect()方法,该方法用于生成302响应码和Location响应头,从而通知客户端重新访问Location响应头中指定的URL。

sendRedirect()完整语法

public void sendRedirect(java.lang.String location) throws java.io.IOException

其中参数location可以是相对URL或者绝对URL。

sendRedirect()工作原理

1.浏览器 ——>请求Servlet1——>WEB服务器(servlet容器)

2.Servlet1中执行senRedirect()——>通知浏览器重定向到Servlet2——>浏览器

3.浏览器——>请求Servlet2——>Servlet2收到

4.Servlet2——>回送响应消息——>浏览器

sendRedirect()具体使用

编写登录页面login.html和欢迎页面welcome.html

在创建的项目的WebContent文件夹下创建login.html和欢迎页面welcome.html,代码如下:

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>登录页面</title>
</head>
<body>
    <!--把表单提交到chapter04工程下的LoginServlet-->
    <form action="/chapter04/LoginServlet" method="GET">
        用户名:<input type="text" name="username">
        <br>
        密&nbsp;&nbsp;&nbsp;码:<input type="password" name="password">
        <br>
        <input type="submit" value="登录">
    </form>
</body>
</html>

welcome.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>欢迎页面</title>
</head>
<body>
    <h1>
        登录成功!!!
    </h1>
</body>
</html>

编写处理登录请求的Servlet类LoginServlet

LoginServlet代码:

public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	//处理用户登录请求
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		//用HttpServletRequest对象的getParameter()方法获取用户名和密码
		String username=request.getParameter("username");
		String password=request.getParameter("password");
		//假设用户名和密码分别:wangdong和101203
		if(("wangdong").equals(username)&&("101203").equals(password)) {
			//如果用户名和密码正确,重新定向到welcome.html页面
			response.sendRedirect("/chapter04/welcome.html");
		}else {
			//如果错误,重定向到login.html页面
			response.sendRedirect("/chapter04/login.html");
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}
//	http://localhost:8080/chapter04/login.html
}

运行login.html登录页面

1.当密码错误时,重定向到login.html页面
假设
用户名:wangdong
密 码:101203

(1)输入错误密码
HttpServletResponse应用(三)sendRedirect()实现请求重定向
(2)提交后又直接返回登录页面
HttpServletResponse应用(三)sendRedirect()实现请求重定向
2.当用户名和密码都正确时,跳转到welcome.html页面

(1)输入正确用户名和密码
HttpServletResponse应用(三)sendRedirect()实现请求重定向
(2)跳转到welcome.html页面
HttpServletResponse应用(三)sendRedirect()实现请求重定向

上一篇:检查一个数值是否为有限的Number.isFinite()


下一篇:JavaScript 学习笔记 语法基础——操作符之 + 运算符