如何实现HTTP协议中重定向?

我是一个新的java学习爱好者,业余的时候写一些简单的技术博客供大家一起学习交流,欢迎大家互相学习,共同进步。如果有什么不正确或者有什么建议欢迎指教!!

在学java web的时候遇到一个重定向的问题。

首先讲解下什么是重定向:在 HTTP 协议中,重定向操作由服务器通过发送特殊的响应(即 redirects)而触发。HTTP 协议的重定向响应的状态码为 3xx 。浏览器在接收到重定向响应的时候,会采用该响应提供的新的 URL ,并立即进行加载;大多数情况下,除了会有一小部分性能损失之外,重定向操作对于用户来说是不可见的。

简单的说就是:客户端向服务器发送请求,但是服务器的某个资源完成不了这个请求,让客户端去请求另一个资源来完成请求。就是一个请求转发的过程。

我是采用IntelliJ IDEA来完成的,首先先new两个Servlet,在这里实现httpServlet,起名responseDemo1和responseDemo2。

其实重定向有两种方式:
第一种:

1、设置状态码为302:response.setStatus(302);
2、设置响应头的location,设置请求资源路径 response.setHeader(“location”,“资源路径”);
第二种 :
直接调用response.sendRedirect(“资源路径”)

第一个Servlet代码如下:
`package cn.itcast.servlet;

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;

@WebServlet("/responseDemo1")
public class responseDemo1 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws 		ServletException, IOException {
    System.out.println(request.getMethod());
    System.out.println("responseDemo1.....");
   /* //设置状态码302
    response.setStatus(302);
    //设置资源路径
    response.setHeader("location", "/day15/responseDemo2");*/
   response.sendRedirect("/day15/responseDemo2");
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    this.doPost(request,response);
}

}
`
第二个如下:

`	package cn.itcast.servlet;

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;

@WebServlet("/responseDemo2")
public class responseDemo2 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    System.out.println(request.getMethod());
    System.out.println("responseDemo2.......");
}

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    this.doPost(request,response);
}

}
`

你可能感兴趣的:(java,web,Servlet,Response)