请求的转发

什么是请求的转发?

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

 

请求转发的特点

1、浏览器地址栏没有变化
2、它们是一次请求
3、它们共享Request域中的数据。在Servlet1中把数据保存到request对象中,也就是用setAttribute,然后又把request对象传到Servlet2中去使用,forward     把这东西传进去,那Servlet2中的request就是那边传过去的,所以域数据是一样的,所以它们的请求参数都一样。
4、可以转发到WEB-INF目录下,我们的工程名是映射到web目录,到了web目录以后,有WEB-INF,将一个网页放到WEB-INF下是不能访问的,我们要怎样才能     进行访问?我们可以使用请求转发,它可以进去,那么就可以这样写:

RequestDispatcher requestDispatcher = request.getRequestDispatcher("/WEB-INF/form.html");
5、不能访问工程以外的资源。

 


这里我们创建两个Servlet。

package com.servlet.one;

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 request, HttpServletResponse response) throws ServletException, IOException {
	  // 获取请求的参数(办事的材料) 查看
      String username = request.getParameter("username");
	  System.out.println("在Servlet1(柜台1)中查看参数(材料):"+username);
	  
	  //给材料盖一个章,并传递到Servlet2(柜台2)去查看
	  request.setAttribute("key","柜台1的章");
	  
	  //问路:Servlet2(柜台2)怎么走
	  /**
	   * 请求转发必须要以斜杆打头,/ 斜杆表示地址为:http://ip:port/工程名/,映射到IDEA代码的web目录
	   */
//	  RequestDispatcher requestDispatcher = request.getRequestDispatcher("servlet2");
	  RequestDispatcher requestDispatcher = request.getRequestDispatcher("/WEB-INF/form.html");
	  
	  //走向Servlet2(柜台2)
	  requestDispatcher.forward(request,response);

   }
}
package com.servlet.one;

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 request, HttpServletResponse response) throws ServletException, IOException {
      // 获取请求的参数(办事的材料) 查看
      String username = request.getParameter("username");
      System.out.println("在Servlet2(柜台2)中查看参数(材料):"+username);
      
      //查看柜台1是否有盖章
      Object key = request.getAttribute("key");
      System.out.println("柜台1是否有章:"+key);
      
      //处理自己的业务
      System.out.println("Servlet2处理自己的业务");
   }
}

这里要注意,我们把前端页面放到WEB-INF下面是不能访问的,我们可以利用请求转发来访问

RequestDispatcher requestDispatcher = request.getRequestDispatcher("/WEB-INF/form.html"); 

 


还有一个就是,请求转发只能访问工程内的资源,不能访问工程外的资源。我们可以试一下请求转发到百度。

你给的地址,它是给到当前工程下去访问了,它不允许我们出站,请求转发只能在自己工程进行跳转。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GodAiro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值