Chiriri's blog Chiriri's blog
首页
  • Java

    • JavaSE
    • JavaEE
    • 设计模式
  • Python

    • Python
    • Python模块
    • 机器学习
  • Golang

    • Golang
    • gRPC
  • 服务器

    • Linux
    • MySQL
    • NoSQL
    • Kubernetes
  • 项目

    • 传智健康
    • 畅购商城
  • Hadoop生态

    • Hadoop
    • Zookeeper
    • Hive
    • Flume
    • Kafka
    • Azkaban
    • Hbase
    • Scala
    • Spark
    • Flink
  • 大数据项目

    • 离线数仓
  • 青训营

    • 第四届青训营
  • HTML

    • HTML
    • JavaScript
  • Vue

    • Vue2
    • TypeScript
    • Vue3
    • Uni-APP
  • 数据结构与算法
  • C语言
  • 考研数据结构
  • 计算机组成原理
  • 计算机操作系统
  • Java基础

    • Java基础
    • Java集合
    • JUC
    • JVM
  • 框架

    • Spring
    • Dubbo
    • Spring Cloud
  • 数据库

    • MySQL
    • Redis
    • Elasticesearch
  • 消息队列

    • RabbitMQ
    • RocketMQ
  • 408

    • 计算机网络
    • 操作系统
    • 算法
  • 分类
  • 标签
  • 归档
  • 导航站
GitHub (opens new window)

Iekr

苦逼后端开发
首页
  • Java

    • JavaSE
    • JavaEE
    • 设计模式
  • Python

    • Python
    • Python模块
    • 机器学习
  • Golang

    • Golang
    • gRPC
  • 服务器

    • Linux
    • MySQL
    • NoSQL
    • Kubernetes
  • 项目

    • 传智健康
    • 畅购商城
  • Hadoop生态

    • Hadoop
    • Zookeeper
    • Hive
    • Flume
    • Kafka
    • Azkaban
    • Hbase
    • Scala
    • Spark
    • Flink
  • 大数据项目

    • 离线数仓
  • 青训营

    • 第四届青训营
  • HTML

    • HTML
    • JavaScript
  • Vue

    • Vue2
    • TypeScript
    • Vue3
    • Uni-APP
  • 数据结构与算法
  • C语言
  • 考研数据结构
  • 计算机组成原理
  • 计算机操作系统
  • Java基础

    • Java基础
    • Java集合
    • JUC
    • JVM
  • 框架

    • Spring
    • Dubbo
    • Spring Cloud
  • 数据库

    • MySQL
    • Redis
    • Elasticesearch
  • 消息队列

    • RabbitMQ
    • RocketMQ
  • 408

    • 计算机网络
    • 操作系统
    • 算法
  • 分类
  • 标签
  • 归档
  • 导航站
GitHub (opens new window)
  • JavaSE

    • Java简介
    • 基础语法
    • 数据类型
    • 变量
    • 运算符
    • 输入输出
    • 流程控制
    • 循环语句
    • idea中的辅助键
    • 数组
    • 方法
    • 面向对象基础
    • 字符串
    • ArrayList集合
    • 继承
    • 修饰符
    • 多态
    • 抽象
    • 接口
    • 类名作为形参和返回值
    • 内部类
    • Api
    • 异常
    • 集合
    • 泛型
    • Set集合和比较器
    • 树
    • 哈希
    • 可变参数
    • 创建不可变的集合
    • Stream流
    • 方法引用
    • File
    • 多线程
    • 多线程高级
    • 网络编程
    • 类加载器
    • 反射
    • XML
    • 枚举
    • 注解
    • 单元测试
    • 日志
    • HTTP协议
    • Servlet
      • 继承GenericServlet
      • 继承 HttpServlet
      • 生命周期
      • 线程安全问题
      • 映射方式
      • 创建时机
      • ServletConfig
        • 获取方法
      • ServletContext
        • 配置
        • 方法
        • 注解
        • 手动创建容器
    • 请求对象
    • 响应对象
    • Cookie
    • Session
    • JSP
    • Listener
    • JDBC
  • JavaEE

  • Linux

  • MySQL

  • NoSQL

  • Python

  • Python模块

  • 机器学习

  • 设计模式

  • 传智健康

  • 畅购商城

  • 博客项目

  • JVM

  • JUC

  • Golang

  • Kubernetes

  • 硅谷课堂

  • C

  • 源码

  • 神领物流

  • RocketMQ

  • 短链平台

  • 后端
  • JavaSE
Iekr
2021-08-13
目录

Servlet

# Servlet

# 继承 GenericServlet

  • 继承 GenericServlet

  • 重写 serviece 方法

  • 在 web.xml 中配置 servlet

    • <!--    声明-->
      <servlet>
          <!--        类名-->
          <servlet-name>servletDemo</servlet-name>
          <!--        类路径-->
          <servlet-class>com.example.demo.demo</servlet-class>
      </servlet>
      <!--    映射-->
      <servlet-mapping>
          <!--    与类名一致-->
          <servlet-name>servletDemo</servlet-name>
          <!--        网页访问链接路径-->
          <url-pattern>/demo</url-pattern>
      </servlet-mapping>
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
  • 重启项目

# 继承 HttpServlet

  • 继承 HttpServlet
  • 重写 doGet 和 doPost 方法 (可以在 doPost 中调用 doGet 方法)
  • 在 web.xml 中配置 servlet
  • 重启项目

# 生命周期

  • 出生 init ()
  • 过程 doGet serviece
  • 销毁 destroy ()

# 线程安全问题

serviece 采用是单例模式,整个应用中只有一个实例对象,我们称为单例模式

  • 如果只是使用而不修改
  • 将变量级别降到 局部变量 在 doget 中
  • 使用 synchronized 同步代码块

# 映射方式

  • 完整名称

  • / 开头 + 通配符 以什么什么开头

    • <servlet-name>/demo/*</servlet-name>
      
      1
  • 通配符 + 固定结尾 以什么什么结尾

    • <servlet-name>*.qwq</servlet-name>
      
      1

# 创建时机

  • 第一次访问时创建
    • 减少对服务器内存的浪费,访问时才创建
  • 服务器加载时创建
    • 提前创建好对象,提高首次执行的效率 对内容占用较大

在 web.xml 中配置 servlet 的 load-on-startup

<servlet>
    <servlet-name>servletDemo</servlet-name>
    <servlet-class>com.example.demo.demo</servlet-class>      
    <!-- 正整数为加载时创建值越大优先级越高  负数或不写为第一次访问时创建 -->
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>servletDemo</servlet-name>
    <url-pattern>/demo</url-pattern>
</servlet-mapping>
1
2
3
4
5
6
7
8
9
10

# ServletConfig

在 servlet 标签中 通过 init-param 标签 来配置

以键值对方式配置 param-name 和 param-value

<servlet>
    <servlet-name>servletDemo</servlet-name>
    <servlet-class>com.example.demo.demo</servlet-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
1
2
3
4
5
6
7
8
9

# 获取方法

  • 获取 ServletConfig 对象

    • private ServletConfig config;
      // 在init方法中
      public void init(ServletConfig config) { }
      
      1
      2
      3
  • getInitParameter (String name) 根据 key 获取 value

  • getInitParmeterNames () 获取所有参数名称的枚举

  • getServletName () 获取 Servlet, 名称

  • getServltContext () 获取 ServltContext 对象

# ServletContext

ServletContext 是应用上下文对象 (应用域对象). 每个应用只有一个 ServletContext 对象

# 配置

在 <web-app> 标签中 通过 <context-param> 标签进行配置

以键值对 <param-name> 和 <param-value> 进行配置

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee">
<context-param>
        <param-name>key</param-name>
        <param-value>value</param-value>
    </context-param>
</web-app>
1
2
3
4
5
6

# 方法

  • getServletContext () 获取当前应用的 ServletContext 对象
  • getInitparameter (String name) 根据名称获取全局配置参数
  • getContextPath () 获取当前应用访问的虚拟目录
  • getRealPath (String path) 根据虚拟目录获取绝对路径
  • setAttribute (String name,Object value) 向应用域对象中存储数据
  • getAttribute (string name) 根据名称获取应用域中的数据
  • removeAttribute (string name) 根据名称移除应用域中的数据

# 注解

Servlet 3.0 支持 注解和 XML 配置,要求 tomcat 9 和 javaee8

以前我们写一个类需要在 xml 中配置该类的路径、名称、链接

  • @WebServlet 注解配置 Servlet

  • 在该类上面使用

  • @WebServlet(name = "helloServlet", value = "/hello-servlet")
    
    1
  • image-20210813091845906

# 手动创建容器

  • 定义一个类 继承 HttpServlet
  • 重写 doget 和 dopost 方法
  • 定义一个类 实现 ServletContainerInitializer 接口
  • 在 src 目录下创建一个 META-INF 包
  • 在 META-INF 包 创建一个 services 包
  • 在 services 包 下创建一个 javax.servlet.ServletContainerInitializer 的文件 无后缀文件
  • 文件中的内容为容器实现类的全类名
  • 在容器实现类中 的 onStarup 方法 中完成注册 Servlet
    • 创建要注册的 servlet 对象
    • res = serveletContext.addServlet (name, 对象)
    • res.addMapping (访问路径)
  • 重启项目
编辑 (opens new window)
上次更新: 2023/12/06, 01:31:48
HTTP协议
请求对象

← HTTP协议 请求对象→

最近更新
01
k8s
06-06
02
进程与线程
03-04
03
计算机操作系统概述
02-26
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Iekr | Blog
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式