文章目录
- 1、Servlet-01
- 2、Servlet简介
- 概述:Servlet是什么?
- 实现过程简述
- Servlet任务:Servlet具体做了什么?
- Servlet&JSP
- 3、Servlet的创建
- 4、Servlet容器
- 什么是Web服务器
- Web服务器存在的缺陷
- Servlet容器(或Web容器)
- 小结:
1、Servlet-01
本篇作为Servlet详解笔记的第一篇,主要内容包括:
- Servlet简介
- Servlet的三种创建方式
- Servlet容器
2、Servlet简介
概述:Servlet是什么?
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器。它是用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
- 狭义Servlet是指Java语言实现的一个接口;
- 广义Servlet是指任何实现了这个Servlet接口的类;
- 一般情况下,人们将Servlet理解为后者。
简单地理解,Servlet就是Java语言中用来生成动态Web内容的一个接口,但是一般我们认为的Servlet包含Servlet接口和实现Servlet接口的类;我们想生成动态Web内容就必须直接或间接地实现Servlet接口。
实现过程简述
最早支持Servlet技术的是JavaSoft的Java Web Server。之后,一些其它的基于Java的Web Server开始支持标准的Servlet API。**Servlet的主要功能在于交互式地浏览和修改数据,生成动态Web内容。**这个过程为:
- 客户端发送请求至服务器端;
- 服务器将请求信息发送至Servlet;
- Servlet生成相应内容并将其传给服务器,响应内容动态生成,通常取决于客户端的请求;
- 服务器将响应返回给客户端。
一个Servlet就是Java编程语言中的一个类,它被用来扩展服务器的性能,服务器上驻留着可以通过“请求–响应”编程模型来访问的应用程序。
Servlet任务:Servlet具体做了什么?
Servlet执行以下主要任务:
- 读取客户端(浏览器)发送的显示的数据。这包括网页上的HTML表单,或者也可以是来自applet或自定义的HTTP客户端程序的表单。
- 读取客户端(浏览器)发送的隐式的HTTP请求数据。这包括cookies、媒体类型和浏览器能理解的压缩格式等等。
- 处理数据并生成结果。这个过程可能需要访问数据库,执行RMI或CORBA调用,调用Web服务,或者直接计算得出对应的响应。
- 发送显示的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML或XML)、二进制文件(GIF图像)、Excel等。
- 发送隐式的HTTP响应到客户端(浏览器)。这包括浏览器或其他客户端被返回的文档类型(例如HTML),设置cookies和缓存参数,以及其他类似的任务。
RMI:Remote Method Invocation,远程方法调用,一种用于实现远程过程调用(Remote procedure call)的Java API,能直接传输序列化后的Java对象和分布式垃圾收集……(了解一下)
CORBA:一种编程语言,不用管!
Servlet&JSP
Servlet是第一代Java Web开发技术,JSP是第二代Web开发技术。
JSP才是现代化的Web开发技术,但是,Servlet是JSP的基础,Servlet虽然不直接面向用户,但是它依然是JSP的后台支撑。
想玩转JSP,就必须先玩转Servlet!!!
3、Servlet的创建
在Servlet中,一个动态网页对应一个Servlet类,我们可以通过web.xml配置文件将URL路径和Servlet类对应起来。访问一个动态网页的过程,实际上是将对应的Servlet类加载、实例化并调用相关方法的过程;网页上显示的内容,就是通过Servlet类中的某些方法向浏览器输出的HTML语句。
Servlet规范的最顶层是一个名为javax.servlet.Servlet的接口,所有的Servlet类都要直接或间接地实现该接口。直接实现Servlet接口不太方便,所以Servlet又内置了两个Servlet接口的实现类(抽象类),分别为GenericServlet和HttpServlet,所以,创建Servlet类有以下三种方式:
- 实现javax.servlet.Servlet接口,重写所有的方法;
- 实现GenericServlet接口,重写service()方法;
- 实现HttpServlet接口,重写doGet()和doPost()方法。
三个接口之间的关系:GenericServlet继承了Servlet,HttpServlet继承了GenericServlet。
最简单的Servlet创建方法:
实现HttpServlet接口,重写doGet()和doPost()方法
Public class Servlet-01 extends HttpServlet{
@Override
public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{
//使用PrintWriter.write()方法向前台页面输出内容
resp.setContentType("text/html;charset=UTF-8");
PrintWriter writer = resp.getWriter();
writer.write("真正的大师,永远怀着一颗学徒的心!!!")
}
@Override
public void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{
do.Get(req,resp);
}
}
4、Servlet容器
Servlet容器,又可以称为Web容器,它是Web服务器的一个组件,使用Java来动态生成网页。Servlet容器是Web服务器和servlet进行交互的必不可少的组件。
什么是Web服务器
Web服务器是一种对外提供Web服务的软件,它可以接收浏览器的HTTP请求,并将处理结果返回给浏览器。最简单的一种情况是,用户在浏览器(客户端,client)中输入一个URL(如www.baidu.com),然后就能获取网页进行阅览。
Web服务器存在的缺陷
我们通常所说的Web服务器,如Apache、Nginx、IIS等,它们的功能比较单一,只能提供http(s)服务,让用户访问静态资源(HTML文档、图片、CSS文件、JavaScript文件等),它们不能执行任何编程语言,也不能访问数据库,更不能让用户注册和登录。
只有Web服务器,那我们只能部署静态网站,不能部署动态网站。要想部署动态网站,必须要有编程语言运行环境和数据库管理系统的支持。
Servlet容器(或Web容器)
Servlet容器就是Servlet代码的运行环境。Servlet容器负责:
- 实现Servlet规范定义的各种接口和类,为Servlet的运行提供底层支持
- 实例化Servlet类
- 调用Servlet类的方法
- 销毁Servlet类
在部署动态网站时,我们自己编写的Servlet类是没有mian()函数的,它们不能独立运行。Servlet容器就是用来装Servlet类的一个集合,容器可以实例化Servlet类,并调用它们的方法。
一个动态页面对应一个Servlet类,开发一个动态页面就是编写一个Servlet类,当用户请求到达时,Servlet容器会根据配置文件(web.xml)来决定调用哪个类。我们根据下图来加深理解:
程序运行的逻辑如下:
- 当用户想访问网页1时,用户点击URL,Web浏览器发送HTTP请求给Web服务器;
- Web服务器确定请求的资源是动态资源,于是将请求传给Servlet容器;
- Servlet容器解析请求,实例化Servlet类-01,并调用它的方法来访问数据库,生成网页1;
- Servlet容器将网页1提交给Web服务器,Web服务器作出响应返回给浏览器;
- 浏览器对Web服务器发送过来的数据进行渲染处理,形成了用户所能看到的网页1;
为了简化部署流程,Web容器往往也会自带Web服务器模块,提供基本的HTTP服务,因此我们不再需要安装Apache等传统意义上的服务器,只需要安装一款服务器即可。如Tomcat就是Servlet容器+简化的HTTP服务功能模块,因此,有些教材称Tomcat为服务器,也有些称为Web容器。
下图是Tomcat服务器的示例图,服务器包括Web服务器功能模块和Servlet容器。
小结:
Servlet容器就是Servlet程序的运行环境,它主要包含以下几个功能:
- 实现Servlet规范定义的各种接口和类;
- 管理我们编写的Servlet类;
- 提供HTTP服务,相当于一个简化的服务器。