• Servelet------08 request请求转发


    问题描述:

    当我们访问一个项目的某个Servelet资源,如果这个Servelet资源的功能并不能完全处理我们的访问需求,但是服务器中的其他Servelet资源类可以处理我们的需求,那么就可以通过请求转发的方式,将我们的请求转发给可以处理我们需要的业务逻辑的Servelet资源类。

    讲解:

    其实关于请求转发这个知识并没有那么复杂,我们知道,当我们一次访问的时候,服务器(Tomcat)会创建一个Servelet资源类的对象,并且将我们的请求信息封装到request对象中,传递给创建好的Servelet资源类对象,那么这个request对象在我们的这一次访问中是唯一的,Servelet资源类如果想要处理业务逻辑,就需要用到request对象,从request对象中获取请求信息进行业务逻辑的处理,那么请求转发中的多个Servelet资源类就需要使用同一个request对象。

    以上可以将请求转发简述为以下几步:

    • 访问资源类创建,封装传递request对象
    • 在首次访问的Servelet资源类中通过request对象处理部分业务逻辑
    • 获取请求转发器,并制定相应的Servelet资源类地址
    • 通过转发器的forword(request,response);方法将request对象传递给第二个Servelet资源类
    • 资源类在进行业务处理

    请求转发图解:

    代码演示:

    @WebServlet("/servlet01")
    public class Servlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("资源类1执行了....");
    
            request.getRequestDispatcher("/servlet02").forward(request, response);//转发
    
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doPost(request, response);
        }
    }

    资源类2

    @WebServlet("/servlet02")
    public class Servlet02 extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("资源类2执行了...");
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doPost(request, response);
        }
    }

    现在我们访问资源类1

     结果:

     但是访问的地址栏并没有发生变化:

     那么请求转发可以访问服务器外部的资源吗?

    我们讲转发路径改成百度:

     不能访问到:

     

     但是资源类1执行了:

     我们在通过浏览器拦截开发者工具检测一下请求转发是几次请求:

     一次请求

    所以请求转发的特点是:

    • 地址栏不发生变化
    • 只能访问当前服务器内部资源
    • 转发只是一次请求
    迎风少年
  • 相关阅读:
    详解 ASP.NET异步
    web开发中对网站建设
    《如何学习C++语言》和《如何学习C语言》
    WCF体系架构(之一:Client与Server信息交互处理流程初略介绍)
    常用的shell命令
    功能最强大的.Net代码生成器——EasyCode,欢迎使用
    对面向对象设计原则的总结
    学习之模块架构 DotNetNuke 6
    软件测试
    微软开放ASP.NET MVC 4、Web API和Web Pages v2的源代码
  • 原文地址:https://www.cnblogs.com/ZYH-coder0927/p/13665622.html
Copyright © 2020-2023  润新知