zoukankan      html  css  js  c++  java
  • 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相当于客户在服务端的私人保险柜
  • 相关阅读:
    Document
    Document
    Document
    Document
    Document
    Document
    Document
    Document
    C#中的委托是什么
    C# Lambda表达式Contains方法 like
  • 原文地址:https://www.cnblogs.com/Emuaer/p/15359995.html
Copyright © 2011-2022 走看看