请求转发
目的:将页面请求转发到其他页面
实现:
第一步:
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地址会改变