HTTP协议

  • HTTP:超文本传输协议,详细规定了浏览器和服务器之间的通信规则,通过网络传输HTML文档数据的协议
  • HTTP是一个应用层的协议,由请求和相应构成,一次请求一次响应
  • HTTP协议的特点:
    1.采用的是B/S架构
    2.HTTP可以传输各种类型的数据,比如文本,图片,音频和视频等
    3.HTTP1.0之前使用的是种短连接的方式,什么是短连接,就是限制每次连接只处理一个请求,服务器处理完成之后
    并收到浏览器的应答之后.就会断开连接.这种方式的好处是可以节省传输时间.但是缺点是,我请求了一个HTML文档,这个文档中又包含了,其他JS文件,图片文件,CSS文件,每当浏览器,遇这样一个Web资源,就会建立一个会话,那这样的话需要消耗资源和时间的.
    现在我们使用的HTTP1.1的版本使用的是长连接.使用长连接的情况下,当一个网页打开完成后,客户端和服务端之间传输数据时,连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立好的连接.当然,这个连接不会永久保持,服务器中可以设置这个保持连接时间.
    4.HTTP协议是一种无状态协议,什么叫协议的状态,就是指下一次传输可以记住本次传输数据的能力,那所谓无状态协议,就是http不会为了下一次连接,而维护本次连接所传输的数据,比如浏览器打开一个网页后,关闭浏览器,然后再次打开浏览器,但是服务器并不知道客户关闭了一次浏览器,所以HTTP是无状态协议,那如果说我们在一个网站中的多个页面间需要共享同一个数据,我们可以通过Cookie和Session来实现.

HTTP之请求Request

所谓的请求:浏览器网服务器发送数据

请求

请求行:请求信息的第一行
请求头:从请求信息的第二行开始到请空行
请求空行:从请求信息的第三行开始到请求空行结束
请求体:从请求空行往下

请求行:

GET /HTTPTest/login?username=zhangsan&password=123456 HTTP/1.1

  • 格式:请求方式 /请求的主机名? 请求资源 协议/版本
  • 请求常见的方式:get post
    get:会把请求的参数拼接到url后面,数据大小有限制,get请求没有请求体
    post:会把请求参数放到请求体里面,数据大小无限制
请求头
  • 格式 key:value,value (键值)

  • 常见的请求头
    Accept: text/html,image/* --告诉服务器当前客户端可以接收的文档的类型。其实这里包含了*/*,就表示什么都可以接收; 大类型/小类型 比如 text/css text/javascript
    Accept-Charset: ISO-8859-1 --告诉服务器,客户端提交的表单可能使用的编码类型
    Accept-Encoding: gzip --浏览器发给服务器,声明浏览器支持的编码类型
    Accept-Language:zh-cn --语言环境
    Host: localhost:8080 --访问主机
    If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT 客户端第二次请求此URL时,根据 HTTP 协议的规定,浏览器会向服务器传送 If-Modified-Since 报头,询问该时间之后文件是否有被修改过:
    后面跟的时间是本地浏览器存储的文件修改时间

    Referer: http://www.baidu.com/index.jsp --来自哪个页面、防盗链
    User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)
    Cookie
    Connection:Keep-Alive --链接状态 长链接
    Date: Tue, 11 Jul 2000 18:23:51 GMT --时间

HTTP之Response

所谓的响应:就是服务器往浏览器返回数据

响应:

响应行:响应信息的第一行
响应头:响应行的下一行
响应空行:响应头的下一行
响应体:响应空行的下一行

响应行:

HTTP/1.1 200 OK

  • 格式: 协议/版本 响应状态码 响应的描述
响应头

Location: http://www.baidu.org/index.jsp --跳转方向 302重定向
Server:apache tomcat --服务器型号
Content-Encoding: gzip --数据压缩
Content-Length: 80 --数据长度
Content-Language: zh-cn --语言环境
Content-Type: text/html; charset=GB2312 --告诉浏览器,服务器返回的文本采用什么编码
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT 在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记此文件在服务期端最后被修改的时间,
Refresh: 1;url=http://www.hehe.org --定时刷新
Content-Disposition: attachment; filename=aaa.zip --下载
Set-Cookie:SS=Q0=5Lb_nQ; path=/search 让浏览器将数据保存到本地
Expires: -1 --缓存 -1 就是让页面立即过期
Cache-Control: no-cache --浏览器和缓存服务器都不应该缓存页面信息强制每次请求直接发送给源服务器,而不经过本地缓存版本的校验
Connection: Keep-Alive --保持连接 长链接
Date: Tue, 11 Jul 2000 18:23:51 GMT

动态Web开发技术

常见的动态web开发技术:servlet jsp php .ent

Servlet

  • 概念:运行在服务器端的小程序,它定义了一个类被浏览器访问的规则,是一个接口
  • 功能:接受请求 处理请求 做出响应

快速入门

  • 0.创建web项目
  • 1.定义一个Java类,实现Servlet接口
  • 2.重写所有未实现方法
  • 3.配置Servlet,在web.xml
 <!-- 配置Servlet,为了配置Servlet的访问路径 --><servlet><!--给servelet起名字--><servlet-name>demo1</servlet-name><!--配置servlet全路径--><servlet-class>cn.itcast.servlet.ServletDemo1</servlet-class></servlet><!--配置servlet映射--><servlet-mapping><servlet-name>demo1</servlet-name><!--配置在浏览器里面请求servlet的虚拟路径--><url-pattern>/demo</url-pattern></servlet-mapping>
  • 4.发布项目
  • 5.访问/demo路径访问该Servlet
    浏览器中:http://127.0.0.1:8080/项目名/web.xml中配置的虚拟路径名
    服务器通过反射的方式 创建Servlet对象,调用其方法

servlet生命周期:

  • 被创建:默认情况下,Servlet第一次被访问时,被创建,调用init()方法。
    只执行一次。Servlet是单例的。可能会存在线程安全问题,尽量不要定义成员变量。
    可以配置Servlet的创建时机。在web.xml的标签中配置

    0

  • 提供服务:每一次被访问时,会调用service()方法提供服务

  • 被销毁:服务器关闭时,servlet被销毁。
    服务器正常关闭是,在销毁Servlet之前,会调用destory()方法

ServletConfig对象:

配置对象 ServletConfig是一个接口 在Servlet初始化的时候 有服务器创建其子类对象传递给 init()方法

功能:
  • 1.获取servlet初始化参数
             *  String getInitParameter(String name)  *  Enumeration getInitParameterNames()  * 例子
System.out.println(config.getInitParameter("src"));System.out.println(config.getInitParameter("href"));Enumeration<String> names = config.getInitParameterNames();while (names.hasMoreElements()) {String key = names.nextElement();System.out.println(key);System.out.println(config.getInitParameter(key));}初始化参数可在 web.xml中配置
<servlet><servlet-name>demo3</servlet-name><servlet-class>com.click369.servlet.ServletDemo3</servlet-class>
<!--配置一些初始话参数--><init-param><param-name>src</param-name><param-value>c://a.txt</param-value></init-param><init-param><param-name>href</param-name><param-value>d://a.txt</param-value></init-param></servlet><servlet-mapping><servlet-name>demo3</servlet-name><url-pattern>/demo3</url-pattern></servlet-mapping>
  • 获取ServletContext对象 因为 ServletContext对象是由服务器创建出来的 我们要获取其对象 得通过ServletConfig对象中的方法才能获取出来
    * ServletContext getServletContext()
  • 3.获取servlet配置的名称 就是在web.xml中给servlet起的名字
    * String getServletName()
    * Servlet中对应getServletConfig方法。要想使用该方法获取config对象。
    则需要提升config对象的作用域。
    1.声明成员变量ServletConfig
    2.在init方法中赋值
    3.在getServletConfig方法中获取
创建方式
  1. 实现Servlet
  2. 继承GenericServlet
    1.适配器
    2.对ServletConfig进行优化。提升config对象的作用域
    3.实现了ServletConfig接口,简化对config对象的使用方式
  3. 继承HttpServlet:对http协议的封装
    * 重写doGet()和doPost()…方法 注意去掉super.doGet(); 和 super.doPost();
自动创建Servlet

ServletContext:代表了整个web应用

特点:

由服务器创建
单例

* 功能:
  • 域对象:在域的范围内共享数据
    * 范围:整个web应用
    * 存储所有用户共享的数据
    * setAttribute():
    * getAttribute():
    * removeAttribute():

JavaWeb中四大域对象:
* ServletContext:代表整个web应用
* HttpSession:会话域
* ServletRequest:请求域
* PageContext:页面域

  • 获取文件mime类型:
    * getMimeType(文件名称):

  • 获取文件运行的真实路径:
    * 真实路径:指服务器路径
    * getRealPath():
    * 1.webRoot下:项目根目录下
    * 2.WEB-INF下: 项目根目录下/WEB-INF
    * 3.src下: 项目根目录下/WEB-INF/classes

  • 注意:如果getRealPath("/"),获取的路径是项目的根目录
    //根目录
    ServletContext context = this.getServletContext();
    String rootpath = context.getRealPath("/");
    //System.out.println(rootpath);
    //1.webRoot
    String b = context.getRealPath("/b.txt");
    System.out.println(b);
    //2.WEB-INF
    String c = context.getRealPath("/WEB-INF/c.txt");
    System.out.println©;
    //3.src
    String a = context.getRealPath("/WEB-INF/classes/a.txt");
    System.out.println(a);

  • ServletContext只能用于web环境。如果是非web环境,则使用ClassLoader来获取真实路径
    比如我web项目里有一个普通的java工具类 我想获取文件的真实路径 那我就用不了 ServletContext
    //1.获取该类对应的类加载器对象
    ClassLoader loader = this.getClass().getClassLoader();
    //2.获取文件运行的真实路径
    URL url = loader.getResource(“a.txt”);
    String path = url.getPath();
    //注意类加载器来获取路径也有局限性 只能获取src目录下的文件
    // 方式2
    InputStream stream = MyUtil.class.getResourceAsStream("/a.txt");
    System.out.println(stream);

JavaWeb——day32 HTTP协议 ,Request,Respond,servlet及生命周期,ServletConfig相关推荐

  1. 【Servlet】HTTP 协议之请求方式、Servlet介绍、Servlet 的生命周期

    HTTP 协议之请求格式 HTTP协议官网:其中有http协议原文https://www.w3.org/Protocols/ 请求格式的结构: 请求头:请求方式.请求的地址和HTTP 协议版本 请求行 ...

  2. 创建线程的几种方式?JSP的九大内置对象及作用分别是什么?servlet的生命周期及常用方法?转发和重定向区别?ajax书写方式及内部主要参数都有哪些

    文章目录 1 , 创建线程的几种方式? 问题扩展: 2 ,JSP的九大内置对象及作用分别是什么? (1) 问题分析: (2) 核心答案讲解: 1.request对象 2.response对象 3.se ...

  3. Servlet的生命周期和工作原理

    原文 一.Servlet生命周期分为三个阶段: 1).初始化阶段:调用init()方法 2).响应客户端请求阶段:调用service()方法 3).终止阶段:调用destroy()方法         ...

  4. 阅文 java面试题,阅文笔试:讲讲servlet的生命周期

    大家好,我是勾玉! 该问来自2021届阅文Java方向笔试卷,servlet想必大家都有所了解,这是一个非常重要的知识点,希望大家多多关注. servlet的生命周期可分为初始化.响应请求.终止三个阶 ...

  5. Servlet及其生命周期

    今天开始对Servlet进行一个较为全面深入的学习,并将学习所得记录于此,与君共勉. 思维导图如下: 接下来开始对各部分进行介绍总结. 1.什么是servlet 定义:Servlet是小服务程序或服务 ...

  6. 简述Servlet的生命周期

    前言 在讲述Servlet的生命周期之前,我们一定要了解什么是Servlet? Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写 ...

  7. java之Servlet的生命周期

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

  8. 框架:Servlet的生命周期

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

  9. servlet的生命周期 (四个阶段).

    1.加载阶段 加载并实例化我们的servlet实例 从我们的Tomcat(容器)启动,Tomcat会通过类的加载器加载我们的servlet,并调用默认的构造函数 2.初始化阶段init() servl ...

最新文章

  1. Git/Ctags/Vim/GDB基础笔记
  2. 将bios还原为默认设置时无法启动windows
  3. python内置函数:iter、enumerate和next
  4. Adobe Achemy入门指南(二)
  5. jittor和pytorch生成网络对比之cyclegan
  6. 003:Virtualenvwrapper使用
  7. python 类-Python类(class)
  8. android微信动画制作,动画制作轻量级SDK:PAG六大优势助力开发
  9. MassTransitamp;amp;Sagas分布式服务开发ppt分享
  10. 软著文档鉴别材料_软著申请被驳回补正材料期限是多久?逾期未补正申请被撤回怎么办?...
  11. 120余家自动驾驶公司的行业汇总
  12. bolt在java,java – 在Apache Storm中将不同的元组从1个spout发送到不同的bolt
  13. 安装mysql最后一步第二个打叉_Mysql安装到最后一步时。出现start service红叉   亲朋好友帮忙指导一下!谢谢! 百...
  14. leetcode刷题答案
  15. 怎么让composer加速
  16. 转:越是聪明人,越懂得下笨功夫
  17. 基于特征全埋点的精排ODL实践总结
  18. typecho评论不显示用户头像怎么办?怎么改为QQ头像显示?
  19. HDU 5234 Happy birthday 最多蛋糕
  20. 手游推广,经营一家游戏公司需要多少人?

热门文章

  1. levelDB 的版本控制
  2. 4.19 python 网络编程和操作系统部分(TCP/UDP/操作系统概念/进程/线程/协程) 学习笔记
  3. 企业里没有TPM(可信赖平台模块)标准的安全芯片计算机,如何开启BitLocker锁定磁盘,如何备份系统,当系统出现问题又如何恢复,快速恢复又兼顾系统安全
  4. Win7 PE下安装Windows7系统非GHOST版本【图文教程】
  5. 什么是分布式操作系统?我们为什么需要分布式操作系统?
  6. Java复习:如何接受键盘输入的包含空格的字符串
  7. 模仿微信聊天时间展示
  8. 2017中国(上海)国际城市地下综合管廊产业展览会暨主题论坛会刊(参展商名录)
  9. 清理eclipse中得缓存
  10. 神雕侠侣手游服务器维修,《神雕侠侣》2021年4月8日更新维护新服开启公告