Servlet简单介绍

Servlet简介

1.什么是Servlet

Servlet是Server和Applet的缩写,是服务端小程序的意思。使用Java语言编写的服务程序,可以生成动态的web页面,Servlet主要运行在服务器端,由服务器调用执行,是一种按照Servlet标准开发的类。

Servlet本质上也是java类,但要遵循Servlet规范进行编辑,没有main方法,它的创建、使用、销毁。都由Servlet容器进行管理(如Tomact服务器),写自己的类,不用写main方法,别人自动调用。,由服务器统一调用和执行。

Servlet和http协议紧密联系,servlet可以处理所有的http协议相关内容。

提供了Servlet功能的服务器,叫做Servlet容器,常见容器有Tomact,Jetty,Server等。

2.Servlet规范

想要创建的类具有Servlet的效果,我们就要实现Servlet规范,通过继承HttpServlet类来实现规范。这个类需要jar包支持,这个jar包就是放在Tomact里面的。将Tomact集成到项目里面就可以直接用了。如果没有集成Tomact要用的话,需要单独吧Servlet.api的jar包引进来。

3.重写Servlet方法

满足Servlet规范只是让我们的类能够满足接受请求的要求,接受请求后需要对请求进行分析,以及进行业务处理,计算出结果返回。在规范中有一个叫做service的方法,专门用做请求处理的操作,业务代码可以写在该方法中。

4.设置注解

注解就是标签,是为了说明特定请求对应的特定资源。

开发servlet项目,使用@WebServlet将一个继承于javax.http.HttpServlet的类定义为Servlet组件。

package com.study.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

/**
 * 实现Servlet
 * 1.创建普通java类
 * 2.实现servlet的规范,继承HttpServlet类,继承之后满足能够被访问。
 * 3.重写service方法,用来处理请求。
 * 4.设置一个注解,指定访问的路径
 */
//@WebServlet("/ser01")
    //@WebServlet(name = "servlet01",value = "/ser01")
    //@WebServlet(name = "servlet01",value = {"/ser01","/ser02"})
    @WebServlet(name = "Servlet001",urlPatterns = "/ser01")
public class Servlet01 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //打印内容在控制台
        System.out.println("hello Servlet");
        //通过流输出数据到浏览器
        resp.getWriter().write("Hello Servlet!");
    }
}

5.Servlet生命周期

Servlet没有main方法,所以不能独立运行,它的运行完全是由Servlet引擎来控制和调的,所谓生命周期指的是Servlet容器何时创建servlet实例,何时调用其方法进行请求的处理何时销毁它的实例的整个过程,在第一次访问时Servlet创建方法对象,第二次访问时则是对第一次访问产生对象的调用。

(1)实例和初始化时机

当请求到达容器时,容器查找servlet对象是否存在,如果不存在,则会创建实例并进行初始化。

(2)就绪、调用、服务阶段

有请求到达容器时,容器查找该servlet对象的service方法,处理请求的方法在整个生命周期中可以被多次调用,HttpServlet的service方法,会依据请求方式来调用doget或者doPost方法,但是,这两个do方法默认情况下会抛出异常,需要子类去override。

(3)销毁时机

当容器关闭时(应用程序停止时),会将程序中的Servlet实例化进行销毁。

在Servlet中有三个生命周期方法,不用用户手动调用,而是在特定的时机有容器自动调用,观察这三个方法就可以观察到Servlet的生命周期。

1.init方法,在servlet实例创建后执行(证明该Servlet有实例创建了)。

2.service方法,每次有请求到达某个Servlet方法执行时用来处理请求(证明该servlet进行服务)。

3.destory方法,Servlet实例销毁时执行(证明该Servlet的实例被销毁)。

package com.study.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
@WebServlet("/ser05")
public class Servlet05 extends HttpServlet {
    /**
     * 就绪或者是服务方法
     * 系统方法,服务器自动调用
     * 当有请求到达Servlet容器时,就会调用该方法。
     * 该方法可以被多次调用
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("servlet被调用了");
    }

    /**
     * 销毁方法
     * 系统方法,服务器自动调用
     * 当服务器关闭或者应用程序停止时调用该方法
     * 这个方法也只会执行一次
     */
    @Override
    public void destroy() {
        System.out.println("servlet被销毁了");
    }

    /**
     * 初始化方法
     * 系统方法发,服务器自动调用。
     * 当请求到达Servlet容器时,Servlet容器会判断该Servlet对象是否存在,如果不存在它才会调用,创建实例化对象
     * 方法只会执行一次
     * @throws ServletException
     */
    @Override
    public void init() throws ServletException {
        System.out.println("Servlet被创建了");
    }
}
  1. Web Client 向 Servlet 容器( Tomcat )发出 Http 请求Servlet 容器接收 Web Client 的请求
  2. Servlet 容器创建一个 HttpServletRequest 对象,将 Web Client 请求的信息封装到这个对象中
  3. Servlet 容器创建一个 HttpServletResponse 对象
  4. Servlet 容器调 HttpServlet 对象 service 方法,把 Request 与 Response 作为参数,传给 HttpServlet
  5. HttpServlet 调用 HttpServletRequest 对象的有关方法,获取 Http 请求信息
  6. HttpServlet 调用 HttpServletResponse 对象的有关方法,生成响应数据
  7. Servlet 容器把 HttpServlet 的响应结果传给 Web Client
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

外太空的莫扎特

在校生穷逼一个,呜呜呜

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值