Servet的基础学习

Servet的基础学习

servet的简单介绍

  • Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
  • 使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。servet是接口和实现类。
  • Servlet 创有三种方式,1.实现 Servlet 接口,2.继承 GenericServlet 类,3.继承 HttpServlet 方法,我们先简单介绍了解1,3两种方式。

实现 Servlet 接口

  1-void init(ServletConfig config)初始化配置(初始化)
  2-ServletConfig getServletConfig()获得配置信息//用户自己设置
  3-String getServletInfo()获取Servlet文本化信息//用户自己设置
  4-void service(ServletRquest request,ServletResponse response) 负责处理请求,给出响应(核心方法)(服务)
  5-void destroy()回收资源(销毁)
  • servlet的生命周期 :从servlet创建到销毁的过程,一次创建,到处服务,一个servlet只会有一个对象,服务所有请求。我们可以看到以下代码,其中贯穿了servlet整个生命周期有哪一些方法。

  public class ServletDemo1 implements Servlet {
   
      //public ServletDemo1(){}
   
       //生命周期方法:当Servlet第一次被创建对象时执行该方法,该方法在整个生命周期中只执行一次
      public void init(ServletConfig arg0) throws ServletException {
                  System.out.println("=======init=========");
          }
   
      //生命周期方法:对客户端响应的方法,该方法会被执行多次,每次请求该servlet都会执行该方法
      public void service(ServletRequest arg0, ServletResponse arg1)
              throws ServletException, IOException {
          System.out.println("hehe");
   
      }
   
      //生命周期方法:当Servlet被销毁时执行该方法
      public void destroy() {
          System.out.println("******destroy**********");
      }
  //当停止tomcat时也就销毁的servlet。
   
      public ServletConfig getServletConfig() {
   
          return null;
      }
   
      public String getServletInfo() {
   
          return null;
      }
  }

这里我们着重介绍三个方法

  • init() 方法

  • init() 方法是在创建 Servlet 对象时被调用,而且只能被调用一次,用于 Servlet 对象在整个生命周期内的唯一一次初始化。只有在 init() 方法调用成功后,Servlet 才会处于服务状态,才能够去处理客户端的请求。

  • service() 方法

  • service() 方法是 Servlet 工作的核心方法。当客户端请求访问 Servlet 时,Servlet 容器就会调用 service() 方法去处理来自客户端的请求,并把处理后的响应返回给客户端。

  • destroy() 方法

  • destory() 方法是 Servlet 容器回收 Servlet 对象之前调用的,且只会调用一次,而此时的服务器处于停止状态或者访问资源已经被移除。

  • Servlet 的生命周期,大概流程可以用下图来诠释

  • 图描述了 Servlet 的完整生命周期,按照功能的不同,大致可以将 Servlet 的生命周期分为三个阶段,分别是初始化阶段、运行阶段和销毁阶段。

  • 初始化阶段

  • 当用户第一次向 Servlet 容器发出 HTTP 请求要求访问某个 Servlet 时,Servlet 容器会在整个容器中搜索该 Servlet 对象,发现这个 Servlet 对象没有被实例化,于是创建这个 Servlet 对象,然后调用该对象的 init() 方法完成初始化。

  • 当用户第二次访问这个 Servlet 时,Servlet 容器仍然在容器中搜索该 Servlet 对象,结果找到了该对象的实例,则不去创建而直接使用该对象。

  • 找到了对应的 Servlet 对象,随后 Servlet 进入到运行阶段。

  • 需要注意的是,在 Servlet 的整个生命周期内,它的 init() 方法只被调用一次。

  • 运行阶段

  • 这是 Servlet 生命周期中最核心的阶段。在该阶段中,Servlet 容器会为当前的请求创建一个 ServletRequest 对象和一个 ServletResponse 对象(它们分别代表 HTTP 请求和 HTTP 响应),并将这两个对象作为参数传递给 Servlet 的 service() 方法。

  • service() 方法从 ServletRequest 对象中获得用户的详细请求信息并处理该请求,通过 ServletResponse 对象生成响应结果。

  • 需要强调的是,在 Servlet 的整个生命周期内,用户每次请求访问 Servlet 时,Servlet 容器都会调用一次 Servlet 的 service() 方法,并且创建新的 ServletRequest 和 ServletResponse 对象。

  • 销毁阶段

  • 当服务器停止时,Servlet 容器需要回收 Servlet 对象所占用的内存,在回收之前,会自动调用该对象的 destroy() 方法做好回收内存前的准备,辟如关闭后台线程。

  • 和 init() 方法类似,destroy() 方法也只会被调用一次。

  • 注意:Servlet 对象一旦创建就会驻留在内存中一直等待客户端的访问,直到服务器关闭或项目被移除出容器时,Servlet 对象才会被销毁。

继承 HttpServlet 方法

  • servlet通常通过HTTP接受和响应来自Web客户端的请求。要实现此接口编写一个扩展javax.servlet.GenericServlet的一般servlet,或者编写一个扩展javax.servlet.http.HttpServlet的HTTPservlet,来实现servlet程序。通过HttpServlet的两个核心方法,doGet(HttpServletRequest request, HttpServletResponse response)和doPost(HttpServletRequest request, HttpServletResponse response)来完成输出。

  package com.sxh;
   
  import java.io.IOException;
  import java.io.PrintWriter;
   
  import javax.servlet.ServletException;
  import javax.servlet.http.HttpServlet;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
   
  public class ServletDemo03 extends HttpServlet {
   
  	@Override
  	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  		this.doPost(req, resp);
  	}
   
  	@Override
  	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  		
  response.setContentType("text/html;charset=UTF-8");//控制格式输出
  		PrintWriter out = resp.getWriter();
  		out.println("Hello,world--Browse");
  		System.out.println("Hello,world--console");
  	}
  }
相关推荐
DK七七1 分钟前
多端校园圈子论坛小程序,多个学校同时代理,校园小程序分展示后台管理源码
开发语言·前端·微信小程序·小程序·php
苹果酱05675 分钟前
C语言 char 字符串 - C语言零基础入门教程
java·开发语言·spring boot·mysql·中间件
csucoderlee12 分钟前
eclipse mat leak suspects report和 component report的区别
java·ide·eclipse
代码小鑫21 分钟前
A032-基于Spring Boot的健康医院门诊在线挂号系统
java·开发语言·spring boot·后端·spring·毕业设计
训山29 分钟前
4000字浅谈Java网络编程
java·开发语言·网络
API快乐传递者30 分钟前
除了网页标题,还能用爬虫抓取哪些信息?
开发语言·爬虫·python
VertexGeek35 分钟前
Rust学习(四):作用域、所有权和生命周期:
java·学习·rust
喔喔咿哈哈1 小时前
【手撕 Spring】 -- Bean 的创建以及获取
java·后端·spring·面试·开源·github
码农小丘1 小时前
了解springboot国际化用途以及使用
java·spring boot·spring
卡皮巴拉吖1 小时前
【JavaEE初阶】多线程上部
java·jvm·java-ee