Servlet的核心接口和类及创建Servlet的三种方式

目录

一、Servlet介绍

1 、什么是Servlet

2、Servlet的使用方法

3、 Servlet接口的继承结构

二、Servlet的核心接口和类

1、Servlet接口

2、GenericServlet抽象类 

3、HttpServlet类 

三、创建Servlet的三种方式

1、 实现Servlet接口的方式

2 、继承GenericServlet抽象类的方式

3、继承HttpServlet的方式

这三个创建方式选择哪个?


一、Servlet介绍

1 、什么是Servlet

Servlet是Server Applet的简称,是用Java编写的是运行在 Web 服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。使用 Servlet,可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。

2、Servlet的使用方法

Servlet技术的核心是Servlet接口,定义了Servlet与Servlet容器之间的契约,Servlet容器将Servlet类载入内存,生成Servlet实例并调用它具体的方法,所以它是所有Servlet类必须直接或者间接实现的一个接口。

3、 Servlet接口的继承结构

  • Servlet接口:只负责定义Servlet程序的访问规范;

  • GenericServlet抽象类:实现了Servlet接口,做了很多空实现,并持有一个ServletConfig类的引用,并提供了一些ServletConfig的使用方法;

  • HttpServlet抽象类:实现了service方法,并实现了请求分发处理;

Servlet的核心接口和类及创建Servlet的三种方式_第1张图片

二、Servlet的核心接口和类

1、Servlet接口

在Servlet API中最重要的是Servlet接口,所有Servlet都会直接或间接的与该接口发生联系,或是直接实现该接口,或间接继承自实现了该接口的类。该接口中包括以下5个方法:

  • void service(ServletRequest arg0, ServletResponse arg1)

负责响应用户的请求,当容器接收到客户端访问Servlet对象的请求时就会调用此方法。

容器会构造一个表示客户端请求信息的ServletRequest对象和一个用于响应客户端的ServletResponse对象作为参数传递给service()方法,在service()方法中可以通过ServletRequest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调用ServletResponse

  • void init(ServletConfig arg0)

Servlet实例化后,Servlet容器调用该方法完成Servlet的初始化工作

  • ServletConfig getServletConfig()

获取Servlet对象的配置信息

  • String getServletInfo()

返回包含Servlet对象的配置信息

  • destroy()

负责释放Servlet对象占用的资源,当服务器关闭或者Servlet对象被移除时会销毁Servlet对象,此时会调用此方法

2、GenericServlet抽象类 

GenericServlet抽象类使编写Servlet变得更容易。它提生命周期方法init和destroy的简单实现,要编写一般的Servlet,只需要重写service方法即可。  

3、HttpServlet类 

HttpServlet是在继承GenericServlet的基础上进一步的扩展。提供将要被子类化以创建适用于Web站点的HTTP servlet的抽象类

HTTPServlet的子类至少必须重写一个方法,该方法通常是:

  • doGet():用于HTTP GET请求
  • doPost():用于HTTP POST请求
  • doPut():用于HTTP PUT请求
  • doDelete():用于HTTP DELETE请求

三、创建Servlet的三种方式

1、 实现Servlet接口的方式

   }

    @Override
    public String getServletInfo() {
        //获取Servlet的详细信息
        //没有执行
        System.out.println("getServletInfo方法执行");
        return null;
    }

    @Override
    public void destroy() {
        //当tomcat关闭的时候,执行销毁这个servlet的方法
        System.out.println("destroy方法执行");
        //只有当tomcat关闭的时候,才会执行这个方法
        
    }
}

2 、继承GenericServlet抽象类的方式

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
/*
* 第二种方式:继承GenericServlet
*
* */
@WebServlet("/test2")
public class Servlet2 extends GenericServlet {
    //只有一个方法是必须重写的,抽象方法
    //为什么?service是核心方法,因为请求和响应就是执行这个方法
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        //解决中文乱码问题
        servletResponse.setContentType("text/html;charset=utf-8");
        servletResponse.getWriter().append("我是第二种创建Servlet的方法");

    }
}

3、继承HttpServlet的方式

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/test3")
public class Servlet3 extends HttpServlet {
    //因为在前端的时候,有两种请求方式get和post
    //doGet和doPost方法写在了Service方法中了
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        resp.getWriter().println("我是HttpServlet创建的Servlet");
    }
}

这三个创建方式选择哪个?

最好的方式是继承HttpServlet

1.可以减少对其他方法的要求 init destroy

2.可以根据前端的要求进行分门别类 doGet doPost

你可能感兴趣的:(servlet)