天天看点

请求转发和响应重定向

请求转发

目的:将页面请求转发到其他页面

实现:

第一步:

RequestDispatcher rd = request.getRequestDispatcher(String path)

第二步:

rd.forward(request,response)

说明:path可以是绝对路径即以

/

开头 它被解释为 相当于当前应用程序的文档根目录

也可以是相对路径不以

/

开头 它被解释为相对于当前资源所在目录

示例:

package com.cq;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(name = "LoginServlet",urlPatterns="/LoginServlet")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        response.setContentType("text/html;charset = UTF-8");
        PrintWriter out = response.getWriter();

        out.println("<!DOCTYPE html>");
        out.println("<html><body>");
        if("admin".equals(username)&&"admin".equals(password)){
            //out.println("登录成功!欢迎您"+username);
            request.setAttribute("username",username);//存数据
            RequestDispatcher rd = request.getRequestDispatcher("index.jsp");//创建对象
            rd.forward(request,response);//请求转发
        }else{
            //out.print("对不起!您的用户名或密码不正确.");
            RequestDispatcher rd = request.getRequestDispatcher("/login.html");
            rd.forward(request,response);
        }
        out.println("</html></body>");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

           

响应重定向

Servlet接受请求后 不直接向浏览器发送响应 而是像浏览器发送一个Location响应头 告诉浏览器再次请求别的资源 这称为响应重定向

实现方式:

sendRedirect(String location)

比如

response.sendRedirect("http://www.baidu.com");

请求转发与响应重定向区别:

1.请求转发只是一次请求 服务器帮你访问转发地址(只能在服务器内部) 然后响应,而响应重定向是 服务器告诉浏览器再次访问别的资源 所以浏览器会请求两次 所以请求转发地址不会变 重定向 url地址会改变

继续阅读