JavaWeb基础 -- Servlet

JavaWeb基础 -- Servlet

1.Servlet简介

1.1 Servlet是什么

Servlet本身是用Java编写的,运行在Web服务器上的应用程序,并作为Web浏览器和其他HTTP客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。Servlet可以收集来自网页表单输入的数据,并展示来自数据库或其他来源的数据。通常情况下,Servlet用于扩展HTTP协议的Web服务器。

2.Servlet运行机制

2.1 Servlet工作内容

  • 注册一个类:在Tomcat收到某个特定的HTTP请求时执行这个类中的一些功能。
  • 解析HTTP请求:把HTTP字符串解析为Request对象。
  • 构造HTTP相应:给指定Response对象填写相应字段,Servlet会根据该对象构造一个HTTP响应字符串,并通过Socket返回至客户端。

2.2 Servlet结构

2.3 工作原理

  • Servlet接口定义了Servlet与Servlet容器之间的规则。即Servlet容器将Servlet类载入内存,并产生Servlet实例以及调用的具体方法。需要注意的是一个应用程序中每种Servlet类型只能有一个实例
  • 用户请求时Servlet容器调用Servlet的Service()方法,并传入一个ServletRequest对象和一个ServletResponse对象。这两个对象均由Servlet容器封装好的。
  • ServletRequest中封装了当前的Http请求,因此,开发人员不必解析和操作原始的Http数据。ServletResponse表示当前用户的Http响应,程序员只需直接操作ServletResponse对象就能把响应轻松的发回给用户。
  • 对于每一个应用程序,Servlet容器还会创建一个ServletContext对象。这个对象中封装了上下文(应用程序)的环境详情。每个应用程序只有一个ServletContext。每个Servlet对象也都有一个封装Servlet配置的ServletConfig对象。

2.4 生命周期

对象的生命周期是从创建到销毁的整个过程,在Servlet容器中大致可以分为以下四个阶段:

  • 加载和实例化:当Servlet第一次被访问时,容器将会创建Servlet对象。有时创建 Servlet 是比较耗时的,那么第一次访问就比较耗费时间,用户体验比较差。Servlet 提供了解决这个问题的方法,通过具体的配置可以实现在服务器启动的时间来创建 Servlet 对象,提高了访问速度。
  • 初始化:Servlet实例化后,容器就会调用init()方法初始化这个对象,并完成配置文件的加载,创建链接等初始化工作。
  • 请求处理:每一次请求Servlet时,容器都会调用Service()方法对请求进行处理。
  • 服务终止:当需要释放内存或者是容器关闭时,容器都会调用 Servlet 的 destroy() 方法完成资源的释放,在 destroy() 方法调用之后,容器会释放实例化对象,随后被 Java 垃圾回收机制处理,该方法只会被调用一次。注意,此时的服务器关闭指的是正常关闭非强制关闭。

3.实例

3.1 简介

通过一个实际的创建流程了解Servlet是什么,怎么用。

3.2 实现过程

3.2.1 创建项目

这里使用Maven项目管理工具实现,首先导入Servlet依赖坐标

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

3.2.2 实现接口

定义一个类并实现Servlet接口,并重写所有方法

public class ServletDemo implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("Hello");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

3.2.3 配置路径

通过@WebServlet 注解,配置其访问路径。

@WebServlet("/index")
public class ServletDemo implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("Hello");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

3.2.4 启动服务器

启动服务器后即可在浏览器中查看当前配置完毕网页的内容。

相关推荐
weixin_53759045几秒前
《Java编程入门官方教程》第八章练习答案
java·开发语言·servlet
CodeClimb26 分钟前
【华为OD-E卷-最左侧冗余覆盖子串 100分(python、java、c++、js、c)】
java·python·华为od
Q_19284999061 小时前
基于Spring Boot的大学就业信息管理系统
java·spring boot·后端
xmh-sxh-13141 小时前
常用数据库类型介绍
java
single5941 小时前
【c++笔试强训】(第四十一篇)
java·c++·算法·深度优先·图论·牛客
1 9 J1 小时前
Java 上机实践11(组件及事件处理)
java·开发语言·学习·算法
爬菜1 小时前
java简单题目练习
java
bufanjun0011 小时前
JUC并发工具---ThreadLocal
java·jvm·面试·并发·并发基础
南宫生2 小时前
力扣-图论-70【算法学习day.70】
java·学习·算法·leetcode·图论
zfj3212 小时前
java日志框架:slf4j、jul(java.util.logging)、 log4j、 logback
java·log4j·logback·java日志框架·slf4j·jul