• Request和Response介绍 [Tomcat][Servlet]


    Request和Response介绍

    Request: 获取请求数据

    • 我们都是客户端从web页面向服务器端发送数据, 可能是get请求或者是post请求方式等等, 对于我们javaWeb程序(也就是运行在浏览器中的程序) 我们从浏览器中发送数据的时候都是通过http协议进行数据的发送, 这个时候如果我们的客户端向浏览器发送一个http请求数据, 那么我们的web服务器端会接收到对应的http请求数据, 然后我们的web容器(web服务器)会将接收到的请求数据封装为一个Request对象
      • 然后我们的web服务器将会将这个Request对象作为参数传入到Servlet类的service()方法中, 我们可以发现Servlet接口中定义的service()方法有两个形参, 一个是ServletRquest接口类型, 另一个是ServletResponse接口类型, 我们的service()方法中就是用来编写一些逻辑处理的代码的
        • 我们的ServletRequest接口中定义了很多的getXxx()方法, 我们可以通过对应的getXxx()方法获取到对应的请求参数值等

    Response: 设置响应数据

    • 我们的Java为我们定义了ServletResponse接口作为响应数据对象的根接口,由对应的web服务器(比如tomcat)为我们提供对应的实现类, 我们可以将我们想要响应给客户端的数据先通过ServletResponse接口中定义的一些规范方法封装到对应的Response对象中, 然后我们的web服务器在响应数据之前会将我们的Response对象中封装的数据拼接为一个符合http响应数据格式的字符串,然后将这个字符串响应给客户端 —> 也就是响应到浏览器中

    Request(请求数据对象)和Response(响应数据对象)在前后端交互中的作用:(图解)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aL3YdIC2-1655913207541)(E:\非凡英才\JavaWeb开发\Servlet\图解\Request和Response在前后端交互中的作用(Servlet)].png)

    举例理解Request对象和Response对象的作用:

    @WebServlet("/demo3")
    public class ServletDemo3 extends HttpServlet{
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) thorws ServletException,IOException{
            //使用Request对象,获取请求数据
            /*
            这个方法时获取请求参数中请求参数名为name的请求参数值
            
            我们此时的请求参数值为: url?name=zhangsan
            */
            String name = request.getParameter("name");//获取的结果应该为zhangsan
            
            //使用Response对象设置响应数据
            /*
            设置响应头数据
            */
            response.setHeader("content-type","text/html;charset=urt-8");
            /*
            通过一个输出流的方式设置响应体数据(也就是我们的响应数据)
            */
            response.getWriter().write("<h1>"+ name + ",欢迎您!<h1>");
        }
        //这里我们就不重写doPost()方法了,我们这里使用get方式的请求数据做一个测试而已
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    补充:

    service()方法是由web容器调用的, 所以我们的Request对象和Response对象也是由web容器创建的, 因为service()方法中要传入两个参数, 就是要传入一个Request对象和一个Response对象,所以其实web容器会先创建一个Request对象,然后创建一个Response对象, 并且web容器会将我们客户端发送过来的请求数据封装到一个Request对象中, 然后将这个Request对象和Response对象传入到service()方法的形参位置, 然后我们就可以通过对Request对象调用getXxx()方法来获取请求参数, 通过对Response对象的操作来将我们的响应数据封装到Response对象中, 最后向客户端响应数据的时候web容器又会将Response对象解析,获取到相应数据并拼接为一个符合http响应数据格式的字符串

    补充二:

    1. 我们通过浏览器导航栏访问的时候都是get请求方式, 我们在表达提交数据的时候可以选择以post请求的方式提交数据

    2. 通过form 表单标签的method属性设置请求方式, 通过form标签的action属性设置访问的服务器的访问路径

    补充三:

    对于请求体和响应体中的数据我们都是通过流的方式来读入和写出

    • 对于post请求方式才有请求体, 而post请求方式的请求体数据(也就是请求参数)的获取,是使用Request对象通过输入流的方式, 而对于get和post方式的响应数据都有响应体, 我们对于向Response对象中封装响应体数据是通过输出流的方式

    我们响应数据的时候通过response对象获取响应流之后通过这个流写出数据的时候其实是将数据写出到了response对象中, 然后等到我们的Servlet执行完毕之后对应的response对象就会被服务器响应到前端, 前端就会对我们响应的内容进行一个解析

  • 相关阅读:
    pytorch 保存和加载模型
    python爬虫下载音乐
    论文复现--lightweight-human-pose-estimation-3d-demo.pytorch(单视角多人3D实时动作捕捉DEMO)
    05 CSS02
    Gem5 O3 可视化
    常用数学分布
    二叉堆及堆排序详解保姆级教程略显罗嗦但保证能看懂
    hyperf 前置中间件 后置中间件
    单商户商城系统功能拆解19—订单管理
    SpringMVC获取请求参数
  • 原文地址:https://blog.csdn.net/m0_57001006/article/details/125418824