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. UI自动化关于图片验证码识别的解决方法

    def __save_screenshot(self): self.driver.save_screenshot('full_snap.png') self.page_snap_obj = Image ...

  2. ASP.NET MVC 发布WIN SERVER2012

    首先在打开服务器管理,点添加角色和功能 这个名字自己设置不打紧 勾选web服务器,之后点下一步 在功能选择中勾选下面部分 之后点击工具选择服务,确保web服务正在运行 此时服务端告一段落,返回主机打开 ...

  3. 一张图包含SEO一切要点

    看到一张好图 from http://www.rongyipiao.com/?p=8

  4. 【FICO系列】SAP 参数(条件表)灵活配置GS01/GS02/GS03

      公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[FICO系列]SAP 参数(条件表)灵活配 ...

  5. python学习之面向对象(二)

    6.2 类的空间角度研究类 6.2.1 添加对象属性 [总结]对象的属性不仅可以在__init__里面添加,还可以在类的其他方法或者类的外面添加. class A: address = '召唤师峡谷' ...

  6. JWT的实现原理

    前言最近在做一个python项目的改造,将python项目重构为java项目,过程中遇到了这个知识点,觉得这个蛮实用的,所以下班后回来趁热打铁写下这篇总结,希望后面的人能够有所借鉴,少走弯路. 一.优 ...

  7. 【神经网络与深度学习】Leveldb的一些具体操作说明

    本文转自 http://blog.csdn.net/poweruser5956/article/details/7727325 Leveldb概述 leveldb提供了持久的键值对的存储.key和va ...

  8. 【Qt开发】在QLabel已经显示背景图片后绘制图形注意事项

    主要是要解决图形覆盖的问题,通常的办法就是对QLabel进行子类化,并重载函数: void myLabel::paintEvent(QPaintEvent *event)   {       QLab ...

  9. 【DSP开发】【VS开发】MUX和DEMUX的含义

    MUX和DEMUX Mux 是 Multiplex 的缩写,意为"多路传输",其实就是"混流"."封装"的意思,与"合成" ...

  10. POJ2387 Til the Cows Come Home (最短路 dijkstra)

    AC代码 POJ2387 Til the Cows Come Home Bessie is out in the field and wants to get back to the barn to ...