Http协议

一、HTTP协议(超级重要:必须记住)
    W3C组织制定的。HTTP协议默认监听80端口,默认端口
    
    HTTP协议的具体组成:
    
        一、请求部分(客户端向服务器发送的数据)
        
        
            POST /App1/3.html HTTP/1.1
            Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, */*
            Referer: http://localhost:8080/App1/login.html
            Accept-Language: zh-CN,en-US;q=0.5
            User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0)
            Content-Type: application/x-www-form-urlencoded
            Accept-Encoding: gzip, deflate
            Host: localhost:8080
            Content-Length: 30
            Connection: Keep-Alive
            Cache-Control: no-cache
            Warnning:val1
            Warnning:val2
            
            username=chenlili&password=321
            
            分为三部分:
                1、请求行:位于信息的第一行    GET /App1/2.html HTTP/1.1
                            GET:请求方式(method)。默认的请求方式。常用的还有POST等。(引入表单)
                                
                                GET:    GET /App1/3.html?username=chenlili&password=123 HTTP/1.1  提交的数据出现在请求行中。(不建议使用:消息行有长度限制;数据太不安全)
                                POST:  通过html中的form标签中的属性method指定。
                            
                            /App1/2.html:访问的资源的URI(Union Resource Indentity)。
                                        URL:(Union Resource Location)。协议+主机地址+资源地址
                                                    http://localhost:8080/App1/login.html
                            
                            HTTP/1.1:客户端使用的协议
                            
                2、请求消息头:从第二行开始,至第一个空行结束。
                     *Accept:浏览器可接受的MIME类型 .(文件系统中采用扩展名区分不同的文件的。网络上是用MIME类型来区分不同的数据的、有一定的对应关系,Tomcat\conf\web.xml有)
                            MIME类型:大类型/具体类型
                                    jpg:image/jpeg
                                    bmp: image/bmp
                                    
                    Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集
                     *Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip
                    Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。 可以在浏览器中进行设置。
                    Host:初始URL中的主机和端口
                    *Referer:包含一个URL,取值为当前页面之前的那个页面地址
                            应用:看广告投放效果
                                防盗链
                            
                    *Content-Type:请求正文内容类型
                            目前:只有通过表单提交数据,且请求方式是post时,才会出现请求正文内容,才会有该头。
                            默认值是:application/x-www-form-urlencoded
                            
                            对应的是<form action="3.html" method="post" enctype="application/x-www-form-urlencoded">
                            
                            常用可选值:multipart/form-data          (上传文件使用)
                    If-Modified-Since: Wed, 02 Feb 2011 12:04:56 GMT利用这个头与服务器的文件进行比对,如果一致,则从缓存中直接读取文件。
                    User-Agent:浏览器类型.
                    Content-Length:表示请求正文的长度 ,数据字节长度。
                    Connection:表示是否需要持久连接。如果服务器看到这里的值为“Keep -Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接
                    *****Cookie:这是最重要的请求头信息之一 (会话管理)
                    Date:Date: Mon, 22 Aug 2011 01:55:39 GMT请求时间GMT
                            
                3、请求正文:第一个空行之后的所有内容。
                    只有通过表单,且请求方式是POST时才能看到正文。
                    当Content-Type是:application/x-www-form-urlencoded,表单提交的数据表现形式为
                    username=chenlili&password=321
                    
                    username和password表单中输入域的name
                    chenlili和321就是用户输入的数据
                    
                    多个输入域用&进行分割的。
                
            
            
        二、响应部分(服务器向客户端发送的数据)
            HTTP/1.1 200 OK
            Server: Apache-Coyote/1.1
            Accept-Ranges: bytes
            ETag: W/"96-1377826062177"
            Last-Modified: Fri, 30 Aug 2013 01:27:42 GMT
            Content-Type: text/html
            Content-Length: 96
            Date: Fri, 30 Aug 2013 01:43:38 GMT

            <html>
                <head>
                    <title>2.html</title>
                </head>
                <body>
                    hello2<br/>aaa
                </body>
            </html>
            
            分为三部分:
                1、响应行:位于信息的第一行    HTTP/1.1 200 OK
                        HTTP/1.1:服务器使用的协议
                        200:响应码。(预留了500个,目前真正有意义的也就30个左右)
                            200:一切正常
                            302/307:临时重定向
                            304:未修改(缓存)
                            404:资源不存在
                            500:服务器内部错误(自己的程序出错了)。
                        OK:对错误的描述信息。
                        
                2、响应消息头:从第二行开始,至第一个空行结束。
                    *Location: http://www.it315.org/index.jsp指示新的资源的位置
                        302+该头:完成是请求的重定向。
                            
                    Server:apache tomcat指示服务器的类型
                    *Content-Encoding: 告知客户端服务器发送的数据采用的编码类型gzip(压缩格式)
                    *Content-Length: 80 告诉浏览器正文的长度
                    Content-Language: zh-cn服务发送的文本的语言
                    *Content-Type: text/html默认的; 告知客户端请求正文的MIME类型
                    Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT文件的最后修改时间
                    *Refresh: 1;url=http://www.it315.org指示客户端刷新频率。单位是秒
                    *Content-Disposition: attachment; filename=aaa.zip指示客户端下载文件,并制定文件的位置
                    
                    *****Set-Cookie:SS=Q0=5Lb_nQ; path=/search服务器端发送的Cookie(会话管理)
                    
                    Expires: -1   控制浏览器不要缓存
                    Cache-Control: no-cache (1.1)  
                    Pragma: no-cache   (1.0)
                    
                    
                    Connection: close/Keep-Alive   
                    Date: Tue, 11 Jul 2000 18:23:51 GMT
                
                3、响应正文:第一个空行之后的所有内容。
                    浏览器要显示的数据。在未压缩的前提下,与右键   查看源码完全对应。
                
二、Servlet概述
    
三、HelloServlet第一个Servlet
    编写步骤:
        1、编写一个类,直接或间接实现javax.servlet.Servlet接口(一般选择继承实现了该接口的类)
            package com.itheima.servlet;
            import javax.servlet.*;
            import java.io.*;
            public class HelloServlet extends GenericServlet{
                public void service(ServletRequest req,ServletResponse res)
                                  throws ServletException,IOException{
                    String data = "hello servlet";
                    res.getOutputStream().write(data.getBytes());
                }

            }
        2、编译。进入源码所在的文件夹,执行javac(注意要把servlet-api.jar加入到构建路径中)
            set classpath=%classpath%;C:\apache-tomcat-6.0.35\lib\servlet-api.jar
            
            E:\ITHEIMA\JavaEE05\day03_httpServlet\资料\hello\WEB-INF\classes>javac -d . HelloServlet.java
        3、对Servlet进行映射。修改web.xml,增加以下内容:
            <servlet>
                <servlet-name>HelloServlet</servlet-name>
                <servlet-class>com.itheima.servlet.HelloServlet</servlet-class>
            </servlet>
            <servlet-mapping>
                <servlet-name>HelloServlet</servlet-name>
                <url-pattern>/Hello</url-pattern>
            </servlet-mapping>
            
        4、部署应用到Tomcat中
            访问地址:http://localhost:8080/hello/Hello
            http://localhost:8080/hello/WEB-INF/classes/com/itheima/servlet/HelloServlet(不对的)
            
            
四、GenericServlet和HttpServlet(模板方法设计模式)
五、Servlet生命周期

    Servlet对象是在第一次访问时由容器创建,并完成初始化工作。
    对于用户的多次请求,都会调用service为您服务,而不会再创建新的对象。
    当应用被写在或者Tomcat关闭,就是执行destroy进行清理工作。
    
    如果希望Tomcat在加载应用时就实例化并完成对Servlet的初始化。做如下配置:
    web.xml
    
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.itheima.servlet.HelloServlet</servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>
    
    Tips:修改MyEclipse生成的Servlet模板
    
    1、关掉MyEclipse
    2、找到MyEclipse安装目录的上一次目录
        搜索:com.genuitec.eclipse.wizards_*.jar
    3、用压缩软件打开jar包。找到template/Servlet.java(模板文件),解压出来。
    4、修改:修改前先备份。
    5、把修改后的Servlet.java拖进去
    6、重启MyEclipse,生效
    
    
六、ServletConfig配置
    1、作用:针对某个Servlet的配置信息。
    <servlet>
        <servlet-name>ServletDemo3</servlet-name>
        <servlet-class>com.itheima.servlet.ServletDemo3</servlet-class>
        <init-param>
            <param-name>aaa</param-name>
            <param-value>bbb</param-value>
        </init-param>
        <init-param>
            <param-name>xxx</param-name>
            <param-value>yyy</param-value>
        </init-param>
      </servlet>
      
    Tips:Servlet的映射细节。
        1、可以把一个Servlet映射到多个地址上
                <servlet-mapping><!-- 把一个Servlet映射到了多个地址上 -->
                    <servlet-name>ServletDemo4</servlet-name>
                    <url-pattern>/servlet/ServletDemo4</url-pattern>
                  </servlet-mapping>
                  <servlet-mapping>
                    <servlet-name>ServletDemo4</servlet-name>
                    <url-pattern>/servlet/ServletDemo44</url-pattern>
                  </servlet-mapping>
        2、映射还可以使用通配符*
            使用方式:
            a、*.扩展名:必须以*开头,以某个扩展名结尾。比如*.do
            b、/action/*:必须以/开头,*在末尾。比如/action/*
            
            原则:b优先级比a高。如果都是a或都是b,从前往后匹配。
            
七、Servlet线程安全
    由于Servlet在内存中只有一个实例,service又是多线程来调用的。
    因此定义变量尽量使用局部变量;如果必须用实例变量,要做好同步处理(同步代码块尽量包围少的代码)
    
八、ServletContext详解
九、Servlet规范中核心接口类图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值