IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> JavaWeb核心-Servlet -> 正文阅读

[网络协议]JavaWeb核心-Servlet

一.Servlet

Servlet介绍

是运行在java服务端上的程序,用于接收和响应来自客户端基于HTTP的请求

要想实现Servlet功能,可以实现Servlet接口,继承GenericServlet或者HttpServlet

每次请求都会执行service方法

关系视图

在这里插入图片描述

三种编写方式

第一种:实现Servlet接口,接口中的方法必须全部实现。

使用此种方式,表示接口中的所有方法在需求方面都有重写的必要。此种方式支持最大程度的自定义。

第二种:继承GenericServlet,service方法必须重写,其他方可根据需求,选择性重写。

使用此种方式,表示只在接收和响应客户端请求这方面有重写的需求,而其他方法可根据实际需求选择性重写,使我们的开发Servlet变得简单。但是,此种方式是和HTTP协议无关的。

第三种:继承HttpServlet,它是GenericServlet的子类。如果我们选择继承HttpServlet时,只需要重写doGet和doPost方法,不要覆盖service方法。

使用此种方式,表示我们的请求和响应需要和HTTP协议相关。(目前我们只知道GET和POST,而实际HTTP协议支持7种请求方式,GET POST PUT DELETE TRACE OPTIONS HEAD )。

生命周期

init初始化,出生:请求第一次到达Servlet时,对象就创建出来,并且初始化成功。只出生一次,就放到内存中。

service服务,活着:服务器提供服务的整个过程中,该对象一直存在,每次只是执行service方法。

destory,死亡:当服务停止时,或者服务器宕机时,对象消亡。

安全问题

  • servlet是单例的, 被多个用户同时访问就有可能出现线程安全问题, 解决方案如下
    • 1.不要去定义成员变量, 去定义局部变量
    • 锁,现在就忘掉!!!这种效率太低, 需要排队执行

映射方式

第一种:指名道姓的方式

此种方式,只有和映射配置一模一样时,Servlet才会接收和响应来自客户端的请求。

例如:映射为:/servletDemo5

第二种:/开头+通配符的方式

此种方式,只要符合目录结构即可,不用考虑结尾是什么。

例如:映射为:/servlet/*

第三种:通配符+固定格式结尾

此种方式,只要符合固定结尾格式即可,其前面的访问URI无须关心(注意协议,主机和端口必须正确)

例如:映射为:*.do

三种映射方式的优先级为:第一种>第二种>第三种

创建时机

第一种:请求第一次访问是创建Servlet

  • 它的优势就是减少了对服务器内存的浪费,因为那些一直没有被访问过的Servlet对象都没有创建,因此也提高了服务器的启动时间。而它的弊端就是,如果有一些要在应用加载时就做的初始化操作,它都没法完成,从而要考虑其他技术实现。

第二种:应用加载时创建Servlet,在标签中添加

<load-on-startup></load-on-startup>

负数或0代表第一访问时候才会被创建,正数代表服务器启动就创建Servlet, 但是值越小优先级越高

  • 它的优势是在服务器启动时,就把需要的对象都创建完成了,从而在使用的时候减少了创建对象的时间,提高了首次执行的效率。它的弊端也同样明显,因为在应用加载时就创建了Servlet对象,因此,导致内存中充斥着大量用不上的Servlet对象,造成了内存的浪费。

场景

  • 何时采用第一种方式,何时采用第二种方式。就是当需要在应用加载就要完成一些工作时,就需要选择第一种方式。当有很多Servlet的使用时机并不确定是,就选择第二种方式。

ServletConfig

介绍:它是Servlet的配置参数对象,在Servlet规范中,允许为每个Servlet都提供一些初始化配置

生命周期:由于它是在初始化阶段读取了web.xml中为Servlet准备的初始化配置,并把配置信息传递给Servlet,所以生命周期与Servlet相同。这里需要注意的是,如果Servlet配置了1,那么ServletConfig也会在应用加载时创建。

配置方式

  • 在xml中的添加标签

<init-param>
         <param-name>键1</param-name>
         <param-value>值1</param-value>
     </init-param>
     <init-param>
         <param-name>键2</param-name>
         <param-value>值2</param-value>
    </init-param>
    ........

常用方法

  • String getInitParameter(String key)
    • ·根据键获取值,就是param-name中的键
  • Enumeration getInitParameterNames
    • 获取所有初始化参数
      • 遍历方式:
- Enumeration<String> keys = config.getInitParameterNames();
      while (keys.hasMoreElements()){
        String element = keys.nextElement();
        System.out.println(keys+","+element);
     }
  • ServletContext getServletContext()
    • 获取ServletContext对象
  • String getServletName()
    • 获取Servlet的名称,即servlet-name的内容

ServletContext

介绍:ServletContext对象,它是应用上下文对象。每一个应用有且只有一个ServletContext对象。它可以实现让应用中所有Servlet间的数据共享。

生命周期:

出生: 应用一加载,该对象就被创建出来了。一个应用只有一个实例对象。

活着:只要应用一直提供服务,该对象就一直存在。

死亡:应用被卸载(或者服务器挂了),该对象消亡。

配置方式

- 在<web-app>中添加标签
  - <context-param>
        <param-name>键1</param-name>
        <param-value>值1</param-value>
    </context-param>
    <context-param>
        <param-name>键2</param-name>
        <param-value>值2</param-value>
    </context-param>。。。。。

常用方法

  • ServletContext getServletContext()
    • 创建ServletContext对象
  • String getInitParameter(“键”)
    • 获取值
  • String getContextPath("/")
    • 得到虚拟路径
  • String getRealPath(“/”)
    • 得到真实路径
  • setAttribute(“userName”,“zhangsan”)
    • 设置共享数据
  • getAttribute(“userName”)
    • 获取共享数据
  • removeAttribute(“userName”)
    • 移除共享数据

Servlet3.0注解

1.定义一个类继承HttpServlet
2.重写service方法
3.在service方法中编写逻辑
4.使用@WebServlet(“访问路径”)

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-08 11:06:18  更:2021-09-08 11:08:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年6日历 -2024/6/27 1:43:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码