一、Servlet基础
Servlet全称Sever Applet,是一种使用Java语言来开发动态网站的技术。
Servlet是使用Java Servlet接口(API)运行在Web服务器上的Java程序。与普通Java程序不同的是,它是位于Web服务器内部的服务器端的Java应用程序,可以对Web浏览器或其他HTTP客户端程序发送的请求进行处理。
由于它是基于Java的,几乎可以使用所有的Java API,因此很多Java能做的事,Servlet也能做。其功能很强大。
一个Servlet程序其实就是一个按照Servlet规范编写的Java类。在执行Servlet程序时,也是需要先被编译成字节码文件,然后再被部署到服务器运行的。
二、Servlet容器
在提到Servlet容器时,我们不得不提到的就是Web容器和Web服务器。
Web服务器:通常我们所说的web服务器,其功能其实非常的单一,只能提供http(s)功能,让用户访问静态资源,它们没有办法执行Java代码,没有办法访问数据库。
如果我们想要开发一个动态网站,仅仅只有一个web服务器是没有用的,必须要有编程语言的运行环境和数据库管理系统做支撑。
Web容器:通常情况下,Servlet容器也就是指Web容器,如tomcat。Servlet容器就是Servlet代码的运行环境,它除了实现Servlet规范定义的各种类和接口,为Servlet的运行提供底层支持,还需要管理用户编写的Servlet类。
为什么我们自己编写的Servlet类也需要Servlet容器来管理?
因为我们自己编写的Servlet类没有main()函数,不能独立运行,只能作为一个模块被载入到Servlet容器中,然后由Servlet来实例化并调用其中的方法。
有时候,web容器往往也会自带web服务器模块,提供基本的HTTP服务,因此,我们只需要安装一款web容器就能部署Servlet网站了。因此,有时候web容器也被称作web服务器。
三、Servlet的生命周期
1)加载Servlet。在Web容器启动或客户机第一次请求服务时,容器将加载Servlet类并将其放入到Servlet实例池。
2)初始化Servlet。当Servlet实例化后,容器将调用Servlet对象的init()方法完成Servlet的初始化操作,主要是为了让Servlet在处理请求之前做一些初始化操作。
3)处理请求。容器通过Servlet的service()方法处理客户端请求。在service()方法中,Servlet实例根据不同的HTTP请求类型做出不同的处理,并在处理之后做出相应的响应。
4)处理完成。在web容器关闭时,容器调用Servlet对象的destory()方法对资源进行释放。
因此,访问一个动态网页的过程,就是将对应的Servlet类加载、实例化并调用相关方法的过程。
四、Servlet、GenericServlet 、HttpServlet
Servlet规范的最顶层是一个Servlet接口,所有的Servlet类都直接或间接地实现该接口。
创建Servlet的三种方式:
实现Servlet接口,重写其全部的方法。
继承GenericServlet抽象类,重写其service()方法。
继承HttpServlet抽象类,重写doGet()或doPost()方法。
由于第一种创建的方式非常复杂,因此Servlet内置了两个Servlet的实现类(抽象类)。更准确的来理解就是,GenericServlet是实现了Servlet接口的抽象类,HttpServlet是GenericServlet类的子类。
一般情况下,我们最常用的是通过第三种方式来创建Servlet类。因为,HttpServlet类在GenericServlet类的基础上专门针对HTTP协议进行了处理。省去了我们对HTTP协议分析和处理的过程。
在一个Servlet对象中,最常用的方法是doGet()与doPost()方法,这两个方法分别用于处理HTTP的Get和Post请求。
五、创建Servlet
Servlet的创建方式有两种。
第一种是创建一个普通的Java类,使这个类继承HttpServlet类,再通过手动配置web.xml文件注册Servlet对象。(特别繁琐)
此处我们以IDE集成开发工具为例创建Servlet。
a. New -> Dynamic Web project
![](https://i-blog.csdnimg.cn/blog_migrate/616fe354f4108c21e084ff7ba487d792.png)
b.记得给Project name起一个名字,如果下列框框中还有未选择的话,请依次选择。
![](https://i-blog.csdnimg.cn/blog_migrate/07fd8aa9182913d66405cd2bc9b977b4.png)
c.记得要打上勾
![](https://i-blog.csdnimg.cn/blog_migrate/82edfc25d9666480f5bbbf89d687ac2f.png)
d.创建项目成功之后,右键单击项目名。选择New -> Servlet。
![](https://i-blog.csdnimg.cn/blog_migrate/f5f7d1c6a0c5f5a3832843efa183a2b2.png)
e. 为防止出错,下面的包名可以先空着。但是需要给一个类名。然后Next。
![](https://i-blog.csdnimg.cn/blog_migrate/ae53a180fc1b2cf545f9d31becd69a71.png)
f.跳转到一个新窗口之后,点击next。
g.在这里选择需要的方法。
![](https://i-blog.csdnimg.cn/blog_migrate/fe925ff0e98366eac20ddb886ac5debc.png)
最后,我们就可以成功的创建出一个Servlet类了。