• HTTP


    HTTP

    • 概念:

      • http:Hyper Text Transfer Protocol--超文本传输协议。

    • 历史版本:

      • 1.0:每一次请求响应都会建立新的连接

      • 1.1:复用连接

    • 请求方式:

      • HTTP协议有7中请求方式,常用的有2种

        • GET:

          1. 请求参数在请求行中,在url后。

          2. 请求的url长度有限制的

          3. 不太安全

        • POST:

          1. 请求参数在请求体中

          2. 请求的url长度没有限制的

          3. 相对安全

    请求消息数据格式

    请求行

    • 请求方式 请求url 请求协议/版本 GET /login.html HTTP/1.1

    • 请求方式:

      HTTP协议有7中请求方式,常用的有2种

    请求头:客户端浏览器告诉服务器一些信息

    • 请求头名称: 请求头值

      • 常见请求头:

        • Connection: keep-alive

          • 连接的方式 长连接

        • User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息

          • 可以在服务器端获取该头的信息,解决浏览器的兼容性问题

        • Refererhttp://localhost/login.html

          • 告诉服务器,我(当前请求)从哪里来?

            • 作用:

              1. 防盗链:

              2. 统计工作:

    请求空行

    • 空行,就是用于分割POST请求的请求头,和请求体的。

    请求体(正文)

    • 封装POST请求消息的请求参数的

    HTTP响应

    响应行

    • http协议 状态码

      HTTP/1.1 200

      • 常用响应状态码

        • 常用状态码 意义
          202 请求成功
          302 重定向
          304 读取本地缓存文件
          404 请求的页面不存在
          500 服务端程序错误

         

    响应体

    • 一般为html文件

    Tomcat

    基本概念

    1. IP:计算机(电子设备)在网络中定位(唯一标识)。

    2. 端口:找到计算机中的应用程序(唯一标识)

    3. 服务器概念:

      服务器指一个管理资源并为用户提供服务的计算机软件,服务器的本质其实就是普通的电脑中装了相关的服务器软件。

      1. 当我们的电脑装了mysql,就会成为一个数据库服务器。

      2. 当我们的电脑装了Tomcat就成为了一个web 应用服务器。

    4. 服务器分类:

      1. 服务器:安装了服务器软件的计算机

      2. 服务器软件:接收用户的请求,处理请求,做出响应

      3. web服务器软件:接收用户的请求,处理请求,做出响应。

        • 在web服务器软件中,可以部署web项目,让用户通过浏览器来访问这些项目。

    文件夹分类

     

    配置:

    • 部署项目的方式:

      1. 直接将项目放到webapps目录下即可。

        • /hello:项目的访问路径-->虚拟目录

          • 简化部署:将项目打成一个war包,再将war包放置到webapps目录下。

            • war包会自动解压缩

      2. 配置conf/server.xml文件 <Host>标签体中配置 <Context docBase="D:hello" path="/hehe" />

        • docBase:项目存放的路径

        • path:虚拟目录

      3. (热部署)在confCatalinalocalhost创建任意名称的xml文件。在文件中编写 <Context docBase="D:hello" />

        • 虚拟目录:xml文件的名称

    • 静态项目和动态项目:

      • 目录结构

        • java动态项目的目录结构: -- 项目的根目录 -- WEB-INF目录: -- web.xml:web项目的核心配置文件 -- classes目录:放置字节码文件的目录 -- lib目录:放置依赖的jar包

    IDEA与tomcat的相关配置

    1. IDEA会为每一个tomcat部署的项目单独建立一份配置文件

      查看控制台的log:Using CATALINA_BASE: "C:Usersfqy.IntelliJIdea2018.1system omcat_itcast"

    注意点

    WEB-INF受保护的文件夹不能够通过浏览器客户端直接访问,必须通过服务器访问访问里面的资源。 css, image js其他的插件等静态资源统统都放到web的根目录下。

    Servlet

    1. Server Applet : 使用java语言编写的运行在服务器端上的小程序。

    2. 是sun公司提供 一套规范(接口),用来处理客户端请求、响应给浏览器的动态资源。

    Servlet内部实现原理

    Servlet生命周期

    • init方法:servlet创建的时候执行

    • service方法:每次发送请求的时候执行

      • ServletRequest 代表请求认为ServletRequest 内部封装的是http请求的信息

      • ServletResponse 代表响应认为要封装的是响应的信息

    • destory方法:服务器关闭的时候执行

    Servlet的配置

    1. 方式一:在web.xml中配置

      <servlet>
          <servlet-name>名字可以随便起,但要和下面的保持一致</servlet-name> 
          <servlet-class>对应类的全限定类名</servlet-class> 
      </servlet> 
      <servlet-mapping> 
          <servlet-name>和上面保持一致</servlet-name> 
          <url-pattern>路径,可以随便起,是使用时进入的路径</url-pattern> 
      </servlet-mapping>
      • url­pattern的配置方式

        • 完全匹配如 /myServlet

        • 目录匹配如 /a/b/c/*

        • 扩展名匹配 *.do

        • 缺省配置如 / 当你访问资源地址所有的servlet都不匹配 时,缺省的servlet负责处理其实,web应用中所有的资源 的响应都是servlet负责,包括静态资源,对于静态资源其 实是由tomcat的默认servlet进行处理的

        • /和/*区别

          • /不会处理后缀名是.jsp的资源

          • /*会处理后缀名是.jsp的资源

      • 启动服务器的时候创建servlet配置 <load-on- startup>1</load-on-startup> 只要不是负数都会随 着服务器的启动而创建,值越小优先级越高

    HttpServlet

    1. HttpServlet,这个是Tomcat提供的一个类,并且实现了 Servlet接口

    2. HTTPServlet类不再需要重写多个方法,只需要重写doGet()、doPost()中的其中一个。

    ServletContext对象

    • ServletContext代表是一个web应用的环境(上下文) 对象。

    • 一个web应用只有一个ServletContext对象 。

    • ServletContext的生命周期一般会随着服务器的启动而创建,web应用被卸载而销毁。

    • ServletContext中的数据是整个web应用所共享的 。

    • 获取对象:在方法里使用this.getServletContext();

    • 常用方法

      //向ServletContext域中放入数据 
          setAtrribute(String name,Object obj); 
      //从ServletContext域中获取数据 
          getAttribute(String name); 
      //从ServletContext域中删除数据 
          removeAttribute(String name);

    HttpServletResponse

    • HttpServletResponse是ServletResponse的子接口

    • response重定向

      • response.setStatus(302); 
        response.setHeader("Location", "/WebTes t/index.html");
        //以上功能能够实现重定向,原理就是当客户端收到响应后,响应头信息中含有 Location 是 /WebTest/index.html ,所以客户端就会自动跳转, 当然我们如果要去实现重定向,可以直接使用封装好的方法,但是其内部实现还是上述内容.
        //等同于一下方法:
        response.sendRedirect("/WebTest/index.html");//重定向
        response.setHeader("refresh", "2;url=/Day 11/index.html");//定时重定向

    HttpServletRequest

    1. 获取uri和url路径

      //获取uri,就是请求行中的地址 
      String uri = request.getRequestURI(); 
      //获取url,获取全路径 
      StringBuffer url = request.getRequestURL();
    2. 获取web应用的名称和请求IP地址

      //获取当前web应用名称---->虚拟目录
      String webName = request.getContextPath();
      //获取请求的客户端的ip地址
      String ipAddress = request.getRemoteAddr();
    3. 获取请求的内容

      //1.获取请求头的内容
          //获取指定header的内容 
          String header = request.getHeader("User-Agent");
          //获取所有header的名字 
          Enumeration<String> names = request.getHeaderNames();
      ​
      //2.获取get请求的表单内容
          String QueryString = request.getQueryString();
      ​
      //3.获取请求体的内容
          //对于get请求虽然表单数据在请求行中,也是通过此方法获取提交数据的
          String name = request.getParameter("username");
          //对于表单中一个name有多个值的可以使用此方法,如che ckbox,返回值是数组 
          String [] hobbys = request.getParameterValues("hobby");
      ​
      //4.获取提交表单所有数据
          Map<String, String[]> map = request.getParameterMap();  for(String key : map.keySet()){ 
              String[] values = map.get(key);
              System.out.println(key+"="+Arrays.toStr ing(values));
          }
    4. 请求乱码问题

      //对于post提交
          request.setCharacterEncoding("UTF-8");
      //对于get提交,如果出现乱码
          String parameter = request.getParameter("us ername");
          parameter = new String(parameter.getbytes("iso8859-1"),"utf-8");

    内部转发

    客户端向服务器发送请求,服务器收到这个请求以后,可以在内部进行一个转发功能,也就是在不告知客户端的情况下进行请求的转发。

    //获取内部转发器 
    RequestDispatcher dispatcher = request.getRequestDispatcher("/index.jsp"); 
    //进行转发 
    dispatcher.forward(request, response); 
    //通常是连写 
    //request.getRequestDispatcher("/index.jsp").forward(request, response);
    • 内部转发客户端浏览器的地址不会发生改变,因为自始至终客户端只发送一个请求

    • 通过内部转发路径一定要注意,因为操作过程是在服务器 内部进行操作的,所以地址就不能够是客户端地址,而应该 是服务器端地址,路径不能再写web应用的名称,/就web应 用的根目录

    • 通过内部转发,两个servlet或者两个界面的接收到的 request内的内容是相同的,重定向不能携带放在 request内的内容

    • 因为内部转发是在服务器内部做的处理,所以内部转发是 可以直接访问到WEB­INF下的内容的

     

  • 相关阅读:
    Django学习笔记(16)——扩展Django自带User模型,实现用户注册与登录
    Django学习笔记(15)——中间件
    JAVA—API和SPI概念
    mybatis 映射器(mappers) 配置说明 加载映射文件方式
    Java的三种代理模式
    如何选择分布式事务形态(TCC,SAGA,2PC,补偿,基于消息最终一致性等等)
    什么是分布式系统中的幂等性
    js date 前一天
    getCanonicalFile与getAbsoluteFile区别
    Mybatis 示例之 SelectKey
  • 原文地址:https://www.cnblogs.com/---------zjh---------/p/13280930.html
Copyright © 2020-2023  润新知