(十一)Servlet教程——Request请求转发

本文详细介绍了JavaWeb开发中如何通过Servlet实现请求转发,包括创建Servlet、设置请求属性、转发过程以及转发的特点,如不支持跨域、URL不变、共享请求/响应对象等。
摘要由CSDN通过智能技术生成

1.Web应用在处理客户端的请求的时候,一般的时候都需要多个资源协同处理,比如先经过一个Servlet的处理,然后再经过另外一个Servlet的处理。但是在一个Servlet中又不能直接调用另外一个Servlet的service方法,所以Servlet就提供了请求转发解决方案。

2.这里省略掉创建Java Web项目以及创建包的步骤,直接在原来创建好的项目中直接创建Servlet。

3.创建一个ServletA实现HttpServlet规范,并重写service方法

此时从ServletA中请求转发到ServletB,此时假定ServletB访问路径是req02。

@WebServlet("/req01")

public class ServletA extends HttpServlet {

    @Override

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

        System.out.println("request a");

        request.getRequestDispatcher("req02").forward(request,response);

    }

}

4.创建一个ServletB实现HttpServlet规范,并重写service方法。

@WebServlet("/req02")

public class ServletB extends HttpServlet {

    @Override

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

        System.out.println("request B");

    }

}

5.在浏览器地址栏中输入:http://localhost:8686/s01/req01 ,可以看到控制台中会输入如下信息

可以看到调用完了ServletA后,接着调用ServletB

改写ServletA的代码

@WebServlet("/req01")

public class ServletA extends HttpServlet {

    @Override

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

        //设置HTTP响应的编码以及浏览器显示的编码

        response.setContentType("text/html;charset=UTF-8");

        System.out.println("request a");

        request.setAttribute("servletName","第一个Servlet");

        request.setAttribute("url","地址");

        request.getRequestDispatcher("req02").forward(request,response);

    }

}

7.改写ServletB的代码

@WebServlet("/req02")

public class ServletB extends HttpServlet {

    @Override

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

        response.setContentType("text/html;charset=UTF-8");

        System.out.println("request B");

        String servletName = (String) request.getAttribute("servletName");

        String url = (String) request.getAttribute("url");

        System.out.println("servletName:" + servletName + "  url:" + url);

    }

}

8.刷新之前浏览ServletA的网页,Idea控制台中输入内容如下

9.可以看到在ServletA中设置的请求属性可以在ServletB中接收

10.下面总结一下请求转发具有以下特点:

① 请求转发不支持跨域访问,只能跳转到当前应用中的资源。

② 请求转发之后,浏览器地址栏中的 URL 不会发生变化,因此浏览器不知道在服务器内部发生了转发行为,更无法得知转发的次数。

③ 参与请求转发的 Web 资源之间共享同一 request 对象和 response 对象。

④ 由于 forward() 方法会先清空 response 缓冲区,因此只有转发到最后一个 Web 资源时,生成的响应才会被发送到客户端。 

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Jerry95270628

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

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

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

打赏作者

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

抵扣说明:

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

余额充值