Servllet
    什么是Servlet
        Servlet是sun提出的,用于在服务器端处理HTTP协议的组件;
    servlet特征
        1)可以给浏览器返回动态的HTML,图片等资源(处理http协议);
        2)Servlet是服务端的组件,必须部署(拷贝)在服务器上才能运行;
        3)Servlet:必须满足相关的规范;
    服务器:java服务器,javaWeb服务器,Servlet服务器:就是一个软件;
    Http协议:
        1)它就是一个规范,约定了浏览器和服务器如何通信,以及通信的数据格式;
        2)如何通信:a:建立连接;b:发送请求;c:接收响应;d:关闭连接;
             特点:一次请求一次连接,此种连接方式可以最大限度的降低服务器的压力;
        3)数据格式:请求数据:请求行(协议类型,路径,请求方式)
                                                 消息头(请求数据的描述信息)
                                                 实体内容(浏览器向服务器发送的数据)                
                                响应数据:状态行(协议类型,状态)
                                                  消息头(响应数据的描述信息)
                                                  实体内容(服务器向浏览器发送数据)
        4)如何处理HTTP协议
              1:如何通信:浏览器和服务器已经实现了该通信过程,实际上他们内部都有通信组件专门处理通信事宜;
              2:处理数据:服务器通过Servlet处理数据:request:用来处理(接收)请求数据;
                                                                                     response:用来处理(发送)响应数据;
    请求方式:
        1)浏览器向服务器发送请求及传递数据的方式;
        2)需要掌握的两种方式:
             2.1)get:采用URL传参,即浏览器会将参数附加在URL后面传递给服务器;
                              参数在传递过程中可见,隐私性差;
                              因为URL大小有限制,因此传递的数据受限,一般很小。
            2.2)Post:采用实体内容传参;
                               参数在传递过程中不可见;
                               实体内容大小不受限制;
        3)使用场景:
            3.1)默认:
                          表单默认使用get请求传参;
                          超链接发出的请求是get请求;
                          地址栏直接输入的地址是get请求;
            3.2)get:向服务器获取数据时;
            3.3)post:向服务器提交数据时;
    乱码问题:
        1)产生原因:编码和解码不一致导致的;
        2)get请求解决方案:
            2.1)修改/tomact/config/server.xml 在70行增加URIEncoding='UTF-8';
            2.2)让Servlet接收乱码,然后使用ISO 8859-1 将字符串还原成byte,再使用UTF-8将其转成String即可;
        3)post请求解决方案:
            在获取数据前,使用request设置实体内容的解决方式为UTF-8, req.setCharactorEncoding('UTF-8');
        4)响应时的解决方案:
            设置编码:res.setCharacterEncoding('UTF-8')
            设置解码:res.setContextType('text/html;charset=utf-8')
        5)总结:get请求尽量不传中文
                        post请求:req.setCharactorEncoding('UTF-8');
                        响应时:res.setContextType('text/html;charset=utf-8');
    JavaBean:
        1)必须有包;2)有默认的构造器;3)实现序列化接口;4)通常有get/set方法;
    servlet路径有3种配置方式,不同的方式其处理请求的能力不同;
        1)精确匹配(/add)
             1.1)只有这个唯一的名字可以访问Servlet;
             1.2)该Servlet只能处理这一种请求;
             1.3)试用于请求较少的项目;
        2)通配符(/*)
             2.1)任何请求都可以访问该Servlet;
             2.2)该Serviet可以处理一切请求;
             2.3)试用于请求较多的大项目;
        3)后缀(*.xxx)
            3.1)带有xxx后缀的请求可以访问servlet;
            3.2)该Servlet能处理所有.xxx后缀的请求;
            3.3)试用于一个Servlet处理一类(多个)请求;
    Servlet生命周期:
        1)实例化;  2)初始化;   3)就绪;   4)销毁;
    Context(上下文/环境)  
        1)可以给其内部的个体提供资源;
        2)可以给其相关的对象提供数据;
              ServletConfig-->Servlet;ServletConfig和Servlet是1对多的关系;可以将其理解为Servlet的私有环境;
    ServletContext
        1)是Servlet公有的环境;
        2)其数据可以被所有的Servlet共用;
        3)ServletContext和Servlet是1对多的关系;
        程序运行过程中,产生的共享数据可以存入Context;
         存:ctx.setAttribute("名称","值");
         取:ctx.getAttribute("名称");
    URI是uniform resource identifier 统一资源标识符,用来唯一的标识一个资源;
    URL是uniorm resource locator 统一资源定位器,是一种具体的URI,即URL可以用来标识一个资源,而且还只明了如何
    定位这个资源;
    URI实例可以代表绝对的,也可以是相对的,只要它符合URI的语法规则;
    URL类不仅符合语义,还包含了定位该资源的信息,因此它不能是相对的;
    隐含(内置)对象
        1.request (*) HttpServletRequest;  
        2.response (*) HttpServletResponse;
        3.out      JspWriter;
        4.config    ServletConfig;
        5.application *   ServletContext
        6.exception      Throwable Jsp发生异常,只有在发生异常时可用;
        7.session (*)    HttpSession
        8.page *    Object   就代表当前页面,相当于this;
        9.pageContext  pageContext 页面的环境,用于给页面提供数据,该对象引用其它8个对象;
HTTP协议:
    状态管理
        HTTP协议是一种无状态的协议,每次连接处理一个请求;
        总结:HTTP协议下的服务器不认识浏览器,如果有些业务需要记住的话,就需要对状态进行管理;
    状态:
        就是一份数据,用于证明浏览器曾经访问过服务器;
        可以是任意的数据,只要能证明即可;  
    实现:HTTP协议是无状态协议;要想做状态管理,必须:
        1)Cookie:将数据存到浏览器;服务器压力小,但不安全,数据容易被改;
        2)Session:将数据存在服务器上,服务器压力大,但安全;