Servlet学习笔记(一)

Servlet

  • servlet接口实现类

    来自于servlet规范下的一个接口 ,存在于http服务器中

    • Tomcat服务器中有servlet的jsp包,存放servlet接口

    • http服务器中能调用的 动态资源 文件必须是一个servlet接口实现类

      class Teacher implements Servlet{
          //合法动态资源文件,TOmccat有权利用
          int doget(){
              .....
          };
      }
      Servlet obj= new Teacher();
      obj.doget();
      
    • servlet开发步骤

      • 一:创建java类,继承HttpServlet父类,使之成为Servlet的接口实现类

      class oneServlet extends HttpServlet{

      }

    servlet接口:

     + init
      
     + getServletConfig
      
     + getServletInfo
    
     + destory
    
     + service()--有用
      
     + Tomcat 有权利创建Servlet接口实现类对象
    
       ```java
       Servlet oneServlet =new OneServlet();
       //Tomcat根据实例对象调用service方法处理当前请求
       oneServlet.service();
       ```
    
  • Tomcat根据实例对象调用service方法处理当前请求

  • 二:重写HttpServlet中的两个方法。doGet或doPost

    浏览器两种请求方式----post,get

    • servlet中的method通过getMethod方法可以获取浏览器提交的方式

    • 通过父类据欸的那个何种情况下调用子类中方法------模板设计模式

      Httpservlet: service(){
          if(请求方式==Get)this.doGet;
          else if(请求方式==Post)this.doPost;
      }
      OnewServlet:doGet    doPost
      onewServlet.service();
      
  • 三:将servlet接口实现类信息【注册】到Tomcat服务器

    • 网站--》【web】-->【webinf】-》【web.xml】

      将Servlet接口实现类路径交给Tomcat

      <servlet>
      <servlet-name>mm</servlet-name><!--声明一个变量来存储servlet接口实现类路径-->
          <servlet-class></servlet-class><!--此处应写实现类的路径-->
      
    Tomcat String mm="com.controller.OneServlet" mm /one ```
    浏览器向Tomcat索要OneServlet地址时
    
    **http://localhost:8080/Emua/one**
    

Servlet对象的生命周期

  1. 网站中所有实例对象由http服务器负责,无需手动

  2. 默认情况下,http服务器接收到对于当前servlet接口实现类第一次请求时,子哦对那个创建这个servlet接口实现类的实例对象

    再手动配置的情况下,要求http服务器在启动时自动创建某个Servlet接口实现类的实例对象

    <servlet>
        <servlet-name>mm</servlet-name><!--声明一个变量来存储servlet接口实现类路径-->
        <servlet-class></servlet-class><!--此处应写实现类的路径-->
        <load-on-startup>30</load-on-startup>填写一个大于0的整数
    </servlet>
    
  3. 在http服务器运行期间,一个servlet接口实现类只能被创建出一个实例对象

  4. http服务器关闭时,自动销毁所有servlet对象。

HttpServletResponse接口

介绍

  1. 存在于servlet-api.jar中,位于servlet规范中
  2. 负责将doGet或者doPost方法执行结构写到响应函数中,交给浏览器
  3. 该接口修饰的对象简称响应对象

主要功能

1.将执行结果以二进制形式写入响应体

2.设置content-type属性值,从而控制浏览器使用对应编译器将二进制数据编译为各种数据

3.设置localtion属性,将一个请求地址赋值给localtion。从而控制浏览器向指定服务器发送请求

HttpServletRequest接口

介绍

  1. 存在于servlet-api.jar中,位于servlet规范中

  2. 接口实现类由Http服务器负责提供

  3. 负责在doGEt,doPost方法运行时读取Http请求协议包中的信息

  4. 开发人员称其为修饰的对象请求对象

相关作用

  1. 用于Http请求协议包中请求行中的信息
  2. 可以读取保存在请求协议包中请求头,请求体中的参数信息
  3. 可以代替浏览器向Http服务器申请资源文件调用

请求对象和响应对象的生命周期

  1. Http服务器接收浏览器发送的Http请求协议包之后,自动为当前Http请求协议包生成一个响应对象请求对象

  2. 在我们的Http服务器调用doGet或者doPost方法时,负责将请求对象响应对象作为实参传递到方法

  3. Http服务器准备推送Http相应协议之前,负责销毁请求对象响应对象

  4. 请求对象响应对象的生命周期贯穿以一次请求的处理过程中

  5. 请求对象响应对象相当于客户在服务端的代言人,客户走了,它们也可以死了

Http状态码

介绍

  1. 由三位数字组成的符号

  2. Http服务器再推送相应包之前,根据本次请求处理情况,将Http状态码写入到相应包状态行

  3. 如果Http服务器针对本次请求,返回了对应的资源文件,通过Http状态码通知浏览器应该如何处理这个结果

  4. 如果Http服务器针对本次请求,无法返回了对应的资源文件,通过Http状态码通知浏览器解释不能提供服务的原因

分类

  1. 组成------100-599

  2. 1xx:

    • 100,通知浏览器本次返回的资源文件并不是一个独立的资源文件,需要浏览器继续向Http服务器请求其他资源文件
  3. 2xx:

    • 200,通知浏览器本次返回的资源文件是一个完整的独立资源文件,浏览器接收后不需要索要其他文件
  4. 3xx:

    • 302, 通知浏览器本次返回的资源文件并不是一个资源文件,而是一个资源文件的地址,需要浏览器根据地址索要资源文件

      response.sendRedirect("资源文件地址");//写入location中
      
  5. 4xx:

    • 404,通知浏览器,在服务端没有定位到需要访问的文件
    • 405,通知浏览器,在服务端定位到需要访问的文件(Servlet),但是这个Servlet对浏览器采用的访问方式不能进行处理(GET和POST方法的差别)
  6. 5xx:

    • 通知浏览器,在服务端定位到已经访问的文件(Servlet),这个Servlet可以接受浏览器采用的请求方式,但是Servlet在处理请求期间由于java异常处理导致处理失败。

    多个Servlet之间调用的规则

  7. 减低用户使用难度

  8. 提高用户使用感受规则

  9. 实现方案

    • 重定向解决方案

      • 工作原理:

        用户第一次通过手动方式通知浏览器访问第一个Servlet,同时将第二个Servlet的地址写入响应头的location属性中,Tomcat将302状态码写入状态行中,此时浏览器根据302状态行发起第二次请求,访问第二个Servlet完成所有请求

      • 实现命令

        response.sendRedirect();

        将地址写入location属性中,访问时自动跳转指定Servlet

      • 特征

        1. 既可以把当前网站的资源文件发给浏览器,也可以把其他网站资源地址发给浏览器、
        2. 请求次数:浏览器至少发两次请求,只有第一次是用户手动发送的,后续都是浏览器自动发送的
        3. 请求方式:一定是get
      • 缺点

        需要在浏览器与服务器之间进行多次往返,大量时间被用于往返之间,用户等待时间较长

    • 请求转发解决方案

      • 原理:用户手动访问一次OneServlet,OneServlet工作完毕后,通过当前请求对象代替浏览器向Tomcat发送请求,申请调用TwoServlet,Tomcat接收到请求后,自动调用Twoservlet来完成剩余任务

      • RequestDispatcher report=request.getRequestDispatcher("/资源文件名"); 一定以/开头

      • 将报告对象发送给Tomcat:

        report.forward(当前请求对象,当前响应对象)

      • 优点:

        1. 无论本次请求涉及多少个Servlet,用户只需一次操作
        2. Servlet之间的调用在服务端上,节省服务端与浏览器之间往返次数,增加处理速度
      • 特征

        1. 请求次数,浏览器只发送一次请求

        2. 增加服务器压力-------分布式服务器

        3. 请求地址,只能向Tomcat申请调用当前网站下的资源文件地

          request.getRequestDispatcher("/资源文件名"); //一定不要用网站名
          

多个Servlet数据共享实现方案

  • 数据共享

    一个Servlet工作完成后将数据交给第二个Servlet使用

  • Servlet规范中四种数据共享方案

    • ServletContext接口
    • Cookie类
    • HttpSession接口
    • HttpServletRequest接口

ServletContext接口

  • 介绍

    来自于Servlet规范的一个接口,在TOmcat中存在于servlet-api.jar中,Tomcat负责提供实现类

  • 如果两个Servlet来自同一个网站,彼此之间就可以通过ServletContext实例对象实现数据共享

  • 俗称全局作用域对象

  • 全局作用域对象相当于一个Map(共享数据),另一个Servlet根据key获得value

  • 每一个网站都有一个全局作用域对象,在这个网站中可将一个数据存入全局对象中,当前网站中其他Servlet可以从全局作用域的到值并使用

  • 生命周期:Http服务器启动过程中,自动为当前网站创建全局作用域对象,有且只有一个全局作用域对象,贯穿整个网站运行期间

  • 命令实现:

    OneServlet{
        ServletContext application=request.getServletContext(),来获取网站中的全局作用对象
        application.setAttribute("key",数据)
    }
    TwoServlet{
        向网站索要全局作用域对象
            ServletContext application=request.getServletContext(),来获取网站中的全局作用对象
    		Object 对象=application.getAttribute("key")
    }
    

Cookie

  • Cookie来自Servlet规范下的一个工具类,存在于servlet-api.jar中

  • 如果他两个Servlet来自同一个网站,并且为同一个浏览器/用户提供服务,此时可以用Cookie进行数据共享

  • Cookie用于存放私人数据,在共享数据过程中提高服务质量

  • Cookie相当于会员卡

  • 原理:

    • 用户通过浏览器发送数据,服务器处理期间创建Cookie存储当前用户相关数据,将Cookie写入响应头交还浏览器,浏览器将其储存在缓存中
    • 用户再次访问时,Http服务器可以通过响应头的cookie再获取用户信息
  • 实现命令:

    OneServlet{
        //1.创建Cookie对象
        Cookie card=new Cookie("key","value");//相当于一个map,不过只能存放一个键值对,key,value都只能为String,key不能为中文
        //2.交给用户,写入响应头
        response.addCookie(card);
    }
    TwoServlet{
    		//得到数组
        	Cookie cookieArray[]= request.getCookies();
        	//循环遍历
        	for(Cookie card:cookieArray){
                String key=card.getName();
                String value=card.getValue();
            }
    }	
    
    
  • Cookie的生命周期

    • Cookie存放在缓存中,因此浏览器关闭,Cookie就会消亡

    • 再手动设置下,可以要求浏览器接收Cookie存放在客户端硬盘上,关闭浏览器不会导致消亡

    • 手动指定语法:

      cookie.setMaxAge(60);//指定Cookie对象存活一分钟
      

HttpSession接口

  • 介绍
    • 来自于Servlet规范下接口,存在于servlet-api.jar,相关实现类由Tomcat提供
    • 如果两个Servlet来自于同一个网站,并且为同一个浏览器/用户提供服务,此时借助HttpSession对象进行数据共享
    • 俗称会话作用域对象
  • HttpSession与Cookie区别
    • 存储位置不同
      • Cookie:存放于客户端计算机中
      • HttpSession:存放在服务端计算机内存中
    • 数据类型
      • Cookie对象存储类型只能是String
      • HttpSession对象可以存储任意共享数据
    • 数据数量
      • 一个Cookie对象只能存储一个共享对象
      • HttpSession使用Map集合存储共享数据,所以可以存储任意数量的数据
    • 参照物不同
      • Cookie相当于客户在服务端会员卡
      • HttpSession相当于客户在服务端的私人保险柜
posted @ 2021-10-01 20:06  Emuaer  阅读(48)  评论(0编辑  收藏  举报