• HTTP协议及Servlet类笔记


    什么是http?
    客户端和服务器之间发送的数据,需要遵守的规则。http协议中的数据又叫做报文。
    客户端给服务器发送数据叫请求,服务器给客户端回传数据叫响应。
    请求又分为GET、POST协议
    1、GET请求
    1.1请求行
    (1)请求的方式(“GET”)
    (2)请求的资源路径(+?+请求参数)
    (3)请求的协议和版本号(HTTP/1.1)
    1.2请求头
    key:value 组成 不同的键值对表示不同的含义

    在这里插入图片描述
    2、POST请求
    2.1请求行
    (1)请求的方式(“GET”)
    (2)请求的资源路径(+?+请求参数)
    (3)请求的协议和版本号(HTTP/1.1)
    2.2请求头
    key:value 组成 不同的键值对表示不同的含义
    空行
    2.3请求体
    就是发送给服务器的数据
    以下时POST请求HTTP协议内容
    在这里插入图片描述
    在这里插入图片描述
    常用请求头说明:
    Accept:表示客户端可以接受的数据类型
    Accept-Language:表示客户端可以接受的语言类型
    User-Agent:表示客户端浏览器的信息
    Host:表示请求时的服务器ip和端口号port
    那些是GET请求,哪些是POST请求?
    GET请求有哪些?
    1、form标签 method=get
    2、a标签
    3、link标签引入css
    4、Script标签引入js文件’
    5、img标签引入图片
    6、iframe引入html页面
    7、在浏览器地址栏中输入地址后回车
    POST请求有哪些?
    form标签 method=post
    响应的HTTP协议格式
    1、响应行
    (1)响应的协议和版本号 HTTP/1.1
    (2)响应状态码 200
    (3)响应状态描述符
    2、响应头
    (1) key:value 不同的响应头有不同的意义
    空行
    3、响应体 就是服务器给客户端回传的数据
    实例:
    在这里插入图片描述
    常用的响应码说明:
    200 表示请求成功
    302 表示请求重定向
    404 表示请求服务器已经收到,但是你要的数据不存在(请求地址错误)
    500 服务器已经收到请求,但是服务器内部错误(代码错误)
    HttpServletRequest类
    1、HttpServletRequest类有什么作用?
    每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Request对象中。然后传递到service方法(doGet和doPost)中给我们使用,我们可以通过HttpServletRequest对象,获取到所有请求的信息。
    2、HttpServletRequest类的常用方法
    (1)getRequestURI() 获取请求的资源路径
    (2)getRequestURL() 获取请求的统一资源定位符(绝对路径)
    (3)getRemoteHost() 获取客户端的ip地址
    (4)getHeader() 获取请求头
    (5)getParameter() 获取请求的参数
    (6)getParameterValues() 获取请求的参数(多个值的时候使用)
    (7)getMethod() 获取请求的方式POST或GET
    (8)setAttribute(key,value) 设置域数据
    (9)getAttribute(key) 获取域数据
    (10)getRequestDispatcher() 获取请求转发对象

    请求的转发:
    是指服务器收到请求后,从一个资源跳转到另一个资源的操作叫请求转发。
    在这里插入图片描述
    请求转发的特点:
    1、浏览器地址栏没有变化
    2、他们是一次请求
    3、所以他们共享Request域中的数据
    4、可以转发到WEB-INF目录下
    5、是否可以访问工程以外的资源
    base标签
    在这里插入图片描述
    Web中的相对路径和绝对路径
    相对路径是:

    .		表示当前目录
    ..		表示上一级目录
    资源名	表示当前目录/资源名
    
    • 1
    • 2
    • 3

    绝对路径:
    http://ip:port/工程路径/资源路径
    Web中 / 的不同意义
    在web中 / 是一种绝对路径
    / 如果被浏览器解析,得到的地址是:http://ip:port

    <a href="/">斜杠</a>
    
    • 1

    / 如果被服务器解析,得到的地址是:http://ip:port/工程路径
    1、<url-pattern>/fc</url-pattern>
    2、servletContext.getRealPath("/")
    3、request.getRequestDispatcher("/")
    特殊情况:
    responce.sendRediect(“/”) 把斜杠发送给浏览器解析,得到http://ip:port/

    HttpServletResponse类的作用
    HttpServletResponse类和HttpServletRequest类一样。每次请求进来,Tomcat服务器都会创建一个Response对象传递给Servlet程序去使用。HttpServletRequest表示请求过来的信息,HttpServletResponse表示所有响应的信息。我们如果需要设置返回给客户端的信息,都可以通过HttpServletResponse对象进行设置。
    两个输出流的说明:
    字节流:getOutputStream(); 常用于下载(传递二进制数据)
    字符流:getWrite() 常用于回传字符串(常用)
    两个流同时只能使用一个。
    使用了字节流,就不能再使用字符流,反之亦然,否则就会报错。
    在这里插入图片描述
    如何往客户端回传数据?
    要求:往客户端回传 字符串数据

    public class ResponseIOServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println(resp.getCharacterEncoding());  //默认ISO-8859-1
            //设置服务器字符集为UTF-8    方法一:
    //        resp.setCharacterEncoding("UTF-8");
    //        //通过响应头,设置浏览器也使用UTF-8
    //        resp.setHeader("Content-type","text/html;charset-UTF-8");
    
    //      方法二:  它会同时设置服务器和客户端都使用utf-8字符集,还设置了响应头
            //注意: 此方法一定要在获取流对象之前调用才有效
            resp.setContentType("text/html;charset-UTF-8");
            //往客户端回传 字符串数据
            PrintWriter writer = resp.getWriter();
            writer.write("徐文强");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    请求重定向:
    是指客户端给服务器发请求,然后服务器告诉客户端说,我给你一些地址,你去新地址访问。叫请求重定向(因为之前的地址可能已被废弃)。
    在这里插入图片描述
    请求重定向的特点:
    1、浏览器地址栏会发生变化
    2、两次请求
    3、不共享Request内保存的数据
    4、不能访问WEB-INF下的资源
    5、可以访问工程外的资源
    请求重定向第二种方法(推荐使用):

    public class Response1 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("曾到此一游response1");
            //设置响应码302,表示重定向,(已搬迁)
    //        resp.setStatus(302);
    //        //设置响应头,说明新的地址在哪里
    //        resp.setHeader("Location","http://localhost:8080/servlet_08_war_exploded/response2");
    
            resp.sendRedirect("http://localhost:8080");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    消息队列面试题(2022最新整理)
    我的 Kafka 旅程 - 文件存储机制
    2源码安装网络协议
    NX二次开发-C#使用DllImport调用libufun.dll里的UF函数(反编译.net.dll)调用loop等UF函数(三部曲1)
    ccc强制性认证是什么?
    论文阅读笔记:Task-Customized Mixture of Adapters for General Image Fusion
    linux设置登录超时自动退出
    asp.net core项目部署到iis每次更新都提示被占用需要停止网站才可以的问题解决
    基于阿里云 Serverless 函数计算开发的疫情数据统计推送机器人
    ADS 使用调整器动态调参教程(Tuning)
  • 原文地址:https://blog.csdn.net/qq_41037176/article/details/125456899