Java Web开发,我们在这里谈到一个简单的,基础的,也是通用的技术-Servlet。如果要学好JavaWeb,个人认为,Servlet是首要必须学好的技术。因为我们之后的框架技术,多数是在他基础上扩展,或者是依赖于他来扩展的。
首先,我们来谈谈Servlet的生命周期,我们来看下面这幅图
我们能在这张图上看到Servlet的完整的生命周期。
首先,我们通过浏览器发送Http请求到Servlet容器,也就是Tomcat服务器中。
当服务器接收到请求之后,会判断是否是第一次调用该Servlet,如果是第一次调用,则初始化一个Servlet供使用(调用Servlet的init()方法),但是如果是第二次调用,就直接使用该Servlet。当然,如果这个Servlet在Web.xml中配置过服务器启动时就加载的参数,当然说明服务器里已经有这个Servlet了,所以就不需要再初始化一个新的了,直接拿有的来用。
new好了Servlet对象后,服务器当然就需要开始new一个HttpServletRequest和一个HttpServletResponse对象。
接下来,服务器会将之前new出来的两个对象传入Servlet中的service()方法里进行业务处理。如果是基于Web,那service()方法是已经写好了,不需要重写的,当然官方也不推荐重写,因为这个service()方法里面要判断传过来的HTTP请求类型,然后通过请求类型调用相应的业务处理类doXXX(),我么常用到的就是doGet()和doPOST()方法了。所以说这里就是调用serice()方法,然后根据HTTP请求类型调用相应的方法。
最后,当我们完成操作后,需要返回一个封装好的HttpServletResponse方法。该方法会返回到Web容器中,然后由容器负责将其返回发送给浏览器显示。该Servlet在此次调用后,将会常驻于后台内存中,等待下一次的任务。
而当容器,也就是服务器shutdown,所有的Servlet就会调用其destory()方法对自身进行销毁工作。
这里总结一下从前我学习servlet用到的一些重点知识点:
1. HTTP协议定义了GET和POST两种请求方法,POST方法对请求发送的数据量没有限制。
2. Servlet允许用户在服务器上运行Java代码和生成动态内容。
3. Servlet运行于Servlet容器中。
4. 扩展HttpServlet类的Servlet必须覆盖如下至少一个方法:doGet、soPost、
doPut、doDelete、init、destroy和getServletInfo。
5. Servlet声明周期包含三种方法:init()、service()和destroy()。
6. Servlet API包含在两个包中,javax.servlet和javax.servlet.http。
7. 通过从GenericServlet类或HttpServlet类扩展,可以编写Servlet。
分享到:
相关推荐
在本文中,我们将深入探讨 `Scanner` 类的基本用法,并通过一个具体的实例来展示如何使用它。 首先,创建一个 `Scanner` 对象,我们需要传入一个 `Readable` 接口的实例。在控制台输入数据时,通常传入 `System.in`...
老生常谈外链 站长要做到对症下药.pps
正如标题所言,《电子技术的老生常谈——接地》一文中提到的那样,尽管接地的基本概念在每一次培训和交流中都会被提及,但往往缺乏一个通用而全面的方法论指导。本文旨在深入探讨接地的各种类型、目的以及具体的实施...
以上知识点详细介绍了JavaScript面向对象编程中的基本特性、对象的定义方式以及如何通过不同方式实现封装、继承和多态。通过深入理解这些概念,可以帮助开发者更加高效和规范地进行JavaScript编程,编写出更加优雅...
ProgressBar和ProgressDialog是Android开发中常见的两种进度条控件,用于展示任务执行的进度或等待状态。下面我们将深入探讨这两种控件的用法。 首先,ProgressBar是一个可以显示具体进度的组件,它可以是圆形或...
Java设计模式是在特定环境下,为了解决某类重复出现的问题而总结出来的一套成功或有效的解决方案。这些设计模式旨在提高代码的可重用性、可维护性和可扩展性。 设计模式通常包含以下几个关键要素: ...
以下是关于MongoDB数据库基础操作的一些关键知识点: 1. **文档型数据库**:MongoDB采用文档型数据模型,其中数据以BSON(Binary JSON)格式存储,类似于JSON结构,允许每个文档具有不同的字段,提供了高度的灵活性...
在Android开发中,事件传递和处理机制是相当关键的一个部分,尤其对于用户界面的交互有着决定性的影响。本文主要探讨了Android系统如何处理触摸事件,通过拟人化的比喻来解释事件传递的流程,并通过实际代码示例进行...
js数据类型主要分为基本数据类型和引用数据类型 基本数据类型和引用数据类型的区别: 基本数据类型是对值得引用,引用数据类型是对地址的引用; 基本数据类型存放在栈内存,栈内存提供了供JS代码执行的环境,引用...
jQuery-Kwicks-Amination Kwicks 图书馆是老生常谈,但却是个好东西。 如果您想计算它生成的不同事件并制作幻灯片,这里有一些 javascript 可以帮助您。 我花了一些时间,所以可能会为您节省一些时间:) 看看它在行动
OOM顾名思义,Object-Object-Mapping实体间相互转换,AutoMapper也是个老生常谈了,其意义在于帮助你无需手动的转换简单而又麻烦的实体间关系,比如ViewModel和entity的转换,SearchModel和Entity的转换,我这篇分享...
Log4j和Log4j2的区别 Log4j和Log4j2是两个常用的日志记录工具,它们都来自Apache开源项目。虽然它们都是日志记录工具,但是它们之间有很多区别。下面我们将从配置文件类型、核心JAR包、文件渲染和Log调用四个方面来...
所谓重载,就是多个相同函数名的函数,根据传入的参数个数,参数类型而执行不同的功能。所以函数重载实质上是为了解决编程中参数可变不统一的问题。这篇文章主要介绍了老生常谈python中的重载,需要的朋友可以参考下
掌握类型转换的知识点对于编写健壮的JavaScript代码至关重要,能够帮助开发者避免很多常见错误,如类型强制转换导致的逻辑错误。通过上面介绍的函数和方法,可以灵活地在不同数据类型间进行转换,从而满足各种编程...
老生常谈foreach(增强for循环)和for的区别 在 Java 编程语言中,foreach 和 for 是两种常用的循环语句,都是用于遍历数组或集合的元素。然而,foreach 和 for 之间存在一些关键的区别,了解这些区别对于编写高效的...
下面小编就为大家带来一篇老生常谈Python基础之字符编码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
getline函数的基本语法为`getline(istream &in, string &s)`,其中`in`是输入流,`s`是string变量。该函数从输入流`in`中读取一行字符,并将其存储到string变量`s`中。 二、getline函数的功能 getline函数的主要...