zoukankan      html  css  js  c++  java
  • http协议

    HTTP请求信息:

    请求的组成部分:

    1.请求行:由3个标记方法组成,请求方法,请求URLHTTP版本,用空格分隔

    2.请求头域:有关键字/值对组成,每行一对,关键字和值用冒号分开。

    3.空行:最后一个请求头标之后是一个空行

    4.请求数据:使用Post传送数据,最长使用的是Content-TypeContent-length头标

    HTTP响应信息:

    响应信息的组成部分:

    1.状态行:HTTP版本,响应代码和响应描述

    2.响应头标:像请求头标一样,他们指出服务器的功能,标识响应数据细节

    3.空行:最后一个响应头标之后是一个空行

    4.响应数据:HTML文档等

    http是一种协议,那么它是有状态的还是无状态的呢?

    HTTP无状态:浏览器和服务器之间不需要建立持久的联系,例如:上网看新闻,我打开了一个网页,发送了一次请求,给了我响应,但是并没有记录我看过新闻,这就是无状态

    HTTP有状态:浏览器和服务器之间建立了持久的联系,也可以是一段时间的联系,例如,我到网上买东西,我把一件东西放到购物车中,记录我放入购物车里的东西,当我下次登录的时候还会看到购物车里的东西。这就是有状态。

    HTTP请求方式:

    (1)GET:客户程序通过这种请求方式,访问服务器上的一个文档,并由服务器把文档发送给客户程序,存储数据量小,不安全,传输快,地址栏长度有限制,最多2kb,编码格式不支持中文,ISO 8859-1

    http的get请求方式不支持中文字符,因为其编码格式是ISO 8859-1

    http的get请求方式不支持中文字符,因为其编码格式是ISO 8859-1

    http的get请求方式不支持中文字符,因为其编码格式是ISO 8859-1

    http的get请求方式不支持中文字符,因为其编码格式是ISO 8859-1

    (1)POST:客户程序通过这种方式向服务器发送大量信息,在HTTP请求中除了包含要访问的文档的URL,还包括大量的请求正文,会包含HTTP表单数据,存储量大,安全,传输慢,地址栏长度在IE中最多为2G,编码格式为对应的网页的编码格式

    (1)HEAD

    (2)PUT

    (3)DELETE

    (4)OPTIONS

    (5)TRACE

    状态码:

    1**:信息提示,表示临时的响应

    2**:响应成功,表示服务器成功的接收到客户端的请求

    3**:重定向

    4**:客户端错误,表明客户端可能出现问题

    5**:服务器错误,表明服务器由于遇到某种错误而不能响应客户端请求

    常见的状态码:

    200:响应成功

    302:临时重定向

    401:未经授权

    400:错误的请求,客户发送的HTTP请求不正确

    404:文件不存在,在服务器上没有客户要访问的文档(不允许请求的方法)

    405:服务器不支持客户的请求

    500:服务器内部错误

    501:服务器不支持能够满足请求的功能

    503:服务器不可用

    URLURI的区别:(绝对路径和相对路径的区别)

    URL:统一资源定位符(Uniform  Resource Locator,用于完整的描述Inteernet上网页和其他资源的地址的一种标识方法

         组成:协议+服务器地址(端口)+具体资源路径,如果端口号是该协议的标准端口号,可以省略端口号

    例:hhtp://www.soccer.org.8080/laggue/spring200/html

    URI:统一资源标识符(Uniform  Resource Identifier,相对于URL是指资源相对于当前页面的地址,它包含从当前页面指向目标页面位置的路径

    3种写法:(1.同一目录下只需要输入连接的文件名

             2.上一级目录在目录名和文件名前加“../

            (3).下一级目录输入目录名和文件名之间用“/”隔开

    常见的端口号:21ftp   80http    8080:tomcat   mysql:3306  1521:oracle

    环境变量:

    Path:指定机器中javacjava的路径,到jdkbin路径

    Classpath:寻找servlet相关所在的路径,到jdklib下的servlet-api.jar

    Java_home:启动时需要找到jvm,到jdk

    为了确保tomcat正常启动,必须配置java_home,其他两个可以没有,三个变量都配置的目的:为了正常开发web项目应用程序,并且能够发布访问web应用程序。

    启动Tomcat: E:姚璐Javaapache-tomcat-6.0.36instartup.bat

    关闭Tomcat: E:姚璐Javaapache-tomcat-6.0.36inshutdown.bat

    Servlet的作用:

    读取客户发送的所有数据,,查询HTTP请求中包含的任何其他请求信息,处理数据并生成结果,设置合适的HTTP响应参数,将响应信息回送给客户端

    Javax.servlet包:

    接口:ServletConfig    ServeltContext     RequestDispatcher  Servlet   ServletRequest   ServletResponse   

    类:GenericServlet

    Javax.servlet.http包:

    类:HttpServlet   继承GenericServlet

    接口:HttpServletRequest  继承ServletRequest

          HttpServletResponse  继承ServletResponse

    Servlet常用武器:

    (1).请求对象:ServletRequestHttpServletRequest,获取来自客户端的请求信息

    (2).响应对象:ServletResponseHttpServletResponse,生成响应结果

    (3).Servlet配置对象ServletConfig,当容器初始化一个Servlet对象时会向servlet提供一个ServletConfig对象,通过该对象获取初始化参数信息以及ServletContext对象

    (4).Servlet上下文对象,ServletContext,访问容器当前web应用提供的各种资源

    Servlet运行在Servlet容器中,其生命周期由容器(如:Tomcat)来管理。Servlet的生命周期通过javax.servlet.Servlet接口中的init( )service( )destroy( )等方法来完成。

    init(ServletConfig config):初始化Servlet对象,容器在创建好Servlet对象后就调用

    serviceServletRequest req,ServletResponse res):响应客户请求,当容器接收到客户端要求访问特定的Servlet对象时就会调用

    destroy():释放Servlet对象占用的资源,当servlet对象结束生命周期时,容器就会调用(服务器重启或者web项目重新加载时调用)

    getServletConfig():返回ServletConfig对象,,在该对象中包含了servlet初始化信息

    通过下图进一步理解Servlet的生命周期:

    当客户端一个请求到来时,tomcat首先根据请求的URL得到相应的servlet,然后调用该servlet的service()方法,并根据是get还是post请求调用doget和dopost方法,这两个方法的输出作为响应内容发送给客户端。当我们要关闭tomcat时,tomcat在退出前,还要负责释放servlet所释放的资源。

    Servlet中实现输出html页面

    需要通过参数response来作出响应,可以通过HttpServletResponse中的方法来实现

    PrintWriter  getWriter( )   返回PrintWriter对象  PrintWriter可以向客户端输出字符。

    通常我们习惯给这个类型的对象起名叫做out

    Servlet中代码实现

    PrintWriter out=response.getWriter();

    解决乱码问题

    设置提交信息的字符编码,通过HttpServletRequest中的方法来实现: 

    ,参数为”utf-8”时,设置提交字符编码为支持中文。

    例:request.setCharacterEncoding("utf-8");

    设置响应信息的字符编码,HttpServletResponse中的方法来实现:

    例:response.setContentType("text/html; charset=UTF-8");

    response.setCharacterEncoding("utf-8");

    请求转发

    HttpServletRequest中具有方法getRequestDispatcher,这个方法是ServletRequest中的方法,方法的返回值是RequestDispatcher类型的对象。

    public  RequestDispatcher  getRequestDispatcher (java.lang.String path)

    Servlet中,利用RequestDispatcher对象,可以将请求转发给另外一个ServletJSP页面,甚至是HTML页面,来处理对请求的响应。

    RequestDispatcher对象具有的public void forward(ServletRequest request, ServletResponse response) 这个方法能够实现将请求转发给另外的页面。

    request.getRequestDispatcher("success.html").forward(request, response);

    HttpServletRequest对象的生命周期:从一个请求开始,到这个请求处理结束。而且只要刷新页面,request也将失效。

    请求转发的特点:

    请求转发后,不会产生新的请求,会继续沿用原来的请求

        请求转发后,地址栏显示的是原页面的URL

    请求转发时用到的接口RequestDispatcher,在这个接口中定义了两个方法:

    1)forward(ServletRequest request,ServletResponse response)

    必须在响应提交给用户之前调用。

    2)include(ServletRequest request,ServletResponse response)

    3)区别:include()将请求转发给其他的Servlet,被调用的Servlet对该请求做出的响应将并入原先的响应对象中,原先的Servlet还可以继续输出响应信息。

    forward():将请求转发给其他的Servlet,将由被调用的Servlet负责对请求做出响应,而原先Servlet的执行则终止。

    重定向

    重定向就是指将用户的请求重定向给另外一个Servlet或页面,然后由它们进行处理并产生对请求的响应。

    HttpServletResponse 类的public void  sendRedirect(java.lang.String location)  能够实现重定向的页面跳转。但是与请求转发的原理不一样。

    Response.sendRedirect(“success”);                 

    重定向的特点:

    重定向后,会产生一个新的请求

    重定向后,地址栏显示的是目标页面的URL

    2种跳转完成同样的功能,但是区别非常大:

    在地址栏中,用重定向跳转后地址栏会显示目标页面。请求转发地址栏显示源页面

    区别在于请求的次数:请求转发 请求没变;重定向  会产生新的请求

    request.getRequestDispatch(“T2.jsp”).forward(request,response);相当于将本次的请求和响应转发给你

    请求转发不能跳转到其他项目中,只能在本项目内跳转,重定向可以跳转到其他项目中

    HTTP协议是无状态的协议,发送的请求不记录用户的状态,不记录用户的信息。就相当于它被访问了2次,不知道是哪两人访问的,或者是一个人访问两次。

    正是因为HTTP协议的这一特点,用户的活动发生在多个请求和响应之中,作为web服务器,必须能够采用一种机制来唯一地标识一个用户,同时记录该用户的状态。比如说我们平时上的qq.可以设置登录状态,记住密码,之后我们在一段时间内就可以不用输入密码直接输入,那么Http协议是无状态的,我们怎么可以让他记住我们的状态呢,就是通过会话跟踪技术

    什么是会话:

    就像我和一个人之间的对话

    会话跟踪技术有哪几种?

    Cookie    Session    隐藏表单域(hidden) URL重写

  • 相关阅读:
    MongoDB 基础
    类加载流程,类加载机制及自定义类加载器详解
    Object中有哪些方法及其作用
    Intellij IDEA 导入Maven项目
    用IDEA开发Spring程序
    深入浅出 Java 8 Lambda 表达式
    UUID.randomUUID()简单介绍
    json字符串转成 json对象 json对象转换成java对象
    字符串转 Boolean 的正确方式
    获取JSON中所有的KEY
  • 原文地址:https://www.cnblogs.com/panxuejun/p/5973225.html
Copyright © 2011-2022 走看看