学科分类
目录
Java Web

请求重定向

在某些情况下,针对客户端的请求,一个Servlet类可能无法完成全部工作。这时,可以使用请求重定向来完成。所谓请求重定向,指的是Web服务器接受到客户端的请求后,可能由于某些条件限制,不能访问当前请求URL所指向的Web资源,而是指定了一个新的资源路径,让客户端重新发送请求。

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

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

需要注意的是,参数location可以使用相对URL,Web服务器会自动将相对URL翻译成绝对URL,再生成Location头字段。

为了使大家更好地了解sendRedirect()方法如何实现请求重定向,接下来,通过一个图例来描述sendRedirect()方法的工作原理,如图1所示。

图1 sendRedirect()方法的工作原理

在图1中,当客户端访问Servlet1时,由于在Servlet1中调用了sendRedirect()方法将请求重定向到Servlet2中,因此,Web服务器在收到Servlet1的响应消息后,立刻向Servlet2发送请求。Servlet2对请求处理完毕后,再将响应消息回送给客户端。

了解了sendRedirect()方法的工作原理,接下来,通过一个用户登录的案例,分步骤讲解sendRedirect()方法的使用,具体如下:

(1)编写用户登录的界面login.html和登录成功的界面welcome.html,如例1、例2所示。

例1 login.html

 1    <!--把表单内容提交到chapter05工程下的LoginServlet-->
 2    <form action="/chapter05/LoginServlet" method="post">
 3        用户名: <input type="text" name="username" /><br> 
 4        密  码: <input type="password" name="password" /><br> 
 5        <input type="submit" value="登录" />
 6    </form>

例2 welcome.html

 1    <html>
 2        <head>
 3            <title>Insert title here</title>
 4        </head>
 5        <body>
 6            欢迎你,登录成功!
 7        </body>
 8    </html>

(2)编写处理用户登录请求的LoginServlet,如例3所示。

例3 LoginServlet.java

 1    package cn.itcast.chapter05.response; 
 2    import java.io.*;
 3    import javax.servlet.*;
 4    import javax.servlet.http.*;
 5    public class LoginServlet extends HttpServlet {
 6        public void doGet(HttpServletRequest request, 
                          HttpServletResponse response)
 7                throws ServletException, IOException {
 8            response.setContentType("text/html;charset=utf-8");
 9            // 用HttpServletRequest对象的getParameter()方法获取用户名和密码
 10            String username = request.getParameter("username");
 11            String password = request.getParameter("password");
 12            // 假设用户名和密码分别为:itcast和123
 13            if (("itcast").equals(username) &&
                ("123").equals(password)) {
 14                // 如果用户名和密码正确,重定向到 welcome.html
 15                  response.sendRedirect("/chapter05/welcome.html");
 16            } else {
 17                // 如果用户名和密码错误,重定向到login.html
 18                response.sendRedirect("/chapter05/login.html");
 19            }
 20        }
 21        public void doPost(HttpServletRequest request, 
                           HttpServletResponse response)
 22                throws ServletException, IOException {
 23            doGet(request, response);
 24        }
 25    }

在例3中,判断表单中如果输入的用户名为“itcast”,密码为“123”,将请求重定向到welcome.jsp页面,否则重定向到login.html页面。

(3)在web.xml中配置完LoginServlet映射后,启动Tomcat服务器,在浏览器的地址栏中输入URL地址http://localhost:8080/chapter05/login.html访问login.html,浏览器显示的结果如图2所示。

图2 运行结果

(4)在图2所示的界面填写用户名“itcast”,密码“123”,点击登录按钮,浏览器显示的结果如图3所示。

图3 运行结果

从图3中可以看出,当用户名和密码输入正确后,浏览器跳转到了welcome.html页面。但是,如果用户名或者密码输入错误,则会跳转到如图2所示的页面。

点击此处
隐藏目录