请求的转发

请求的转发

什么是请求的转发?

请求转发是指,服务器收到请求后,从一个资源跳转到另一个资源的操作。

下面是一个示例,带参数访问servlet1,servlet1会跳转到servlet2.

servlet1

package LWB;

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

public class Servlet1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username=req.getParameter("username");
        System.out.println("在Servlet1中查看参数"+username);
        req.setAttribute("key1","柜台1的章");
        //请求转发必须要以斜杠打头,斜杠表示地址为:http://ip:port/工程名/,映射到IDEA代码的web目录
        RequestDispatcher requestDispatcher=req.getRequestDispatcher("/servlet2");
        requestDispatcher.forward(req,resp);

    }
}

servlet2

package LWB;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class Servlet2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username=req.getParameter("username");
        System.out.println("在Servlet2中查看参数"+username);
        Object key1=req.getAttribute("key1");
        System.out.println("柜台1是否有章:"+key1);
        //处理自己的业务
        System.out.println("Servlet2处理自己的业务");
    }
}

请求转发的特点:

1、浏览器地址栏没有变化

2、请求转发是一次请求

3、他们共享Request域中的数据

4、可以转发到WEB-INF目录下,因为一般情况下,WEB-INF目录是没有办法直接进行访问的,但是可以通过请求转发跳转到WEB-INF目录中。

5、不能访问工程以外的资源

原文地址:https://www.cnblogs.com/fate-/p/14791936.html