Servlet为创建基于web的应用程序提供了基于组件,独立于平台的方法。
目录
一、简介
1、Servlet是什么
Java Servlet是运行在web服务器或应用服务器上的程序。他是作为来自web浏览器或其他HTTP客户端请求和HTTP服务器上的数据库或应用程序之间的中间层。
可以完成收集来自网页表单的用户输入、呈现来自数据库或其他源的记录、动态创建网页等功能。
优点:Servlet在Web服务器的地址空间内执行,独立于平台。
2、Servlet的架构
3、Servlet任务
(1)读取客户端(浏览器)发送的显式数据,包括网页上的HTML表单或者也可以是来自applet或自定义的HTTP客户端程序的表单。
(2)读取客户端(浏览器)发送的隐式的HTTP请求数据,包括cookies、媒体类型和浏览器能理解的压缩格式等。
(3)处理数据并生成成果。
(4)发送显式数据(即文档)到客户端(浏览器),文档的格式多种多样,可以是文本文件(HTML或XML)、二进制文件(GIF、图像)Excel等。
(5)发送隐式HTTP响应到客户端(浏览器)。
4、Servlet包
javax.servlet 和 java.servlet.http
二、Eclipse JSP/Servlet 工程创建
在Eclipse中创建Servlet程序时即新建Dynamic Web Project即可。
1、Dynamic Web Project目录解释
deployment descriptor:部署的描述
Web App Libraries:自己加的包可以放在里面
build:放入编译后的文件
WebContent:放进写入的页面
2、Servlet文件创建
在Eclipse中可以选择直接新建Servlet文件,要注意需对web.xml进行修改。
(如何进行修改将在后续的笔记中记录)
三、Servlet生命周期
1、综述
Servlet生命周期可以被定义为从创建到毁灭的整个过程。
Servlet初始化后调用用init()方法;
Servlet调用service()方法来处理客户端的请求;
Servlet销毁前调用destroy()方法;
Servlet由JVM的垃圾回收器进行垃圾回收。
2、init()方法
只被调用一次,在第一次创建Servlet的时候被调用,用于一次性初始化。
Servlet创建于用户第一次调用对应于该Servlet的URL时,但也可以制定Servlet在服务器第一次启动时被加载。
当用户调用一个Servlet时,就会创建一个Servlet实例,每一个用户请求都会产生一个新的线程,适当的时候移交给doGet或doPost方法.
init()方法简单地创建或加载一些数据,将被用于Servlet地整个生命周期。
public void init() throws ServletException{
//初始化值代码
}
3、service()方法
service方法是执行实际任务的主要方法,Servlet容器(即Web服务器)调用service()方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。
每次服务器接收到一个Servlet请求时,服务器会产生一个新的线程并调用service()。则service()方法会检查HTTP请求的类型(GET POST PUT DELETE等),并在适当的时候调用doGet doPost doPut doDelete等方法。即service()方法是由Servlet容器调用,从而在适当的时候调用doGet等方法,则不需要对service方法做任何动作,只需要根据来自客户端的请求类型来重写doGet或doPost方法(最常用的两种方法)。
public void service(ServletRequest request, ServletRespond repond) throws ServletException, IOException{
}
4、doGet()和doPost()方法
(1)doGet
GET请求来自于一个URL的正常请求或者来自于一个未制定METHOD的HTML表单,由doGet()方法处理。
(2)doPost
Post请求来自于一个特别制定了METHOD未POST的HTML表单,由doPost方法处理。
(3)doGet是接受网页用get方法时调用的,doPost是用来接受post方法的。
get方法就像在网页的地址栏里看到的一堆乱码,即url后面有参数;post就是用表单传过去的,就好像把数据都打包发过去一样。既使无法区分也可以选择在servlet中把功能都写到一起,即在一个方法中调用另一个方法。
5、destroy()方法
destroy()方法只会被调用一次,在Servlet生命周期结束时被调用。destro()方法可以使Servlet关闭数据库连接,停止后台线程,把Cookie列表或点击计数器写入到磁盘中,并执行其他类似的清理活动。在调用destroy()方法后,servlet对象被标记未垃圾回收。
public void destroy(){
}
6、架构图
(1)第一个到达服务器的HTTP请求被委派到Servlet容器,容器调用init()方法加载Servlet;
(2)Servlet加载后,Servlet容器调用service方法处理该HTTP请求;
(3)然后,Servlet容器处理由多个线程产生的多个请求,每个线程执行一个单一的Servlet实例的service方法。