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. (热部署)在conf\Catalina\localhost创建任意名称的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:\Users\fqy.IntelliJIdea2018.1\system\tomcat_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下的内容的

 

posted @ 2020-07-10 19:38  庄嘉豪  阅读(481)  评论(0编辑  收藏  举报