zoukankan      html  css  js  c++  java
  • java_第一年_JavaWeb(2)

    HTTP协议

    HTTP协议——超文本传输协议,用于定义web浏览器和web服务器之间数据交换的过程,遵守一定的通讯的格式;

    HTTP请求——包括请求行和多个信息头

    • 请求行:包含请求方式(常用的GET、POST等)、URL(可附加参数,在URL后接?,若多个数据可用&隔开)、HTTP的版本号
    • 信息头:
    1. Accept:表示浏览器所支持的数据类型
    2. Accept-Charset:表示浏览器所支持的字符集
    3. Accept-Language:表示浏览器的语言环境
    4. Accept-Encoding:表示浏览器支持的压缩格式
    5. Host:告诉服务器所要访问的主机
    6. If-Modified-Since:告诉服务器缓存数据的时间
    7. Referer:告诉服务器客户机是从哪个页面来的,防盗链
    8. Connect:请求完后是断开连接还是保持连接

    HTTP响应——包含状态、信息头、实体内容

    • 状态行:HTTP版本号、状态码、原因叙述(如:OK)
    • 信息头:
    1. Location:告诉浏览器跳到哪(重定向)
    2. Server:告诉服务器的型号
    3. Content-Encoding:告诉浏览器数据的压缩格式
    4. Content-Language:告诉浏览器的语言环境
    5. Content-Type:告诉浏览器回送数据的类型
    6. Contennt-Length:告诉浏览器数据的长度
    7. Refresh:告诉浏览器定时刷新
    8. Content-Disposition:告诉浏览器以下载的方式打开数据
    9. Transfer-Encoding:告诉浏览器数据以分块的方式回送
    10. Expires:-1  :控制浏览器不要缓存

    Servlet接口

    Servlet是一个用于处理连接请求的接口,处理过程如下:

    1. web服务器检查是否已经装载了该Servlet的实例对象,如果是,直接走3,否则,执行2;(首次访问才会创建目标Servlet)
    2. 装载并创建一个Servlet实例对象,并调用实例对象的init()方法;
    3. 创建一个封装HTTP请求信息的HttpServletRequest对象和一个代表HTTP响应信息的HttpServletResponse对象,后调用Servlet的service()方法并将请求和响应对象作为参数传递进去;
    4. WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法;

    Servlet接口的实现类:GenericServlet、HttpServlet。

    平时用的比较多的是HttpServlet类,它是在原有的Servlet接口上添加了一些HTTP协议处理方法,且覆写了service方法,该方法可以自动判别请求方式,如GET,则调用doGet;如POST,则调用doPost方法,因此我们在编写Servlet时,只需覆写doGet和doPost方法即可;

    为了让客户端通过URL访问到Servlet接口程序,我们通常需要在web.xml这个配置文件中配置URL;通过<servlet>和<servlet-mapping>这两对元素完成;

    <servlet>包含两个子元素<servlet-name>和<servlet-class>;分别表示Servlet的注册名和完整类名;

    <servlet-mapping>包含两个子元素<servlet-name>和<url-pattern>;分别用于指定注册名的对外的访问路径,可以是正则表达式,匹配原则是“越像谁就找谁”;且一个<servlet>可以对应多个<servlet-mapping>;

    如果在<url-pattern>中仅设置一个斜杆/,则表示该<servlet>为缺省Servlet,即将匹配不到的url都交给缺省Servlet处理;

    Servlet与普通java类的区别是:Servlet是一个供其他java程序调用的java类,不可以单独运行;在Servlet整个生命周期中,只会调用一次init方法,即Servlet实例一旦创建,会被保存在内存中,为其服务后续的请求,而service方法却是每次请求都调用一次;

    当有多个客户端连接到同一个Servlet时,Servlet并不会再实例化,而是通过多线程调用service方法进行处理,这个时候就有可能会造成线程的安全问题,而引起这种问题的往往是存在全局变量,当多个service方法调用该变量时就会造成错误,最好的解决方法是设置局部变量,即每个线程各种操作各种线程内的变量,互不影响;

  • 相关阅读:
    [NOIP2011]选择客栈
    [学习笔记]字符串的一些基本操作
    [学习笔记]树链剖分
    [宁波集训]0827Day1
    [POI2015]LOG(树状数组)
    [学习笔记]树形dp
    货车运输(最大生成树+倍增LCA)
    POJ 3617 Best Cow Line 贪心算法
    C++ STL next_permutation() prev_permutation(a,a+n)用法。
    POJ 2386 Lake Counting dfs
  • 原文地址:https://www.cnblogs.com/lzj-learn/p/11598756.html
Copyright © 2011-2022 走看看