https://blog.csdn.net/Mithrandir_One/article/details/52900425

大家现在做的比较多的基本上就是 web 应用。所以一定要把 sevlet 及其实现类搞清楚。

一、Servlet的三大作用域的生命周期,作用范围以及选取

作用域:存放数据,获取数据(传递数据)
有效的作用域:生命周期,作用范围
作用域的三个方法 get set remove

作用域:理解成共享区域。
作用域的真正作用是为了有效的传递数据。
存放数据:setAttribute(String,Object);
获取数据:getAttribute(String );
删除数据:removeAttribute(String);

1. httpServeltRequest: 由servlet容器创建,该对象包含所有的http协议的请求信息

  1. **生命周期** :一次请求之间
  2. **作用范围**:所有被请求转发过的servlet都能获取到

2. httpSession:是一个会话,是一种服务器端技术 ,可以将用户信息保存在服务器端

  1. **生命周期**:一次会话
  2. **作用范围**:所有的servlet都可以获取到

3. servletContex:是一个全局的储存信息的空间,服务器开始就存在,服务器关闭才释放。

  1. **生命周期**:从项目开始运行到服务器关闭
  2. **作用范围**:所有的servlet都可以获取到

4. 作用域如何选用?

  1. httpServeltRequest:和当前请求有关的信息
  2. httpSession:和当前用户有关的信息
  3. servletContex:访问量比较大,不易更改

二、servlet 流程及生命周期

1. servlet的生命周期

1)实例化,有web容器实例化servlet实例
       2)初始化,容器调用init()方法
       3)服务,客户端请求servlet时,容器调用service()方法
       4)销毁,结束服务,调用destroy()方法

2. 相关方法:

1)当请求到达时,运行其service()方法。service()自动派遣运行与请求相对应的doXXX(doGet或者doPost)方法

2)request.getAttribute()和request.getParameter()

getParameter获取到的值只能是字符串,不可以是对象,而getAttribute获取到的值是Object类型的。
通过form表单或者url来向另一个页面或者servlet传递参数的时候需要用getParameter获取值;getAttribute只能获取setAttribute的值
       3)forward和redirect

对于直接方式forward,客户端浏览器只发出一次请求,Servlet把请求转发给Servlet、HTML、JSP或其它信息资源,由第2个信息资源响应该请求,两个信息资源共享同一个request对象。
 对于间接方式redirect,服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。它本质上是两次HTTP请求,对应两个request对象。

二、servlet 流程及生命周期( 文字说明):
1、当请求访问服务器的时候,服务器通过xml 配置文件找到对应的serlvet 类
2、如果是通过自动装载就在服务器启动时调用对应的servlet 中的init 方法,否则就在请求访问服务器的时候初始化
3、服务器根据web.xml 配置的servlet 映射,找到处理请求对应的类进行处理
4、servlet 根据请求的方式调用doGet/doPost方法
5、如果服务器停止则调用destroy方法销毁。

Servlet三大生命周期方法:

init()

service()

destroy()

Servlet生命周期

1.客户端发送请求后首先判断是否存在Servlet实例,如果没有存在创建Servlet实例(Servlet的构造方法)。

2.如果存在Servlet实例,则开始其初始化阶段,执行器初始化方法(init()方法)。

3.第三阶段是响应客户端请求阶段,调用service()方法,根据提交方式选择执行doGet()方法或者doPost()方法。

4.最后是销毁阶段,程序结束或者是服务器停止,调用其销毁方法(destroy()方法)。、

其中 init 方法,destory 方法只执行一次 

tomcat 装载servlet 的三种方式说明:

servletContext 说明:

//tomcat容器装载servlet,当服务器启动的时候会为servlet 创建一个servletContext 作用域
//此作用域为全局的,后期通过这个作用于理解springContext 作用域 //通过当前Servlet类的对象,得到与它关联的ServletContext对象,也就是上下文
ServletContext application = this.getServletContext(); //HttpSession(私有区域) 与 ServletContext(公共区域) 的区别是什么?
1、作用范围不同:HttpSession是针对每一个客户端浏览器单独有一个。
        ServletContext是针对每一个WEB应用程序有一个
2、存活时间不同:HttpSession第一次访问服务器,服务器端调用request.getSession()时创建,访问间隔时间超过30分钟就销毁。
         ServletContext服务器启动时创建,服务器停止时销毁。

-会引出 数据读取 IO

-在引出 BIO、NIO

-在引出 HTTP 的结构

controller 是怎么获取参数的的,servlet 就能怎样获取这些信息。这些信息只是 http 规范的一些约定,每次通信都会带着他们。

经过网络的基层协议后最终回到 HTTP 层(应用层-这个应用就是我们使用的 HttpServlet)。最终被 servlet(HttpServlet) 还原。

好比 C 语言,他没有 servlet,但是也有自己的手段去解析这些信息,只要遵循http的约定就行。这也印证了,网络的 7 层协议只是

概念上划分这一说法。可以是 4 层,也可以是 7 层,如果我们对网络理解的够深刻(成为权威),也可以按自己的理解划分为 5 层、3 层,

这都不是错误的说法。所以我认为,学习网络协议不应该去背 7层协议是什么。而应该去确认网络中的一个字节,经过了哪些东西(软件、硬件)

之后从一台电脑,出现在另一台电脑上。后续把这西补充进来。这时再回来看网络的7层协议就明白他指的是什么了。

  1. Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
  2. Accept-Encoding:gzip, deflate, br
  3. Accept-Language:zh-CN,zh;q=0.9
  4. Cache-Control:no-cache
  5. Connection:keep-alive
  6. Content-Length:9012
  7. Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryuC3pyKdHe32ZTiLd
  8. Cookie:JSESSIONID=1A96D4E85B8EB2A527F5481FCADDC9B6
  9. Host:localhost:8080
  10. Origin:http://localhost:8080
  11. Pragma:no-cache
  12. Referer:http://localhost:8080/toUpload
  13. Sec-Fetch-Mode:navigate
  14. Sec-Fetch-Site:same-origin
  15. Sec-Fetch-User:?1
  16. Upgrade-Insecure-Requests:1
  17. User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36

sevlet的更多相关文章

  1. sevlet的url-pattern设置

    url-pattern的值,表示访问对应servlet的地址: 默认servlet的访问路径:http://localhost:8080/项目名称/Sevlet名称 如果不使用这种方式的话,可以使用自 ...

  2. idea sevlet连sqlserver失败解决

    1   普通java程序连sqlserver失败解决办法:https://www.cnblogs.com/Demonfeatuing/p/9208514.html 出现javax.xml.bind.J ...

  3. jsp+tomcat+mysql+sevlet+javabean配置过程

    在配置jsp开发环境的过程中会碰到不少问题,感谢网上的许多前辈的经验总结,作者cl41的JSP连接Mysql数据库攻略和作者Saulzy的MySQL学习笔记等文章对我来说简直是雪中送碳,为了帮助象我一 ...

  4. Sevlet局部变量初始化

    //java 代码部分package com.servlet; import java.io.IOException; import java.io.PrintWriter; import java. ...

  5. ideaJ+maven+javaweb实践: sevlet实现upload&download,javaIO代码

    因为工作的机器不让拷贝出来也不让发邮件出来也不让访问外网,所以文件两个PC挪来挪去很麻烦. 决定写一个网页,只有upload和download ideaJ,maven,java,tomcat 写一个j ...

  6. java web (sevlet)请求之get,post,forward,redirect

    [参考]web请求之get,post,forward,redirect 1,form表单:可以采用post或者get请求,客户端主动跳转,url地址会改变为提交后的地址 2,forward:forwa ...

  7. Sevlet处理HTML表单

    表单<form>用于搜集不同类型的用户输入.可以轻松地将一个HTML表单从一个Servlet发送到浏览器,当用户提交表单时,在表单元素中输入的值就会被当做请求参数发送到服务器. reque ...

  8. 获取sevlet response值

    调用: PrintWriter out = new PrintWriter(new OutputStreamWriter(response.getOutputStream(), "UTF-8 ...

  9. servlet(一):从Sevlet到HttpServlet

    Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层. servlet ...

随机推荐

  1. zabbix服务端安装

    1.安装zabbix服务(1)先rpm安装lamp环境 yum install -y httpd mysql mysql-libs php php-mysql mysql-server php-bcm ...

  2. 阶段3 2.Spring_09.JdbcTemplate的基本使用_1 今日课程内容介绍

  3. 阶段3 2.Spring_02.程序间耦合_2 编译期依赖

    通过maven可以看到这个资源不存在 找到本地仓库,mysql 5.17确实没有jar包 在pom.xml内把版本改成5.16 5.1.6在本地仓库内是完整的版本 运行我们的测试方法 把依赖注释掉 再 ...

  4. PS 之图片中抠出大树

    工具:Photoshop CC2017 原图:(目的是将大树从图片中抠出) 操作: 1.打开要抠图的图片,然后执行:[图层]---->[新建调整图层]---->[反相]---->[在 ...

  5. Logistic回归基础篇之梯度上升算法

    代码示例: import numpy as np import matplotlib.pyplot as plt def loadDataSet(): dataMat = [];labelMat = ...

  6. 【神经网络与深度学习】学习笔记:AlexNet&Imagenet学习笔记

    学习笔记:AlexNet&Imagenet学习笔记 ImageNet(http://www.image-net.org)是李菲菲组的图像库,和WordNet 可以结合使用 (毕业于Caltec ...

  7. 2019JAVA第三次实验报告

    Java实验报告 班级 计科二班 学号 20188442 姓名 吴怡君 完成时间 2019.9.24 评分等级 实验三 String类的应用 一.实验目的 掌握类String类的使用: 学会使用JDK ...

  8. 洛谷 P1194 飞扬的小鸟 题解

    题面 这道题是一道隐藏的比较深的DP(我太蒟蒻了!) 设f[i][j]表示到第i列时高度为j的最少步数是多少: 求上升时的方案就是一个完全背包!,求下降时的方案就是一个01背包: 然后处理边界就能A掉 ...

  9. 最长不下降/不上升子序列&&最长上升/下降子序列

    最长不下降/不上升子序列&&最长上升/下降子序列 struct cmp1{bool operator()(int a,int b){return a>b;}}; int main ...

  10. 第一次参赛经历:ecfinal总结

    刚接到要去参加ec的消息时,还是非常激动的,毕竟第一次参赛就参加如此高水平的编程竞赛(更高水平的比赛就是wf). 教练临时组队,把三个从没在一起打过比赛的三个人组成一队,当时有点担心默契和配合上的问题 ...