第6天:Servlet相关知识(二)

Servlet相关知识2
1、Http协议
    (1)是什么?
        hypertext transfer protocol 超文本控制传输协议。
        (W3C)定义了浏览器与web服务器之间数据传输的方式与数据格式。
    (2)数据传输的方式
        a、浏览器请求建立连接。
        b、浏览器向服务器发送请求。
        c、服务器处理请求。
        d、服务器发送响应,然后立即关闭连接。
        如果浏览器想向服务器再发送一个请求,需要重新请求建立连接。
    (3)数据格式
        a、请求数据包
            1)请求行
                请求方式(get/post) 请求资源的路径 http协议版本
            2)若干消息头
                浏览器与服务器之间通讯的一些约定
                比如:浏览器会告诉服务器用的是什么浏览器,是否缓存等。
            3)实体内容
                如果是post方式,请求数据会存放到实体内容里面
                如果是get方式,会放到请求行中的请求资源路径后面
        b、响应数据包
            1)状态行
                协议版本号 状态码 状态码描述
                状态码:
                    200 OK(正常)
                    404 Not Found(找不到资源)
                    500 Internal Server Error(服务器内部错误)
            2)若干消息头
                比如服务器可以向浏览器发送cookie
            3)实体内容
                服务器处理完之后的结果,一般要求浏览器显示的数据
2、get/post请求方式
    (1)get方式:
        a、表单默认提交的方式
        b、直接在浏览器地址栏输入地址
        c、通过链接访问某个地址
    (2)get方式的特点:
        在地址栏会显示请求数据。
        请求数据会放到请求资源路径的后面
        get方式一般用于向服务器获取资源
        浏览器有可能缓存get方式访问过的资源
    (3)post方式:
        设置表单method="post"
    (4)post方式的特点:
        a、数据不会在地址栏显示
        b、数据会存放在实体内容里
        c、post方式一般用于向服务器提交数据
    (5)有缺点比较
        get方式提交数据有两个缺点:
            a、提交的数据量有限制(因为只能存放到请求行之后)
            b、不安全(在浏览器地址栏能看到数据)
        post方式提交数据有优点:
            a、数据量大(因为存放在实体内容里面)
            b、相对安全(但是实体内容里面的数据仍然没有加密,可以借助工具查看)
3、重定向
    (1)什么是重定向:
        服务器向浏览器发送一个状态码302及一个消息头location,浏览器会立即向location所指定的地址发送一个新的请求。
    (2)编程:
        response.sendRedirect(重定向的地址);
    (3)重定向的特点及注意事项:
        a、重定向的地址是任意的;
        b、浏览器地址栏的地址会变成重定向的地址;
        c、一件事情已经做完。
        d、在重定向之前,不能够有任何的输出。如果缓存当中有数据,重定向之前会先清空缓存中的数据。
4、服务器如何处理url地址
    比如在浏览器地址栏输入http://ip:port/appname/abc.html
    浏览器会依据ip、port连接服务器,然后,会将/appname/abc.html存放到请求数据包的请求行。
    服务器如何处理"/appname/abc.html"?
        step1   服务器会查看有没有appname对应的应用存在,若没有,则返回404;
                若有,则进行下一步。
        step2   在web.xml中,使用"/abc.html"与url-pattern进行匹配:
                    a、精确匹配:要求精确匹配。
                    b、模糊匹配(使用通配符*)
                        * 代表任意的字符串。
                        比如:/some  /some/*  /some/dsfk/fdksjk 以上三种均对应同一个Servlet地址
                    c、后缀匹配
                        不能以"/"开头  比如: *.do 表示以.do结尾的请求
        step3   如果仍然不匹配,会查询静态资源。
                如果能找到该资源,则返回,找不到,返回404
5、servlet的生命周期与核心的类与接口
    (1)核心的类与接口
        Servlet接口
            a、所有的Servlet,必须实现该接口;
            b、该接口定义了三个方法:
                init(ServletConfig config)  初始化方法
                service(ServletRequest request, ServletResponse response)   处理请求
                destroy()   销毁资源
        Genericervlet抽象类,部分实现了Servlet接口,实现了init、destroy方法。
        HttpServlet抽象类,继承Genericervlet,实现了service()方法。
            service(HttpServletRequest request, HttpServletResponse response);
            HttpServletRequest是ServletRequest子接口
            HttpServletResponse是ServletResponse子接口
    (2)生命周期
        什么是生命周期:Servlet容器如何去创建Servlet实例,分配资源,调用其方法,最后销毁的整个过程。
        分四个阶段:
            a、实例化:调用缺省的构造器,创建对象。
                创建对象的时机:
                    1)当请求到达Servlet容器时,如果要访问的servlet没有对应的实例,则会创建;
                    2)当服务器启动时会,会检查web.xml中的配置,如果<load-on-startup>1</load-on-startup>
                        "1"表示优先级,值越小、优先级越高。
            b、初始化:分配资源
                Servlet容器创建servlet实例后一定会执行init()方法。
                默认的init()由GenericServlet来实现。如果想定义自己的初始化过程,可以override init()方法。
                方式一:override init(ServletConfig config)
                    public void init(ServletConfig config) {
                        this.config = config;
                        this.init();
                    }
                方式二:override init()
                    //空方法!“钩子方法”,由子类实现
                    public void init() {
                    }
                最好使用方式二。初始化只有一次。
            c、就绪,执行service()方法
                HttpServlet的service()方法,会依据get/post请求,分别调用对应的doGet()和doPost()方法。
                我们开发的servlet,可以override service();或者override doGet()/doPost();
            d、销毁:容器依据自己的算法,会删除servlet实例,在删除之前,会调用destory()方法,释放资源。
                    该方法只会执行一次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值