JavaWeb学习笔记(一)——Servlet简介

JavaWeb学习笔记(一)——Servlet简介

一、什么是Servlet

来自百度百科:

Servlet(Server Applet)是java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态web内容

狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

  • 是运行在 Web 服务器(目前最主流的三个Web服务器是Apache、 Nginx 、IIS)或应用服务器上的程序
  • 可以处理客户端请求和发送响应
  • 实现交互式的浏览和修改数据,生成动态Web内容
    JavaWeb学习笔记(一)——Servlet简介_第1张图片

二、Servlet容器(Web容器)

Servlet容器主要是JavaWeb应用提供运行时环境,所以也可以称之为JavaWeb应用容器,或者Servlet/JSP容器。 Servlet容器主要负责管理Servlet、JSP的生命周期以及它们的共享数据。 目前最流行的Servlet容器软件包括: Tomcat、Jetty、Jboss 等。

Tomcat 作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户。

JavaWeb学习笔记(一)——Servlet简介_第2张图片

三、Servlet的工作原理

1、Servlet接口定义了Servlet与servlet容器之间的契约。这个契约是:Servlet容器将Servlet类载入内存,并产生Servlet实例和调用它具体的方法。但是要注意的是,在一个应用程序中,每种Servlet类型只能有一个实例。

2、用户请求致使Servlet容器调用Servlet的Service()方法,并传入一个ServletRequest对象和一个ServletResponse对象。ServletRequest对象和ServletResponse对象都是由Servlet容器(例如TomCat)封装好的,并不需要程序员去实现,程序员可以直接使用这两个对象。

3、ServletRequest中封装了当前的Http请求,因此,开发人员不必解析和操作原始的Http数据。ServletResponse表示当前用户的Http响应,程序员只需直接操作ServletResponse对象就能把响应轻松的发回给用户。

4、对于每一个应用程序,Servlet容器还会创建一个ServletContext对象。这个对象中封装了上下文(应用程序)的环境详情。每个应用程序只有一个ServletContext。每个Servlet对象也都有一个封装Servlet配置的ServletConfig对象。

四、第一个Servlet程序

编写一个简单的Servlet类,通过浏览器访问该Servlet程序

第一步:创建web项目web-demo,导入Servlet依赖坐标

	
    <dependency>
      <groupId>javax.servletgroupId>
      <artifactId>javax.servlet-apiartifactId>
      <version>3.1.0version>
      <scope>providedscope>
    dependency>

第二步:定义一个类,实现Servlet接口,并重写接口中所有方法

package com.example.web;

@WebServlet("/demo1")
public class ServletDemo1 implements Servlet {
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("Hello Servlet~");
    }

    public ServletConfig getServletConfig() {
        return null;
    }

    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

    }

    public String getServletInfo() {
        return null;
    }

    public void destroy() {

    }
}

第三步:在类上使用@WebServlet注解,配置该Servlet的访问路径

@WebServlet("/demo1")

第四步:启动Tomcat,浏览器中输入URL地址访问该Servlet

http://localhost:8080/web-demo/demo1

第五步:访问后,在控制台会打印Hello Servlet~ 此时servlet程序已经成功运行。

五、生命周期

Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:

  • Servlet 初始化后调用 init() 方法。
  • Servlet 调用 service() 方法来处理客户端的请求。
  • Servlet 销毁前调用 destroy() 方法。

Servlet生命周期四个过程

  • 实例化

    • 默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象
  • 初始化

    • 在Servlet实例化后,容器调用Servlet的 init() 方法初始化这个对象。
    • 该方法只会在Servlet第一次被访问时会被调用,且只会调用一次。
  • 处理请求

    • 每次请求Servlet时,容器都会调用 service() 处理请求。该方法可以被调用多次
  • 服务终止

    • 当需要释放内存或者容器关闭时,容器就会调用Servlet实例的 destroy() 方法完成资源的释放。该方法也只会被调用一次

    JavaWeb学习笔记(一)——Servlet简介_第3张图片

演示生命周期

package com.example.web;

@WebServlet("/demo2")
public class ServletDemo2 implements Servlet {
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init 初始化");
    }

    public ServletConfig getServletConfig() {
        return null;
    }

    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("service 被调用");
    }

    public String getServletInfo() {
        return null;
    }

    public void destroy() {
        System.out.println("destroy 销毁中");
    }
}

在浏览器中访问localhost:8080/web-demo/demo2,最后销毁该程序

JavaWeb学习笔记(一)——Servlet简介_第4张图片

六、Servlet方法介绍

Servlet中共有五个方法,分别是init()service()destory()getServletInfo()getServletConfig()

JavaWeb学习笔记(一)——Servlet简介_第5张图片

  • void init(ServletConfig var1)

初始化方法,在Servlet被创建时执行,只执行一次

  • ServletConfig getServletConfig()

返回由Servlet容器传给init( )方法的ServletConfig对象

  • void service(ServletRequest req, ServletResponse res)

提供服务方法, 每次Servlet被访问,都会调用该方法

  • String getServletInfo()

该方法用来返回Servlet的相关信息,没有什么太大的用处,一般我们返回一个空字符串即可

  • void destory()

销毁方法,当Servlet被销毁时,调用该方法。在内存释放或服务器关闭时销毁Servlet

七、体系结构

要想编写一个Servlet就必须要实现Servlet接口,重写接口中的五个方法。但在实际开发中,我们往往更关注的是service()方法。

体系结构

JavaWeb学习笔记(一)——Servlet简介_第6张图片

GenericServlet抽象类

该类是对于Servlet接口的简单实现:
由于直接实现Servlet接口需要实现5个方法,但是一般我们只关注service方法,为了减少不必要的实现,使用GenericServlet对其进行简单实现。继承GenericServlet的类只需要重写需要用到的方法即可。

HttpServlet抽象类

HttpServlet抽象类是继承于GenericServlet抽象类而来的,这个类的功能主要是实现service方法的各种细节和设计。它提供了http特定的方法,如:doGetdoPostdoHeaddoTrace等。我们将来开发的web项目,都是针对HTTP协议,所以我们自定义Servlet,会通过继承HttpServlet

简单实现doGet、doPost

package com.example.web;

@WebServlet("/demo3")
public class ServletDemo3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doGet ...");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doPost");
    }
}
  • 要想发送一个GET请求,请求该Servlet,只需要通过浏览器发送http://localhost:8080/web-demo/demo3,就能看到doGet方法被执行
  • 要想发送一个POST请求,请求该Servlet,单单通过浏览器是无法实现的,这个时候就需要编写一个form表单来发送请求,在webapp下创建一个a.html页面,内容如下:
DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
head>
<body>
    <form action="/web-demo/demo4" method="post">
        <input name="username"/><input type="submit"/>
    form>
body>
html>
  • 访问http://localhost:8080/web-demo/a.html,随便向表单输入个值,并提交。就能看到doPost被访问。

八、urlPattern

Servlet类编写好后,要想被访问到,就需要配置其访问路径(urlPattern)

一个Servlet,多个urlPattern

@WebServlet(urlPatterns = {"/demo4","/demo5"})

在浏览器中输入http://localhost:8080/webdemo/demo4,http://localhost:8080/web-demo/demo5这两个地址都能访问

urlPattern配置规则

  • 精确匹配
配置路径 :@WebServlet("/user/select")
访问路径 :localhost:8080/web-demo/user/select
  • 目录匹配
配置路径 :@WebServlet("/user/*")
访问路径 :http://localhost:8080/web-demo/user/任意
  • 扩展名匹配
配置路径 :@WebServlet(urlPatterns = "*.do")
访问路径 :http://localhost:8080/web-demo/任意.do
  • 任意匹配
配置路径 :@WebServlet(urlPatterns = "/")
配置路径 :@WebServlet(urlPatterns = "/*")
访问路径 :http://localhost:8080/demo-web/任意
  • 优先级

精确匹配 > 目录匹配> 扩展名匹配 > /* >/

九、XML配置

通过配置web.xml 访问路径

对于XML的配置步骤有两步:

第一步:编写Servlet类

public class ServletDemo4 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("web 配置");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    }
}

第二步:在web.xml中配置该Servlet


<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

        
        <servlet>
          
          <servlet-name>demo4servlet-name>
          
          <servlet-class>com.example.web.ServletDemo4servlet-class>
        servlet>

        
        <servlet-mapping>
          
          <servlet-name>demo4servlet-name>
          
          <url-pattern>/demo4url-pattern>
        servlet-mapping>
web-app>

十、总结

参考博客:

一、Java Web(一) Servlet详解!! - 有梦想的老王 - 博客园 (cnblogs.com)

二、黑马程序员最新版JavaWeb基础教程,Java web从入门到企业实战完整版_哔哩哔哩_bilibili

结语:
此篇文章为个人学习笔记,如有错误地方,欢迎大佬指出!!!

你可能感兴趣的:(JavaWeb,servlet,学习,java)