一、Servlet生命周期

Servlet运行在Servlet容器中,其生命周期由容器全盘控制。容器会创建请求和响应对象、为Servlet分配一个线程、调用servlet的service()方法,并传递请求和响应对象的引用作为参数

当应用加载并使用一个Servlet时,从初始化到销毁这个Servlet期间会发生一系列的事件,这些事件叫做Servlet的生命周期事件(或方法)。Servlet 生命周期可以归纳为Servlet 加载--->实例化--->服务--->销毁。

上图体现了servlet生命周期的三大重要时刻:

  1. 容器调用Servlet的init()方法,对Servlet进行初始化。在Servlet实例化之后,Servlet容器会调用init()方法,来初始化该对象,主要是为了让Servlet对象在处理客户请求前可以完成一些初始化的工作,例如,建立数据库的连接,获取配置信息等。对于每一个Servlet实例,init()方法只能被调用一次。
  2. Servlet初始化之后,将一直存在于容器中。当第一个客户请求到来时容器会从线程池分配一个线程,并调用servlet的service()方法。该方法会查看Http请求,确定请求方法(GET或Post),并在Servlet调用对应的方法(doGet()或doPost());

    service()是Servlet的核心,负责响应客户的请求。每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,要注意的是,在service()方法被容器调用之前,必须确保init()方法正确完成。容器会构造一个表示客户端请求信息的请求对象(类型为ServletRequest)和一个用于对客户端进行响应的响应对象(类型为ServletResponse)作为参数传递给service()方法。在service()方法中,Servlet对象通过ServletRequest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调用ServletResponse对象的方法设置响应信息

  3. WEB容器决定销毁Servlet时,先调用Servlet的destroy()方法,通常在关闭web应用之前销毁Servlet。destroy()仅执行一次,在服务器端停止且卸载Servlet时执行该方法。

每个请求都在一个单独的线程中运行

每个请求都在一个单独的线程中运行,service()方法总是在其自己的栈中调用,这其中的关系如下图所示:

二、请求和响应

前文讨论了Servlet,其中service()方法是Servlet的核心。负责响应客户的请求。当客户端请求来临时,容器创建一个线程,调用Servlet的service()方法,并且,容器会创见两个参数,请求ServletRequest和响应ServletResponse,作为service()方法的参数。

三、重定向和转发

在实际的开发中,页面的跳转非常常见,Servlet中的页面跳转可以通过转发或者重定向来实现。

3.1 重定向

servlet重定向,通过调用sendRedirect()方法,可以将网页重定向到另一个页面。sendRedirect()可使用相对URL或者绝对URL

如下图所示,在浏览器中输入如下地址:

Servlet在接收到请求之后,重定向为“form.html”,操作如下:

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {response.setContentType("text/html");response.sendRedirect("form.html");
}

重定向之后,客户会发现浏览器地址发生了变化 :

不能子响应已经提交之后才调用sendRedirect,也就是说,如果已经向流中写了东西,再想重定向就太晚了 。

3.2 转发

不同于重定向,转发是在服务器端做工作,即转发是服务器行为,是不经过浏览器的。重定向是让客户来完成工作,而转发是要求服务器上的某某来完成工作。因此,重定向对应客户,转发对应服务器

转发操作如下:

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {response.setContentType("text/html");RequestDispatcher view = request.getRequestDispatcher("cookieresult.jsp");view.forward(request,response);}

以上转发代码和重定向实现了同样的页面跳转的功能,但是我们会发现,浏览器地址并没有发生变化。

Servlet生命周期及请求、响应相关推荐

  1. 【JavaLearn】#(23)JSP相关语法、HTTP协议、Servlet介绍、Servlet生命周期、请求和响应、相对路径、转发和重定向

    1. JSP简单内容 1.1 JavaEE JavaEE 包含JSP JavaEE是一个开发分布式企业级应用的规范和标准.JavaEE包含之前学过的所有内容(JavaSE) 真正开发中,很少使用Jav ...

  2. Web容器和Servlet生命周期

    为何需要Web容器 Web服务器本身主要用于支持http协议,包括监听和相应http请求.web服务器一般处理静态的请求,如文件系统中的静态文件.web容器则是为web相关的组件提供运行环境,可以从' ...

  3. Servlet生命周期与工作原理

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

  4. Servlet第一篇【介绍Servlet、HTTP协议、WEB目录结构、编写入门Servlet程序、Servlet生命周期】...

    tags: Servlet 什么是Serlvet?# Servlet其实就是一个遵循Servlet开发的java类.Serlvet是由服务器调用的,运行在服务器端. 为什么要用到Serlvet? 我们 ...

  5. Servlet底层原理、Servlet实现方式、Servlet生命周期

    Servlet简介 Servlet定义 Servlet是一个Java应用程序,运行在服务器端,用来处理客户端请求并作出响应的程序. Servlet的特点 (1)Servlet对像,由Servlet容器 ...

  6. Servlet第一篇【介绍Servlet、HTTP协议、WEB目录结构、编写入门Servlet程序、Servlet生命周期】

    什么是Servlet? Servlet其实就是一个遵循Servlet开发的java类.Servlet是由服务器调用的,运行在服务器端. 为什么要用到Servlet? 我们编写java程序想要在网上实现 ...

  7. 【Servlet】Servlet生命周期

    Servlet生命周期是指Servlet实例从创建到响应客户请求,直至销毁的过程. Servlet程序本身不直接在Java虚拟机上运行,由Servlet容器负责管理其整个生命周期. Servlet生命 ...

  8. 关于servlet生命周期

    主题:关于servlet生命周期 时间:2018-09-25 内容: (一)初始化阶段init() 默认web.xml,在服务器启动,第一次发送请求,服务器容器会实例化servlet对象,并执行ser ...

  9. 详解servlet生命周期

    详解servlet 生命周期(转载) Servlet 有良好的生存期的定义,包括如何加载.实例化.初始化.处理客户端请求以及如何被移除.这个生存期由 javax.Servlet.Servlet 接口的 ...

最新文章

  1. FaceShifter:一秒换脸的人脸交换模型
  2. mysql5.5安装
  3. 开源大佬面对面:InsightFace带你打造开箱即用的人脸识别系统
  4. 雷达多普勒频率计算公式_非接触式雷达在线测流系统是由什么组成的?
  5. 分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(2月6日-2月12日)
  6. 在Gilt使用Scala、Docker和AWS演化微服务
  7. 20年未解的MIT密码难题,被自学成才的程序员破解了,比预计早15年
  8. ArcGIS Maritime Server 开发教程(六)Maritime Service 开发技巧
  9. 爪哇国新游记之二十----将数字转换成中国汉字大写形式
  10. 高通工具过滤_高通QXDM|高通诊断监视工具(Qualcomm QXDM)下载v3.14 官方版 - 欧普软件下载...
  11. python如何解压zip文件_Python压缩解压zip文件
  12. 梦幻西游鸿蒙石之鉴如何捡碎片,梦幻西游鸿蒙石之鉴任务攻略 鸿蒙石之鉴攻略...
  13. 淘宝网nbsp;E客服帐号nbsp;登录阿里旺旺时nbsp;…
  14. (转载)年终总结 算法数据的思考 结尾彩蛋
  15. [项目管理-19]:在项目管理中, 如何用Jira对项目管理中的所有活动进行结构化、数字化和量化?
  16. week8 作业B 猫猫向前冲
  17. 自考本科计算机有哪些专业可以选,自考本科有什么专业可以选择
  18. 看懂区块链域名系列(三)
  19. 邀请好友注册页面html,邀请分享页面-用户激励.html
  20. 12306订票候补是个坑_抢票神器成GitHub热榜第一,支持候补抢票,Python跑起来 | 标星8400...

热门文章

  1. Windows cmd命令 个人常用0529
  2. CPU使用率优化与跟踪各种工具
  3. vscode恢复被误删的文件
  4. Android GUI系统框架介绍
  5. 阿里云轻量级服务器搭建博客网站教程(入门级别搭建)
  6. 如何识别手写字?这样识别更准确
  7. 太极root权限_太极下载无需root
  8. 区块链软件开发公司谈区块链为什么被大众所接受
  9. Css实现手机端页面强制横屏
  10. html表格嵌套最外层属性无效,表格可以嵌套吗