Servlet快速入门笔记

一、基本概念

概念
Servlet(server applet):运行在服务器端的小程序,简单说就是实现让用户通过浏览器可以访问到java类方法,让服务器(比如TomCat)识别运行java类的一种技术
快速入门https://blog.csdn.net/grd_java/article/details/104939956
如果你没有接触过servlet,请先访问上面的链接,跟着流程走一遍,本文章主要记录重点,以下会讲快速入门为什么要内样做,而不会手把手走流程
创建一个java EE项目
定义一个类,实现Servlet接口
实现接口中的抽象方法
配置Servlet
部署到TomCat,浏览器请求url运行

1、首先创建一个web项目,不会的请参考上面快速入门链接
2、使用maven引入相关依赖
3、创建一个类,继承Servlet接口
在这里插入图片描述
4、配置web.xml文件,配置servlet
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?><!-- 这是xml文档的文档声明 -->

<!--
  - 这是XML Schema格式约束文件,此文件将约束用户编写xml文档的规则
  -->
<web-app version="2.4"
         xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

  <!--
    - 映射一个servlet,简单的说,就是
    - 如果我们把每一个servlet当成一个小程序,那么这一系列功能的实现代码(类)就抽象成一个小程序
    - 我们需要在这里配置,让某些使用者(服务器,浏览器)知道,哪些是servlet,哪些是普通的用户访问不到的类,而
    - servlet类(并且要配置到这里),就可以被用户通过url路径访问到


    - 那么一个完整的程序,servlet一定不止一个,那么就需要先区分不同的servlet,所有下面<servlet>标签主要用于
      - 指定一个servlet类,配置到当前的配置文件里,让使用者能够知道这个类是一个servlet。下面<servlet-class>com.yzpnb.servlet.Dome1</servlet-class>完成此功能
      - 为这个servlet起一个唯一名字,用于区分不同servlet。下面<servlet-name>demo1</servlet-name>完成此功能,起名为demo1
   -->
  <servlet>
    <servlet-name>demo1</servlet-name>
    <servlet-class>com.yzpnb.servlet.Dome1</servlet-class>
  </servlet>

  <!--
    - 上面已经指定了一个类为servlet类,并为它起了一个唯一姓名
    - 那么现在我们就可以通过这个唯一的姓名来对它进行额外配置

    - 我们说过,servlet是通过浏览器访问url路径访问得到的,那么我们就需要给servlet指定一个url映射
    - 指定映射后,当用户按规则访问指定路径后,即可请求到相应servlet中执行功能

      - 首先<servlet-mapping>用来配置servlet映射
      - 其后,指定为哪个servlet(通过唯一名字来指定)配置映射<servlet-name>demo1</servlet-name>
      - 最后,为其配置url映射路径<url-pattern>/demo1</url-pattern>
  -->
  <servlet-mapping>
    <servlet-name>demo1</servlet-name>
    <url-pattern>/demo1</url-pattern>
  </servlet-mapping>
</web-app>

5、创建一个jsp页面当做入口
在这里插入图片描述
6、配置TomCat访问项目(和快速入门中一样,参考快速入门标题"将web项目发布到tomcat服务器")
在这里插入图片描述在这里插入图片描述在这里插入图片描述

执行原理
这里我说最后直接执行service方法,其实并不是这么回事,你暂时可以理解是执行service方法

在这里插入图片描述

二、servlet的生命周期

生命周期方法
下面阐述的都是默认情况下,生命周期的执行时机可以通过配置更改

在这里插入图片描述

package com.yzpnb.servlet;

import javax.servlet.*;
import java.io.IOException;

/**
 * servlet快速入门
 */
public class Dome1 implements Servlet {
    /**
     * 初始化方法,在servlet被创建的时候执行。只会执行一次
     * @param servletConfig
     * @throws ServletException
     */
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init.............");
    }

    /**
     * 获取servlet的配置对象(与生命周期无关)
     * @return
     */
    public ServletConfig getServletConfig() {
        return null;
    }

    /**
     * 提供服务的方法
     * 每一次servlet被访问时执行
     */
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("service..........");
    }

    /**
     * 获取servlet的信息(与生命周期无关)
     * @return
     */
    public String getServletInfo() {
        return null;
    }

    /**
     * 销毁方法
     * 在servlet被销毁时执行(服务器正常关闭时)
     */
    public void destroy() {
        System.out.println("destroy..............");
    }
}

在这里插入图片描述

servlet生命周期相关配置

修改servlet创建时机,在< servlet >标签下配置即可

<servlet>
  <servlet-name>demo1</servlet-name>
  <servlet-class>com.yzpnb.servlet.Dome1</servlet-class>
  <!--
    - <load-on-startup>标签用于指定servlet创建时机(默认是-1)
    - 如果标签内容是负数,会在servlet第一次访问时创建
    - 如果标签内容是0或正整数,会在服务器启动时创建
  -->
  <load-on-startup>5</load-on-startup>
</servlet>

在这里插入图片描述

三、servlet3.0基于注解配置

为什么使用注解配置
如果我们有成百上千个servlet,全部配置到web.xml中,会十分混乱,所以官方在3.0标准中支持了注解配置
有了注解配置,就可以不需要web.xml了
简单使用注解实现servlet映射

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

小细节
注解写法的简化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

四、servlet体系结构

servlet接口有两个实现类
GenericServlet:抽象类,除了service外的方法都进行空实现,也就是我们继承此类,只需要重写service方法(因为此实现类只抽象了service方法),其它方法选择性重写即可
HttpServlet:抽象类,对HTTP协议的一个封装和描述,将service封装成doGet和doPost方法,我们继承此类后只需要在需要的地方重写doGet和doPost方法即可

HttpServlet源码分析
在这里插入图片描述在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

殷丿grd_志鹏

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值