Java Web 入门笔记(四)——Servlet详解-01

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内容。**这个过程为:

  1. 客户端发送请求至服务器端;
  2. 服务器将请求信息发送至Servlet;
  3. Servlet生成相应内容并将其传给服务器,响应内容动态生成,通常取决于客户端的请求;
  4. 服务器将响应返回给客户端。

在这里插入图片描述

一个Servlet就是Java编程语言中的一个类,它被用来扩展服务器的性能,服务器上驻留着可以通过“请求–响应”编程模型来访问的应用程序。

Servlet任务:Servlet具体做了什么?

Servlet执行以下主要任务:

  • 读取客户端(浏览器)发送的显示的数据。这包括网页上的HTML表单,或者也可以是来自applet或自定义的HTTP客户端程序的表单。
  • 读取客户端(浏览器)发送的隐式的HTTP请求数据。这包括cookies、媒体类型和浏览器能理解的压缩格式等等。
  • 处理数据并生成结果。这个过程可能需要访问数据库,执行RMICORBA调用,调用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类有以下三种方式:

  1. 实现javax.servlet.Servlet接口,重写所有的方法;
  2. 实现GenericServlet接口,重写service()方法;
  3. 实现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. 当用户想访问网页1时,用户点击URL,Web浏览器发送HTTP请求给Web服务器;
  2. Web服务器确定请求的资源是动态资源,于是将请求传给Servlet容器;
  3. Servlet容器解析请求,实例化Servlet类-01,并调用它的方法来访问数据库,生成网页1;
  4. Servlet容器将网页1提交给Web服务器,Web服务器作出响应返回给浏览器;
  5. 浏览器对Web服务器发送过来的数据进行渲染处理,形成了用户所能看到的网页1;

为了简化部署流程,Web容器往往也会自带Web服务器模块,提供基本的HTTP服务,因此我们不再需要安装Apache等传统意义上的服务器,只需要安装一款服务器即可。如Tomcat就是Servlet容器+简化的HTTP服务功能模块,因此,有些教材称Tomcat为服务器,也有些称为Web容器。

下图是Tomcat服务器的示例图,服务器包括Web服务器功能模块和Servlet容器。

在这里插入图片描述

小结:

Servlet容器就是Servlet程序的运行环境,它主要包含以下几个功能:

  • 实现Servlet规范定义的各种接口和类;
  • 管理我们编写的Servlet类;
  • 提供HTTP服务,相当于一个简化的服务器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值