动态网站开发04:Servlet基础

一、前言

  • Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。

二、Servlet基础

(一)、Servlet概述

1、Servlet是什么

  • Servlet是运行在Web服务器端的Java应用程序,它使用Java语言编写。与Java程序的区别是,Servlet 对象主要封装了对HTTP请求的处理,并且它的运行需要Servlet容器的支持。在Java Web应用方面,Servlet 的应用占有十分重要的地位,它在Web请求的处理功能方面也非常强大

2、Servlet容器

  • Servlet由Servlet容器提供,Servlet容器是指提供了Servlet 功能的服务器(本讲稿指Tomcat)。Servlet容器将Servlet动态地加载到服务器上。与HTTP 协议相关的Servlet使用HTTP请求和HTTP响应与客户端进行交互。因此,Servlet容器支持所有HTTP协议的请求和响应。

3、Servlet应用程序的体系结构

  • Servlet的请求首先会被HTTP服务器(如Apache)接收,HTTP服务器只负责静态HTML页面的解析,对于Servlet的请求转交给Servlet容器,Servlet容器会根据web.xml文件中的映射关系,调用相应的Servlet,Servlet将处理的结果返回给Servlet容器,并通过HTTP服务器将响应传输给客户端。

(二)、Servlet的特点

  • Servlet使用Java语言编写,它不仅具有Java 语言的优点,而且还对Web的相关应用进行了封装,同时Servlet容器还提供了对应用的相关扩展,无论是在功能、性能、安全等方面都十分优秀。

1、功能强大

  • Servlet采用Java语言编写,它可以调用Java API中的对象及方法,此外,Servlet对象对Web应用进行了封装,提供了Servlet对Web应用的编程接口,还可以对HTTP请求进行相应的处理,如处理提交数据、会话跟踪、读取和设置HTTP头信息等。由于Servlet既拥有Java 提供的API,而且还可以调用Servlet封装的Servlet API编程接口,所以,它在业务功能方面十分强大。

2、可移植

  • Java语言是跨越平台的,所谓跨越平台是指程序的运行不依赖于操作系统平台,它可以运行到多个系统平台中,如目前常用的操作系统Windows、Linux和UNIX等。

3、性能高效

  • Servlet对象在Servlet容器启动时被初始化,当Servlet对象第一次被请求时,Servlet 容器将Servlet对象实例化,此时Servlet对象驻存于内存中。如果存在多个请求,Servlet 不会再被实例化,仍然由第一次被实例化的Servlet对象处理其他请求。每一个请求是一个线程,而不是一个进程。

4、安全性高

  • Servlet使用了Java的安全框架,同时Servlet容器还可以为Servlet提供额外的安全功能,它的安全性是非常高的。

5、可扩展

  • Java语言是面向对象的编程语言, Servlet由Java语言编写,所以它具有面向对象的优点。在业务逻辑处理中,可以通过封装、继承等特性扩展实际的业务需要。

(三)Servlet接口

1、Servlet接口

  • 针对Servlet技术的开发,SUN公司提供了一系列接口和类,其中最重要的是javax.servlet.Servlet接口。Servlet就是一种实现了Servlet接口的类,它由Web容器负责创建并调用,用于接收和响应用户的请求。

2、Servlet接口的方法

方法声明 功能描述
void init(ServletConfig config) Servlet实例化后,Servlet容器调用该方法完成初始化工作
ServletConfig getServletConfig() 用于获取Servlet对象的配置信息,返回Servlet的ServletConfig对象
String getServletInfo() 返回一个字符串,其中包含关于Servlet的信息,例如,作者、版本和版权等信息
void service(ServletRequest request,ServletResponse response) 负责响应用户的请求,当容器接收到客户端访问Servlet对象的请求时,就会调用此方法。容器会构造一个表示客户端请求信息的ServletRequest对象和一个用于响应客户端的ServletResponse对象作为参数传递给service()方法。在service()方法中,可以通过ServletRequest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调用ServletResponse对象的方法设置响应信息
void destroy() 负责释放Servlet对象占用的资源。当服务器关闭或者Servlet对象被移除时,Servlet对象会被销毁,容器会调用此方法

3、Servlet接口中生命周期的方法

  • 在Servlet接口中的5个方法中,其中init()、service()和destroy()这三个方法可以表现Servlet的生命周期,它们会在某个特定的时刻被调用。需要注意的是,Servlet容器指的就是Web服务器。

4、Servlet接口的实现类

  • 针对Servlet接口,SUN公司提供了两个默认的接口实现类:GenericServlet和HttpServlet。GenericServlet是一个抽象类,该类为Servlet接口提供了部分实现,它并没有实现HTTP请求处理。HttpServlet是GenericServlet的子类,它继承了GenericServlet的所有方法,并且为HTTP请求中的POST、GET等类型提供了具体的操作方法。

5、HttpServlet类的常用方法及功能

方法声明 功能描述
protected void doGet(HttpServletRequest req, HttpServletResponse resp) 用于处理GET类型的Http请求的方法
protected void doPost(HttpServletRequest req, HttpServletResponse resp) 用于处理POST类型的Http请求的方法
protected void doPut(HttpServletRequest req, HttpServletResponse resp) 用于处理PUT类型的Http请求的方法

三、Servlet开发入门

(一)使用IDEA完成Servlet的开发

  • 在实际开发中,通常都会使用IDEA(或Eclipse等)工具完成Servlet的开发,我们使用IDEA完成Servlet的开发,因为IDEA不仅会自动编译Servlet,还会自动创建web.xml文件信息,完成Servlet虚拟路径的映射。

(二)Servlet的配置

  • 若想让Servlet正确地运行在服务器中并处理请求信息,必须进行适当的配置,关于Servlet的配置主要有两种方式,分别是通过Web应用的配置文件web.xml来完成配置和使用@WebServlet注解的方式完成。

1、使用web.xml配置Servlet

  • 在web.xml文件中,通过标签进行注册,在标签下包含若干个子元素。
属性名 类型 描述
<servlet-name> String 指定该Servlet的名称,一般与Servlet类名相同,要求唯一
<servlet-class> String 指定该Servlet类的位置,包括包名与类名
<description> String 指定该Servlet的描述信息
<display-name> String 指定该Servlet的显示名
  • 把Servlet映射到URL地址,使用标签进行映射,使用子标签指定要映射的Servlet名称,名称要和之前在标签下注册的相同;使用子标签映射URL地址,地址前必须加“/”,否则访问不到。

在这里插入图片描述

  • 在部署描述文件web.xml里注册了Servlet,那么就可以注释掉InfoServlet类上的注解
    在这里插入图片描述

  • 重启tomcat服务器,访问http://localhost:8080/ShowInfo/info

在这里插入图片描述

2、@WebServlet注解属性

  • @WebServlet 注解用于代替web.xml文件中的等标签,该注解将会在项目部署时被容器处理,容器将根据具体的属性配置将相应的类部署为Servlet。为此,@WebServlet注解提供了一些属性。
属性声明 功能描述
String name 指定Servlet的name属性,等价于。如果没有显式指定,则该
Servlet的取值即为类的全限定名。
String[] value 该属性等价于urlPatterns属性。urlPatterns和value属性不能同时使用。
String[] urlPatterns 指定一组Servlet的URL匹配模式。等价于标签。
int loadOnStartup 指定Servlet的加载顺序,等价于标签。
WebInitParam[] 指定一组Servlet初始化参数,等价于标签。
boolean asyncSupported 声明Servlet是否支持异步操作模式,等价于 标签。
String description Servlet的描述信息,等价于标签。
String displayName ervlet的显示名,通常配合工具使用,等价于 标签。
  • 过两天再写

四、

(一)

1、

(二)

1、

(三)

1、

(四)

1、

五、