【学习笔记】手写 Tomcat -- 预备知识

tomcat学习笔记 tomcat学习笔记 tomcat学习笔记 立即下载

目录

一、新建项目

二、IO流

1. 什么是IO流?

2. IO的流向说明图解

3. IO 流的分类

4. 字节流

输出流

字节输出流的细节

输入流

字节输入流的细节

5. 练习

6. 字符流

输入流

字符流读取的细节

字符输入流原理解析

字符输出流原理解析

三、网络编程

1. UDP通信程序

UDP 发送数据

UDP 接收数据

2. TCP 通信程序

TCP发送端

TCP 服务器端

3. 解读代码

Socket 套接字

传输数据的类型

accept 方法

read 方法

返回的 -1 

作业

1. 实现在线聊天室

2. 预习


一、新建项目

二、IO流

1. 什么是IO流?

I 是 Input,O 是Output,也就是输入输出流。

当我们操作数据时,以内存为基准,把数据读取到内存中是输入,把数据从内存写入到硬盘是输出

2. IO的流向说明图解

图片来自哔哩哔哩黑马程序员

3. IO 流的分类

根据数据的流向可以分为:输入流和输出流

根据数据的类型可以分为:字节流和字符流

操作文件类型

字节流:以字节为单位,可以操作所有文件类型

字符流:以字符为单位,只能输入输出纯文本文件

4. 字节流

输出流
//1. 创建 FileOutputStream 对象,指定写入的文件路径。

FileOutputStream fos = new FileOutputStream("文件路径");


//2. 将字符串转换为字节数组并写入文件。

fos.write("hello".getBytes());


//3. 关闭输出流

fos.close();

 

字节输出流的细节

1.创建字节输出流的对象

  1. 参数是字符串表示的路径或者File文件对象都是可以的
  2. 如果文件不存在,就会创建一个新的文件,不过需要父级路径是正确的
  3. 如果文件已经存在,会覆盖原文件

2.写数据

是根据字节对应的ASCII码表

3.关闭数据流

追加

在创建字节输出流的对象的时候,第二个参数是打开追加

输入流
//1. 创建 FileInputStream 对象,指定读取的文件路径。

FileInputStream fis = new FileInputStream("文件路径");


//每次只会读取一个字节,读取出来的是int型,需要转成Char类型

System.out.println((char)fis.read());


//释放资源

fis.close();

字节输入流的细节

1. 创建对象

        如果指定的路径文件不存在,会字节报错

2. 读取内容

        一次只会读取一个字节,读取的是ASCII码表对应的数值

        当读取指针指到末尾没有内容了,会返回-1

3. 释放资源

5. 练习

拷贝文件

当使用一个字节一个字节来读取数据,再写入数据的方式,速度比较慢

所以,可以定义一个数组,一次读取尽量把数组装满,一次写入整个数组的数量

FileInputStream fis = new FileInputStream(要读取的文件路径);
FileOutputStream fos = new FileOutputStream(要写入的文件路径);

//创建一个数组,用来一次读取多少字节
byte [] buf = new byte[1024*1024*10];

int b;
while ((b = fis.read(buf)) != -1) {
    fos.write(buf, 0, b);            //第一个参数表示将buf数组里的数据写入到文件里
}                                    //第二个参数是从 0 索引开始,写入的字节数是 b
fis.close();
fos.close();

 

解读代码

fis.read(buf)用于从输入流中读取数据到缓冲区buf,返回值b表示实际读取到的数据字节数。当读取到的数据为-1时,表示输入流已经到达末尾,循环结束。

fos.write(buf, 0, b)则用于将缓冲区中的数据写入到输出流中,写入的字节数为b。

6. 字符流

输入流
//创建字符流对象
FileReader fr = new FileReader("要读取的文件路径");
int ch;
//字符流的底层也是字节流,默认也是一次读取一个字节
while ( (ch = fr.read() )  != -1){
    System.out.print( (char) ch);        //读取出来后会自动解码然后转成十进制
}                                        //所以再转成字符就可以了
fr.close();
字符流读取的细节
  •         字符流的底层也是字节流,默认也是按照一个字节一个字节读取的
  •         遇到中文就会一次读取多个字节,这样可以避免乱码,编码不同,一次读取的字节也不同
  •         在读取之后,底层会自动解码然后转成十进制数,然后把十进制数返回
  •         返回的十进制数也是表示字符集上的数值, 如果需要看到汉字,那么就需要再转成字符就行了

字符输入流原理解析

1. 创建字符输入流对象

底层会关联文件,并且在内存里创建一个byte数组作为缓冲区,长度为8192字节的数组

2. 读取数据

        底层:        1.判断缓冲区有没有数据可以读取

                           2.缓冲区没有数据:从文件里读取数据到缓冲区,尽量把缓冲区装满

                                如果文件里没有数据了,返回-1

                           3.缓冲区有数据:从缓冲区获取数据。

                                空参的read方法:一次读取一个字节,遇到中文一次读取多个字节(根据字符集),把字节解码后并且转成十进制数字返回

                                有参的read方法:把读取字节,解码,转成文字合并了,然后把文字放在数组里

字符输出流原理解析

创建字符输出流的对象的时候,在内存会创建一个缓冲区

有三种情况会把缓冲区的数据写入到文件里

  1. 当缓冲区存放满了的时候
  2. 手动刷新,flush刷新之后还可以继续写数据
  3. 释放资源

要学习 Tomcat ,就需要先了解什么是网络编程

创建两个类 一个作为客户端,一个作为服务器端

三、网络编程

1. UDP通信程序

  • Java中的UDP通信
    • UDP协议是一种不可靠的无连接的网络协议,它在通信的两端各建立一个Socket对象,但是这两个Socket只是发送,接收数据的对象,因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念
    • Java提供了DatagramSocket类作为基于UDP协议的Socket
  • 构造方法

方法名

说明

DatagramSocket()

创建数据报套接字并将其绑定到本机地址上的任何可用端口

DatagramPacket(byte[] buf,int len,InetAddress add,int port)

创建数据包,发送长度为len的数据包到指定主机的指定端口

  • 相关方法

方法名

说明

void send(DatagramPacket p)

发送数据报包

void close()

关闭数据报套接字

void receive(DatagramPacket p)

从此套接字接受数据报包

UDP 发送数据
//创建发送端的Socket对象(DatagramSocket)
DatagramSocket ds = new DatagramSocket();

//创建数据,并把数据打包
//构造一个数据包,发送长度为 length 的数据包到指定IP上的指定端口号。
byte[] bys = "你好".getBytes();

DatagramPacket dp = new DatagramPacket(bys,bys.length,InetAddress.getByName("127.0.0.1"),8888);

//调用DatagramSocket对象的 send 方法发送数据
ds.send(dp);

//关闭通信通道
ds.close();

UDP 接收数据
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class Server {
    public static void main(String[] args) throws IOException {

        // 创建一个DatagramSocket实例,绑定到8888端口,用于接收UDP数据包。
        DatagramSocket ds = new DatagramSocket(8888);

        // 创建一个大小为1024字节的字节数组,用于存储接收到的数据。
        byte[] bytes = new byte[1024];
        // 该实例用于接收UDP数据包。
        DatagramPacket dp = new DatagramPacket(bytes,bytes.length);

        // receive方法接收来自任何发送者的数据包,并将其存储在dp中。
        // 这个方法是阻塞的,直到接收到一个数据包。
        ds.receive(dp);

        // 获取接收到的数据包中的数据部分和长度。
        byte[] data = dp.getData();
        int length = dp.getLength();

        // 将接收到的字节数据转换为字符串并打印。
        // 字符串的起始位置是0,长度是数据包的实际长度。
        // 这样可以确保只打印接收到的有效数据部分。
        System.out.println(new String(data,0, length));

        // 释放资源
        ds.close();

    }
}

测试

2. TCP 通信程序

  • Java中的TCP通信
    • Java对基于TCP协议的的网络提供了良好的封装,使用Socket对象来代表两端的通信端口,并通过Socket产生IO流来进行网络通信。
    • Java为客户端提供了Socket类,为服务器端提供了ServerSocket类
TCP发送端
import java.io.IOException;
import java.io.OutputStream;
import java.net.*;

public class Client {
    public static void main(String[] args) throws IOException {

        //1.创建Socket对象
        //细节:在创建对象的同时会连接服务端
        //      如果连接不上,代码会报错
        Socket socket = new Socket("127.0.0.1",8080);

        //2.可以从连接通道中获取输出流
        OutputStream os = socket.getOutputStream();
        //写出数据
        os.write("hello".getBytes());

        //3.释放资源
        os.close();
        socket.close();
    }
}
TCP 服务器端
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) throws IOException {

        // 创建一个ServerSocket对象,监听8888端口,等待客户端连接
        ServerSocket ss = new ServerSocket(8080);

        // 调用accept()方法阻塞等待,直到有客户端连接到服务器,返回一个Socket对象用于与该客户端通信
        Socket socket = ss.accept();

        System.out.println("客户端连接成功");

        // 获取Socket对象的输入流,用于读取客户端发送的数据
        InputStream is = socket.getInputStream();

        // 定义一个整型变量b,用于存储读取到的字节
        int b;

        // 循环读取输入流中的数据,read()方法返回-1表示流已结束
        while ((b = is.read()) != -1){
            // 将读取到的字节转换为字符并输出
            System.out.print((char)b);
        }

        // 关闭与客户端的连接
        socket.close();
        // 关闭连接通道
        ss.close();
    }
}

3. 解读代码

TCP 服务器端

  1. accept 方法是阻塞的,作用就是等待客户端连接
  2. 客户端创建对象并连接服务器,此时是通过三次握手协议,保证跟服务器之间的连接
  3. 针对客户端来讲,是往外写的,所以是输出流,针对服务器来讲,是往里读的,所以是输入流
  4. read 方法也是阻塞的
  5. 客户端在关流的时候,还多了一个往服务器写结束标记的动作,结束标记 -1 
  6. 最后一步断开连接,通过四次挥手协议保证连接终止

Socket 套接字

Socket 套接字,作用就是用来实现网络上不同主机的应用程序进行双向通信。

套接字包括 IP 地址和端口号两个部分。

Socket 被用于应用层和传输层之间的通信。

Java 提供的 Socket 的类的核心功能就是 建立连接,发送数据,接收数据

Socket(InetAddress address,int port)         建立连接

getoutputStram()                                        发送数据

getInputStream()                                        接收数据

传输数据的类型

在网络中,数据传输的都是字节 byte,然后把字节放到字节数组里发送,这就是为什么在发送数据前要把数据转成字节

accept 方法

accept 方法用于接收来自客户端的连接请求。这个方法是阻塞的,也就是它会一直等待,直到有一个新的客户端连接才会继续往下执行

read 方法

read 方法是从当前建立的连接通道中读取字节,一次读取一个字节,所以使用循环读取数据。

read 方法也是阻塞的,这意味着它会一直等待直到有足够的数据可读,或者直到连接关闭。

那数据读取完了怎么结束等待呢?判断数据是否读取完,如果读取完,就停止循环

返回的 -1 

当客户端主动关闭连接后会发送一个结束标志,服务端的 read 方法就会返回 -1 ,表示客户端关闭了连接

当读完数据时,read 方法会返回 -1 ,表示数据读取完毕

作业

1. 实现在线聊天室

可以使用TCP建立连接

张三发送:你好

李四发送:你好呀

2. 预习

网络通信三要素:IP、端口、协议

TCP、UDP,它们之间的区别是什么?

三次握手、四次挥手

HTTP 传输协议:请求协议,响应协议

进程和线程的关系

tomcat学习资料整理(不断更新) NULL 博文链接:https://zhuorulin.iteye.com/blog/1007340 立即下载

相关推荐

基于mediapipe的动作捕捉和人物模型的驱动

我实习做这个的时候,当时也找了很多资料,但很多资料都没有讲透,下面我就总结一下自己结合看代码后的感悟,还有一些我认为很重要的点。

qq_58484580的博客 7705

Tomcat学习笔记

Tomcat学习笔记

weixin_44736938的博客 754

保姆级教程:用Protege 5.5.0从零构建你的第一个知识图谱(附实战案例文件)

本文提供了一份详细的Protege 5.5.0使用指南,从零开始构建知识图谱。通过'中国古代文人关系网'实战案例,涵盖软件安装、本体创建、属性定义、实例填充到高级功能应用的全流程,帮助初学者快速掌握知识建模的核心技能。

weixin_26808205的博客 234

Tomcat服务器系统架构学习笔记

Tomcat服务器的功能为:处理 Socket 连接,负责网络字节流与 Request 和 Response 对象的转化,加载和管理 Servlet,以及具体处理 Request 请求。因此服务器包含连接器(Connector)--对外交流和容器(Container)--内部处理两大核心组件。

AOLDGOAT的博客 263

USB-Blaster在Win11报错?3分钟搞定驱动兼容性问题(Quartus 21.4实测)

本文针对Windows 11系统下USB-Blaster驱动安装问题,提供了一套快速解决方案。通过优化驱动安装流程、绕过签名验证及设备管理器高级技巧,帮助开发者在3分钟内解决Quartus 21.4的兼容性问题,提升FPGA调试效率。

weixin_30772105的博客 291

Sourcetree与Gitee的搭配使用

初次将gitee与sourcetree联合起来使用,还是遇到了不少问题,其中最让人烦恼的就是在我修改了一下用户名之后,便无法在Sourcetree直接推送到gitee,很是让人郁闷。本文处理Sourcetree与gitee搭配使用过程中的问题:Sourcetree身份验证失败,无法推送;Sourcetree推送时,无法显示要推送的分支;Sourcetree远端上面有感叹号。

年少时的棉花糖 4434

Tomcat 知识点总结,看看你掌握的怎么样?

思维导航: 架构 各组件的实现与执行组件实现 配置文件Server.xml(重点)ServerServiceExecutorConnectorEngineHostContexttomcat-user.xml(权限管理)Web.xml(不常用)ServletContext 初始化全局参数会话设置 安全与优化安全配置安全应用安全传输安全性能优化性能测试 Tomcat 附加功能 WebSocketWebSocket 请求过程 文章正文: Tomcat 学习笔记。本文相关配置均为 tomcat8 .

Java6888的博客 491

思博伦仪表打流测试使用总结

下图红框中的checkbox为选中状态时,表示该流会携带测试仪做一些分析,包括时延和乱序等信息时需要的一些字节,当改选项选中时,如配置IPv4的TCP流,最小字节长度必须为78字节;如果需要64字节的TCP流,改选项必须不选中;

陌上花开缓缓归以的博客 1465

Tomcat技术知识点总结

参考地址: 《tomcat架构》 《四张图带你了解Tomcat系统架构》 一. Tomcat 的结构 一个 Tomcat 中有一个 Server,每个 Server 中至少有一个 Service。一个 Service 由至少一个 Connector 与一个 Container 组成。 Service 的结构主要可以被分为两部分:Connector 与 Container。 Connector: 用于接受客户端传来的数据,解析其协议,将解析后的数据传输给 Servlet; Container: 封装和.

琦小虾的代码世界 855

WorkBuddy 技能指南:基础办公与文档处理

WorkBuddy 不仅仅是一个对话工具——它通过技能(Skills)系统,将通用 AI 助手转变为具备专业领域能力的智能助手。每个技能都是一套经过精心设计的"能力包",包含专业知识、工作流程和专用工具。本文聚焦于文档处理类技能——这是日常工作中使用频率最高、最实用的能力集合。

u011186532的专栏 703

python语言字符串练习题

描述:find()方法检测字符串中是否包含子字符串str,如果指定 beg(开始)和end(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串,返回字符串中,子字符串第一个字符的索引值,否则返回-1。描述:find()方法用来检测字符串中是否包含子字符串str,在指定范围内,如果包含子字符串,返回字符串中,子字符串第一个字符的位置,否则返回-1。命令行先后输入两个字符串,然后利用find()方法找出第二个字符串在第一个字符串中出现的位置。本关需要你编写一个程序,输出字符串的长度。

国家一级致癌物 2026

JavaEE平台技术——预备知识(Web、Sevlet、Tomcat)

JavaEE平台技术——预备知识 1. Web基础知识 2. Servlet 3. Tomcat并发原理

这里有一只小马吖 1172

SAP ABAP Web Service 的创建与消费:保姆级教程

SOAP 定义了消息的格式和传输规则,使得 Web Service 可以在不同的操作系统和网络环境中通信。通过 WSDL,服务的提供者可以明确地定义服务的功能,而服务的使用者则可以通过解析 WSDL 文件,了解如何正确地调用该服务。它封装了与 Web 服务通信的所有复杂性,如消息格式的构建、传输协议的选择、请求的发送和响应的处理等。除了本文介绍的 ABAP 编程语言之外,我们还可以通过 Java,Node.js,C++,C#,Python 等其他编程语言来消费本文创建的 ABAP Web Service.

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 713

tomcat原理_手写TOMCAT服务器,模拟其实现原理

本文将从手写一个微型服务器,模拟实现TOMCAT服务器的运行过程及原理,废话不多说,先看整个项目的类架构。本文需具有以下预备知识:1.Socket编程 2.HTML基础知识 3.HTTP协议相关知识 4.反射及容器集合框架的相关知识第一步:我们先要按上图的包类关系,把整个服务器的项目框架搭建好,然后编写XML文档,最后写IOCloseUtil.java工具类。以下是XML文档和IOClos...

weixin_39942213的博客 182

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【tomcat】3、预备知识与参数解析

一、socket和http 1 tcp和http socket是tcp层上面封装的协议,http是应用层封装的协议 计算机网络的知识告诉我们, tcp需要先三次握手后才能通信,udp无需握手。 应用层是软件之间的通信,就是我们说的浏览器和服务器 流程: TCP连接三次握手。可以把这里认为是socket,但是socket是tcp之上的封装 发送HTTP请求 响应HTTP请求 1.1 TCP 要想明白Socket连接,先要明白TCP连接。手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使

努力充实,远方可期 719

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

乡村核酸检测预备系统(源码+开题)

乡村核酸检测预备系统的研究,不仅有助于提升乡村公共卫生应急管理能力,还能通过信息化手段优化资源配置,加强乡村居民对疫情防控的认知和参与。首先通过调研了解乡村核酸检测的实际需求,然后设计系统的功能模块和交互界面,接着进行系统的开发和实现,最后通过实际应用测试评估系统的性能和效果。本研究旨在设计并开发一套适用于乡村环境的核酸检测预备系统,通过系统功能如用户管理、防疫知识普及、核酸检测通知等,提升乡村地区居民的防疫意识,保障核酸检测工作的有序进行,从而为乡村疫情防控提供有力支持。

光冯毕设程序 1329

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java预备知识

Java 预备知识 一、Java三大版本 JavaSE:标准版(桌面程序,控制台开发) JavaME:嵌入式开发(手机,小家电…) JavaEE: 企业级开发(web端,服务器开发…) 二、JDK、JRE、JVM JDK:Java Development Kit JRE:Java Runtime Environment JVM:Java Virtual Machine 三、平台,系统,工具 构建工具:Ant, Maven, Jekins 应用服务器:Tomcat,Jetty,Jboss,Websphere,

SunnyLovesStudy的博客 219

手写Tomcat服务器

预备知识 编写服务器用到的知识点 1) Socket 编程2) HTML3) HTTP 协议4) 反射5) XML 解析6) 服务器编写 Socket编程 https://www.cnblogs.com/bfcs/p/10790130.html HTML知识 HTML:HyperText Markup Language 超文本标记语言用于描述网页文档的一种标记语言 表单(for...

weixin_30443731的博客 217

java 跨服务器文件夹创建_学习Java的026天,手写服务器(未完成...)?

今天是学习Java的第26天。今天的内容是运用学过的知识去做手写服务器的项目。手写服务器的项目需要综合前面的知识,并在eclipse中建立框架。预备知识:编写服务器的内容和用到的知识点 :1) Socket 编程 2) HTML 3) HTTP 协议 4) 反射 5) XML 解析 6) 服务器编写 Socket 编程: C/S 结构:客户端与服务器端一次双向通信 B/S 结构:浏览器与服务器...

weixin_39611072的博客 156

Java乡村核酸检测预备系统(毕设源码+mysql+lw)

其次,通过系统的建立,可以提高乡村地区居民的防控意识,增强他们的自我保护能力,减少疫情对乡村社会的影响。最后,该系统的建立还可以促进乡村地区的医疗资源整合和优化配置,提高乡村医疗服务水平,为乡村振兴战略的实施提供有力支撑。然而,由于乡村地区的医疗资源相对匮乏,检测能力有限,导致乡村地区的疫情防控工作面临较大的挑战。通过该系统的建立,可以为乡村地区的疫情防控工作提供有力的支持,保障乡村居民的生命安全和身体健康,推动乡村振兴战略的顺利实施。: 流行的开源关系型数据库管理系统,用于存储和检索数据。

天成程序设计 980

Java—手写服务器

1.预备知识_Socket知识回顾 1.1编写服务器用到的知识点 1)Socket编程 2)HTML 3)HTTP协议 4)反射 5)XML解析 6)服务器编写 1.2复习Socket编程 1)C/S结构:客户端与服务器端一次双向通信 2)B/S结构:浏览器与服务器 httpClient_1 Client.java package com.bjsxt.test; import java.io.DataInputStream; import java.io.DataOutputStream; import

LiLi的博客 1034

springboot毕设基于的预备役人员管理系统源码+论文+部署

现代战争形态的演变也对预备役人员的军事素质提出了更高要求,需要通过系统的训练计划和准确的训练记录来提升预备役人员的作战能力,同时军事教官在预备役人员训练过程中的作用也需要通过有效的管理系统进行优化配置,从而提高整体的训练质量和预备役部队的战斗力。这一系统能够优化军事教官资源的配置,使他们在预备役人员的训练中发挥最大效能,提高训练的科学性和有效性。系统要能准确记录训练过程和结果,以便对预备役人员的军事素质进行评估,同时也为后续的训练计划调整提供依据,从而提高预备役部队的整体战斗力。

家林学长 1168

手写框架专栏:实现tomcat和ssm框架核心功能

手写一个基于BIO的Java服务器手写spring框架预备知识:三级缓存解决循环依赖问题手写spring框架预备知识:责任链模式解决cglib多重代理问题手写spring框架:实现ioc和aop功能;使用三级缓存解决循环依赖问题手写springmvc框架:整合手写的spring和服务器,实现前后端的请求处理和视图渲染手写mybatis框架:完成对数据库的增删改查操作手写框架项目预备知识:整合spring和mybatis手写框架项目:实现基本的crud和自定义aop切面功能

qq_44993268的博客 197

【Java网络编程与IO流】Apache Tomcat和Nginx的区别是什么?

Apache Tomcat和Nginx的区别是什么? Nginx的势头很足,在2020 11月份使用份额上领先Apache。 一、预备知识 线程 阻塞和非阻塞 同步和异步 线程: 当一个程序在执行的时候,一般会创建一个进程,也可以有多个进程。而一个进程至少会创建一个线程,多个线程共享一个进程的内存。程序的最终运行是通过线程来操作的。线程的数量跟CPU的核数有关,一个核最多能发出两个线程。线程的操作主要分为给:CPU进行程序命令的执行;IO的操作(读取或输出数据)或请求网络数据。 阻塞和非阻塞: 阻塞:线程

Mind_programmonkey的博客 866

Tomcat单点登录配置及源码分析

我们上网的时候,一定遇到过类似这样的情况,例如使用网易邮箱时进行了登录操作,之后再访问网易的博客系统时,发现自动以之前的ID登录了。这种实现在计算机中称为SSO(Single Sign On),即我们常说的单点登录。这种在关联网站间共享认证信息,避免需要在多个系统中重复输入帐户信息的行为,是SSO要解决的。 对于许多应用,可能会独立部署等情况,所以常会采用cas的形式,来实现SSO。 我们今天要了解的,是作为在同一个Tomcat中部署的应用之间,如何实现SSO,避免重复登录。 预备: 首先,有几点预

qwer123451234123的博客 586
上一篇: Spring-MVC 结合 Swagger2
下一篇: 【学习笔记】手写 Tomcat 一
LearnTech_123
博客等级 码龄3年 445粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值