Servlet 简介和快速入门

Servlet 基本介绍



1. 基本概念

  Servlet 是由 server applet 两个单词拼接而成,指的是运行在服务器端的小程序,它本质上是一个接口,它定义了 Java 类被浏览器访问到(被tomcat识别到)的规则。使用时需要我们自定义一个类来实现 Servlet 接口,并复写其中的方法。

这里提供几个关于 Servlet 的学习资料或平台:



2. 快速入门

  我这里演示的开发环境是 IDEA_2019.2.3 和 Tomcat_9.0.26,关于 IDEA 配置 Tomcat 的方法,推荐一篇博文 IDEA 配置 Tomcat ,讲的相对详细。

  1. 创建 JavaWeb 项目(Web Application)。

  2. 定义一个类,实现 Servlet 接口,复写其中方法。

package servlet.demo1;

import javax.servlet.*;
import java.io.IOException;

public class ServletDemo implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
		System.out.println("项目启动了!");
	}
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("hello servlet!");
    }
    @Override
    public String getServletInfo() {
        return null;
    }
    @Override
    public void destroy() {
		System.out.println("项目关闭了!");
    }
}
  1. 在 web.xml 中配置 Servlet 的资源路径,后面会介绍注解配置,这里作为了解。
<!-- 在web.xml中配置 -->
<!--    配置servlet-->
    <servlet>
        <!-- 这里给模块命名,与后面的mapping相对应 -->
        <servlet-name>demo1</servlet-name>
        <!-- 这里写全类名 -->
        <servlet-class>com.base.servlet.ServletDemo1</servlet-class>
    </servlet>
	<!--配置路径-->
    <servlet-mapping>
        <!-- 这里的 name 属性与上面对应 -->
        <servlet-name>demo1</servlet-name>
        <!-- 这里是浏览器访问资源的 资源路径 -->
        <url-pattern>/demo1</url-pattern>
    </servlet-mapping>
  1. 配置 Tomcat 的虚拟路径

在这里插入图片描述
在这里插入图片描述

  1. 启动Tomcat,到浏览器访问链接:http://localhost:8080/Serv/demo1

在这里插入图片描述
在这里插入图片描述

  1. 查看看控制台输出

在这里插入图片描述



3. Servlet 执行原理

  1. 当服务器接收到客户端浏览器的请求后,会解析请求URL路径,获取访问 Servlet 的 资源路径
  2. 服务器根据获取到的 资源路径 去查找 web.xml 文件中的 <url-pattern> 标签是否有对应的 资源路径
  3. 如果有,则找到对应的 <servlet-class> 全类名。
  4. Tomcat 将对应类的字节码文件加载进内存,创建其对象,并调用 service() 方法。


4. Servlet 中的方法

方法名 描述
init() 初始化方法,在 Servlet 对象被创建时被调用,并且只会调用一次。
getServletConfig() 获取 ServletConfig 对象,这是 Servlet 的配置对象。
service() 提供服务方法,每次 Servlet 被访问时,都会被调用。
getServletInfo() 获取 Servlet 的一些信息,如:版本、作者等信息。
destroy() 销毁方法,在服务器正常关闭时被调用,并且只会执行一次。

关于init()方法:

  • 默认情况下,Servlet 第一次被访问时才会去创建对象。
  • 通过配置可以改变 Servlet 对象的创建时机。具体操作如下:
<!-- 在<servlet>标签下配置 -->
<!-- 第一次被访问时创建对象,则设置值为任意的 负数 即可。 -->
<load-on-startup>-5</load-on-startup>
<!-- 在服务器启动时创建对象,则设置值为任意 正数 或 0 即可。-->
<load-on-startup>5</load-on-startup>
-->


5. Servlet 的生命周期

Servlet 中的 init()、service()、destroy() 三个方法可以代表 Servlet 的生命周期。

  • 被创建:调用 init() 方法,对象被创建后会调用一次。
  • 提供服务:执行service()方法,对象每次被访问都会执行。
  • 被销毁:执行destroy()方法,服务器正常关闭前会被调用一次。

注意:

  Servlet是单例的,多个用户同时访问时,可能存在安全问题,所以尽量不在 Servlet 中定义成员变量,可以定义常量用 final 修饰。



6. Servlet 的注解配置

  Servlet3.0 后的新特性,可以通过注解的方式配置 Servlet ,不用在 web.xml 中配置。

  配置方法:在类上使用@WebServlet("/资源路径")注解,如下所示:

//@WebServlet(urlPatterns = "/demo2")
//value属性可以省略属性名
@WebServlet("/demo2")
public class ServletDemo implements Servlet {
    //类方法......
}

注意:

  • urlPatterns 是 Servlet 的资源访问路径。
  • 一个 Servlet 可以有多个资源访问路径:@WebServlet({"/demo1","/demo2","/demo3"})。
  • 路径定义规则
    • /XXX —— 一层路径
    • /XXX/XXX —— 多层路径
    • *.后缀名 —— *代表任意字符,只要访问资源路径的后缀名是提前设定的字符,就可以访问成功。

7. IDEA 与 Tomcat 的相关细节

  1. IDEA 会为每一个Tomcat 部署的项目单独创建一份配置文件,存储路径会在启动或关闭项目时输出到控制台上,如下图所示。

在这里插入图片描述

  1. 工作空间项目 和 Tomcat部署的 web项目
    • 工作空间:项目文件夹
    • Tomcat部署的web项目:项目文件夹\out\artifacts\项目名\
    • Tomcat真正访问的是“Tomcat部署的web项目”
    • “Tomcat部署的web项目”对应着“工作空间项目”的web目录下的所有资源。
    • WEB-INFO目录下的资源不能被浏览器直接访问。


8. Servlet 的体系结构

名称 类型 描述
Servlet 接口 上面已经介绍过了。
GenericServlet 抽象类 继承Servlet,将Servlet接口中其他的方法做了默认空实现,只将Service做抽象。
HttpServlet 抽象类 继承GenericServlet,是对http协议的一种封装,简化操作。

注意:

  • 用的较多的是 HttpServlet 接口。
  • 其中具体的方法,这里不做介绍了,具体查看文章开头提供的 API 文档。
  • 实现 HTTPServlet 的类需要重写 doGet() 和 doPost() 方法。


2019年11月1日19:43:11


发布了79 篇原创文章 · 获赞 43 · 访问量 3万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章