![](https://img-blog.csdnimg.cn/9f1bfa03a3d34034935716b171d468fa.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JAVA web前置基础学习知识
文章平均质量分 84
JAVA web
Binary Oracle
一名热爱开源和技术的Coder , 开源框架spring committer , golang开源网络库netpoll committer; (脱产备战25考研中,停更一年)
展开
-
Tomcat 处理文件上传
而x-www-form-urlencoded只可以传输基础的文本数据,不过你要是强行把文件当做文本,用这个类型传也没人能拦你,但作为文本传输时后端必然用字符串方式解析,byte->str时的编码开销完全没必要,而且可能会导致编码错误……因为报文小啊,普通的请求报文不会太大的,常见的也就几K到几十K,而且对于纯文本报文来说,读取操作一定也是及时的且一次性全部读取的,而multipart这种形式的报文不同,它是文本+文件混合的方式,而且还可能是多文件。.........转载 2022-08-02 16:52:33 · 2192 阅读 · 4 评论 -
ServiceLoader和DriverManager的前世今生
我们先来看看JDBC获取数据库连接有哪几种做法: 和第一种方式没有区别,这里不再多说 下面就是把Driver注册到了DriverManager进行管理,但是也不推荐这种方式 下面这种方式相对来说就舒服很多,但是其实还可以更简单 下面一行代码就够了相信大家看着我一步步简化到最后,已经蒙了,为什么可以这样写,别急,下面我们就来看看DriverManager到底是怎么实现的因为DriverManager实现主要依靠了ServiceLoader来完成,因此这里先来看看Servic原创 2022-06-05 16:55:44 · 295 阅读 · 0 评论 -
从零开始手写Tomcat的教程14节----服务器组件(Server)和服务组件(Service)
从零开始手写Tomcat的教程14节----服务器组件Server和服务组件Service 服务器组件StandardServer类initialize方法start方法stop方法await方法Service接口StandardService类Connector和Container与生命周期有关的方法应用程序Stopper类小结服务器组件public interface Server { // --------------------------------------------原创 2022-03-23 09:39:50 · 263 阅读 · 0 评论 -
从零开始手写Tomcat的教程13节---Host和Engine
从零开始手写Tomcat的教程13节---Host和EngineHost接口StandardHost实现类StandardHostValve类StandardHostWrapper类为什么必须要有一个Host容器应用程序小结Engine接口StandardEngine类StandardEngineValve类应用程序小结Host接口public interface Host extends Container { // --------------------------------原创 2022-03-22 22:34:15 · 344 阅读 · 0 评论 -
从零开始手写Tomcat的教程12节----StandardContext
从零开始手写Tomcat的教程12节----StandardContextStandardContext的配置StandardContext类的构造函数启动StandardContext类的实例invoke方法StandardContextMapper类对重载的支持backgroundProcess()方法小结StandardContext的配置StandardContext类的构造函数 /** * Create a new StandardContext compon原创 2022-03-21 13:31:34 · 685 阅读 · 8 评论 -
从零开始手写Tomcat的教程11节----StandardWrapper
从零开始手写Tomcat的教程11节----StandardWrapper方法调用序列SingleThreadModel类StandardWrapper类分配servlet实例载入servlet实例ServerConfig对象1.getServletContext()方法2.getServletName()方法3. getInitParameter()方法4.getInitParameterNames()方法servlet容器的父子关系StandardWrapperFacadestandardWrapper原创 2022-03-18 21:23:17 · 417 阅读 · 0 评论 -
从零开始手写Tomcat的教程10节---安全性
从零开始手写Tomcat的教程10节---安全性领域GenericPrincipal类LoginConfig类Authenticator接口安装验证器阀应用程序SimpleContextConfig类SimpleRealm类SimpleUserDataBaseRealm类Bootstarp1类BootStrap2类总结对tomcat中管道和阀门机制不懂的小伙伴,参考本篇文章领域目前可知结构,如图所示,下面继续分析GenericPrincipal类LoginConfig类原创 2022-03-17 19:50:17 · 318 阅读 · 0 评论 -
从零开始手写Tomcat的教程9节---Session管理
从零开始手写Tomcat的教程9节---Session管理Session管理Session对象Session接口StandardSession对象StandardSessionFacade类ManagerManager接口ManagerBase类StandardManager类PersistentManagerBase类PersistentManager类DistributedManaeger类存储器storeBase类FileStore类JDBCStore类应用程序SimpleWrapperValve类原创 2022-03-15 21:14:03 · 623 阅读 · 0 评论 -
从零开始手写Tomcat的教程8节----加载器
从零开始手写Tomcat的教程8节----加载器Java的类加载器解答一: servlet只能访问指定目录下的类,类加载器如何实现这种隔离访问机制的呢?解决二: 类加载器如何实现在项目不重启的情况下,对某个发生变化的类进行热更新呢?Loader接口WebAppLoader类创建类加载器设置仓库设置类路径设置访问权限开启新线程执行类的重新载入WebappClassLoader类类缓存载入类应用程序总结我首先提出几个问题,大家先思考一下,如果都可以想出来,说明对类加载器的掌握程度还算不错: serv原创 2022-03-14 22:03:22 · 839 阅读 · 1 评论 -
从零开始手写Tomcat的教程7节---日志记录器
从零开始手写Tomcat的教程7节---日志记录器Logger接口Tomcat的日志记录器LoggerBase类SystemOutLogger类SystemErrLogger类FileLogger类小结应用程序 日志记录器需要和某个servlet容器相关联 Logger是tomcat日志记录器都必须实现的接口Logger接口Tomcat的日志记录器Tomcat5 中实现了生命周期接口值得我们关注,因为这意味着可以通过关联的容器来启动和停止Logger组件LoggerBa原创 2022-03-13 22:54:36 · 1465 阅读 · 0 评论 -
从零开始手写Tomcat的教程6节----生命周期
从零开始手写Tomcat的教程6节----生命周期Lifecycle接口LifecycleEvent类LifecycleListener接口LifecycleSupport类应用程序SimpleContext类SimpleContextLifecycleListener类SimpleLoader类SimplePipeline类SimpleWrapper类总结Lifecycle生命周期接口是所有容器都必须实现的一个接口,通过该接口,可以以一种统一的形式来管理所有容器的生命周期过程,并且还可以通过监听器实原创 2022-03-13 17:28:26 · 846 阅读 · 0 评论 -
从零开始手写Tomcat的教程5节---servlet容器
从零开始手写Tomcat的教程5节---servlet容器前言Container接口管道任务Pipeline类Valve接口ValveContext接口Contianed接口Wrapper接口Context接口Wrapper应用程序SimpleLoader类SimplePipeline类SimpleWrapperValve类ClientPLoggerValve类HeaderLoggerValve类BootStrap1类运行应用程序总结Context应用程序思路整理SimpleContextValve类Sim原创 2022-03-12 22:13:19 · 1090 阅读 · 0 评论 -
从零开始手写Tomcat的教程4节---Tomcat默认连接器
从零开始手写Tomcat的教程4节原创 2022-03-12 11:10:06 · 1285 阅读 · 0 评论 -
从零开始手写Tomcat的教程1-3节
从零开始手写Tomcat的教程手写Tomcat介绍第一节 : 一个简单的Web服务器注意点第二节: 一个简单的servlet容器手写Tomcat介绍本项目主要是手写精简版的tomcat,力争做到不遗不漏本项目gitee仓库链接如下:https://gitee.com/DaHuYuXiXi/easy-tomcat.git本篇文章是梳理每一小节的基本脉络,具体每小节的代码实现,自行参考gitee仓库里面的提交记录第一节 : 一个简单的Web服务器本节主要重点在于建立基本的socket通信服务,原创 2022-03-06 20:58:35 · 717 阅读 · 0 评论 -
Tomcat卷五---Web 应用配置,管理配置和JVM配置
Tomcat卷五---Web 应用配置,管理配置和JVM配置Web 应用配置ServletContext 初始化参数会话配置Servlet配置Listener配置Filter配置欢迎页面配置错误页面配置Tomcat 管理配置host-managermanagerJVM 配置JVM内存模型图JVM配置选项Web 应用配置web.xml 是web应用的描述文件, 它支持的元素及属性来自于Servlet 规范定义 。在 Tomcat 中, Web 应用的描述信息包括 tomcat/conf/web.xml原创 2022-02-25 20:44:08 · 285 阅读 · 0 评论 -
Tomcat卷四----Tomcat 服务器配置
Tomcat卷四----Tomcat 服务器配置Tomcat服务器配置server.xmlServerServiceExecutorConnectorEngineHostContexttomcat-users.xmlTomcat服务器配置Tomcat 服务器的配置主要集中于 tomcat/conf 下的 catalina.policy、 catalina.properties、context.xml、server.xml、tomcat-users.xml、web.xml 文件。server.xml原创 2022-02-25 19:46:42 · 939 阅读 · 0 评论 -
Tomcat卷三---Jasper引擎
Tomcat卷三---Jasper引擎Jasper 简介JSP 编译方式运行时编译编译过程编译结果预编译JSP源码流程JSP编译原理代码分析编译流程Jasper 简介对于基于JSP 的web应用来说,我们可以直接在JSP页面中编写 Java代码,添加第三方的 标签库,以及使用EL表达式。但是无论经过何种形式的处理,最终输出到客户端的都是 标准的HTML页面(包含js ,css…),并不包含任何的java相关的语法。 也就是说, 我 们可以把jsp看做是一种运行在服务端的脚本。 那么服务器是如何将 JS原创 2022-02-25 15:17:23 · 1569 阅读 · 0 评论 -
Tomcat卷二---请求流程源码分析
Tomcat卷二Tomcat 请求处理流程请求流程请求流程源码解析源码研究1.Acceptor.run()2.Poller.run()2.1 Poller.processKey()2.2 AbstractEndpoint.processSocket()3. NioEndpoint.SocketProcessor.doRun()4. AbstractProtocol.ConnectionHandler.process5.AbstractProcessorLight.process()6.Http11Proce原创 2022-02-04 21:48:29 · 686 阅读 · 0 评论 -
Tomcat卷一 ----架构和初始化源码分析
Tomcat卷一本系列主要在于梳理tomcat的整体架构和源码剖析,只挑重点流程进行分析原创 2022-02-04 17:22:39 · 704 阅读 · 0 评论 -
Redis采坑记录
Redis采坑记录redis设置密码redis设置密码 配置文件----requirepass 客户端临时密码设置密码:config set requirepass 123查看密码:config get requirepassredis设置密码原创 2021-12-29 13:41:33 · 618 阅读 · 0 评论 -
Git常用知识点整理
Git学习Git 工作机制Git 和代码托管中心Git 安装Git 常用命令设置用户签名1)基本语法初始化本地库基本语法查看本地库状态再次查看(检测到未追踪的文件)添加暂存区将工作区的文件添加到暂存区查看状态(检测到暂存区有新文件)删除暂存区中的文件提交本地库将暂存区的文件提交到本地库查看状态(没有文件需要提交)查看引用日志信息查看详细的日志信息修改文件(hello.txt)查看状态(检测到工作区有文件被修改)将修改的文件再次添加暂存区查看状态(工作区的修改添加到了暂存区)提交到本地仓库提交到本地库后,再次原创 2021-09-11 13:17:46 · 575 阅读 · 0 评论 -
Redis---NoSQL数据库介绍
NoSQL数据库介绍NoSQL数据库简介技术发展Web1.0时代Web2.0时代解决CPU及内存压力解决IO压力NoSQL数据库NoSQL数据库概述NoSQL适用场景NoSQL不适用场景MemcacheRedisMongoDB行式存储数据库(大数据时代)行式数据库列式数据库HbaseCassandra[kəˈsændrə]图关系型数据库DB-Engines 数据库排名Redis概述应用场景配合关系型数据库做高速缓存多样的数据结构存储持久化数据NoSQL数据库简介技术发展技术的分类:1、解决功能性的原创 2021-08-18 12:58:58 · 333 阅读 · 0 评论 -
Redis6----应用问题解决和新功能预览
应用问题解决和新功能预览缓存穿透问题描述解决方案缓存击穿问题描述解决方案缓存雪崩问题描述解决方案分布式锁问题描述解决方案java代码实现优化之设置锁的过期时间优化之UUID防误删优化之LUA脚本保证删除的原子性总结Redis6.0新功能ACLACL命令1、使用acl list命令展现用户权限列表2、使用acl cat命令3、使用acl whoami命令查看当前用户4、使用acl setuser命令创建和编辑用户ACL(1)ACL规则(2)通过命令创建新用户默认权限(3)设置有用户名、密码、ACL权限、并启原创 2021-08-18 10:46:27 · 194 阅读 · 0 评论 -
Redis--集群
集群问题什么是集群操作步骤删除持久化数据制作6个实例: 6379,6380,6381,6389,6390,6391修改配置redis cluster配置修改修改好redis6379.conf文件,拷贝多个redis.conf文件使用查找替换修改另外5个文件启动6个redis服务将六个节点合成一个集群合体:配置了三台主机,每台主机有一台从机,集群无中心化,每台主机都可以作为集群的入口普通方式登录-c 采用集群策略连接,设置数据会自动切换到相应的写主机通过 cluster nodes 命令查看集群信息redi原创 2021-08-17 22:14:23 · 175 阅读 · 0 评论 -
Redis6---主从复制篇
主从复制篇主从复制是什么能干嘛怎么玩:主从复制1 : 在根目录下创建一个myredis的文件夹步骤2: 复制redis.conf配置文件到文件夹中步骤3:配置一主两从的操作,创建三个配置文件步骤4:在三个配置文件中写入内容步骤5: 启动这三台服务器步骤6:配从(库)不配主(库)步骤7:测试在主机上写,在从机上可以读取数据主机挂掉,重启就行,一切如初从机重启需重设:slaveof 127.0.0.1 6379,可以将配置增加到文件中。永久生效一主二仆薪火相传反客为主复制原理哨兵模式(sentinel)是什么使原创 2021-08-17 21:07:35 · 309 阅读 · 0 评论 -
Redis6--持久化篇
Redis6Redis持久化之RDBRDB是什么备份是如何执行的ForkRDB持久化流程dump.rdb文件配置位置如何触发RDB快照;默认策略,可以进行修改配置文件中默认的快照配置命令save VS bgsaveflushall命令###SNAPSHOTTING快照###Savestop-writes-on-bgsave-errorrdbcompression 压缩文件rdbchecksum 检查完整性rdb的备份rdb的优势rdb的劣势如何停止RDB小总结Redis持久化之AOF(Append Only原创 2021-08-17 18:33:35 · 549 阅读 · 0 评论 -
Redis---事务篇
Redis6Redis的事务定义Multi、Exec、discard命令案例1:组队成功,提交成功案例2:组队阶段报错,提交失败案例3:组队成功,提交有成功有失败情况事务的错误处理事务冲突的问题例子解决办法悲观锁乐观锁乐观锁在Redis中的应用WATCH key [key ...] 命令unwatch 命令Redis事务三特性Redis命令大全秒杀案例秒杀并发模拟超卖和超时问题解决连接超时,通过连接池解决连接池超卖问题利用乐观锁淘汰用户,解决超卖问题关于RedisTemplate的ERR EXEC wit原创 2021-08-17 12:13:22 · 354 阅读 · 0 评论 -
Redis---整合SpringBoot篇
Redis61、引入redis相关依赖2、application.properties配置redis配置3.添加redis配置类4.测试一下RedisTemplate基本使用如下1、引入redis相关依赖<!-- redis的启动器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis<原创 2021-08-16 18:10:21 · 206 阅读 · 0 评论 -
Redis6--Jedis篇
Redis6Redis_Jedis_测试Jedis所需要的依赖连接Redis注意事项Jedis常用操作测试连接测试相关数据类型Key数据类型String数据类型List数据类型set数据类型hash数据类型zset数据类型模拟完成一个手机验证码功能Redis_Jedis_测试Jedis所需要的依赖<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId&原创 2021-08-16 17:50:14 · 525 阅读 · 0 评论 -
Redis6发布订阅及Redis新数据类型
Redis6Redis的发布和订阅什么是发布和订阅Redis的发布和订阅发布订阅命令行实现Redis新数据类型Bitmaps常用命令1、setbit2.实例3. getbit4.实例5.bitcount6. 实例7.bitop8.实例Bitmaps与set对比HyperLogLog----解决基数问题(不重复元素的相关问题)常用命令1、pfadd2、pfcount3、pfmergeGeospatial----地理相关常用命令1、geoadd2、geopos3、geodist4、georadiusRedi原创 2021-08-16 14:43:48 · 297 阅读 · 0 评论 -
Redis6---配置文件篇
Redis6Redis配置文件介绍###Units单位######INCLUDES包含######网络相关配置bindprotected-modePorttcp-backlogtimeouttcp-keepalive###GENERAL通用###daemonizepidfileloglevellogfiledatabases 16###SECURITY安全###设置密码,默认没有密码#### LIMITS限制maxclientsmaxmemorymaxmemory-policymaxmemory-sampl原创 2021-08-16 11:55:38 · 360 阅读 · 0 评论 -
Redis6数据类型篇
Redis6Redis简介二级目录三级目录Redis简介redis是一种高级的key:value存储系统,其中value支持五种数据类型:1.字符串(strings)2.字符串列表(lists)3.字符串集合(sets)4.有序字符串集合(sorted sets)5.哈希(hashes)而关于key,有几个点要提醒大家:1.key不要太长,尽量不要超过1024字节,这不仅消耗内存,而且会降低查找的效率;2.key也不要太短,太短的话,key的可读性会降低;3.在一个项目中,key最好原创 2021-08-16 11:05:23 · 881 阅读 · 37 评论 -
javaweb中四大域对象的生命周期和共享数据范围
原创 2021-07-25 22:39:23 · 285 阅读 · 0 评论 -
web项目中的路径问题
1、相对于网站根目录可以用"/"开始 (根目录是指服务器的根目录,不是你项目的根目录)$.ajax({ url:"/getData.do"})请求的路径是:http://localhost:8080/getData.do“…/”表示页面目录的上一级目录$.ajax({ url:"../getData.do" })请求的路径是:http://localhost:8080/projectname/getData.do3、项目的根路径----设置的项目的虚拟目录$.a...原创 2021-07-25 20:44:40 · 299 阅读 · 0 评论 -
简单记录转发和重定向的区别
WEB-INF里面的资源外部无法访问,因此无法通过重定向访问里面的资源,但是转发可以转发:服务器处理完后转交给另外一个资源,当我们转发一个页面资源时,服务器会给浏览器返回这个页面资源。如果转发给一个servlet资源,那么由当前servlet继续处理请求在重定向情况下,不能共享request对象中保存的数据转发:重定向:...原创 2021-07-25 17:32:24 · 105 阅读 · 0 评论 -
JSON和AJAX知识点整理
JSON和AJAX知识点整理JSON导入json的依赖JavaBean与Json之间的相互转换首先导入Gson的依赖演示:List集合和json相互转换list集合转化为json时,可以直接转,但是json字符串转化为list集合的时候,需要写一个类继承TypeToken<>,并在其泛型里面,填入要转换的list集合类型,具体步骤看下面:json和map相互转换---转换为map集合,和上面步骤一样使用匿名内部类减少创建类带来的资源损耗AJAX-----Jquery方式1.$.ajax({键值对原创 2021-07-22 09:59:43 · 238 阅读 · 1 评论 -
Servlet中的监听器和过滤器相关知识点整理
监听器和过滤器过滤器的概念过滤器的作用过滤器快速入门步骤注解配置方式演示:xml配置演示过滤器的执行流程doFilter方法: 每一次请求被拦截资源时,会执行,执行多次init方法:服务器启动后,会创建Filter对象,然后调用init方法,只执行一次,用于加载资源destroy方法:服务器关闭后,Filter对象被销毁时调用。如果服务器被正常关闭,则会指向destory方法,只执行一次,用于释放资源拦截路径的配置拦截方式的配置----资源被访问的方式注解配置xml配置过滤器链(配置多个过滤器)执行顺序过滤原创 2021-07-14 20:11:32 · 224 阅读 · 0 评论 -
JSP知识点整理
JSP知识点整理概念原理JSP脚本JSP内置对象requestreponseoutout 和 reponse.getWriter()的区别记住上一次访问时间的案例jsp中使用out.write()和out.print()方法出错爆红解决方法概念java服务器端页面一个特殊的页面,其中既可以定义html标签,又可以定义java代码总结: 简化书写原理jsp的本质是Servlet,jsp页面有系统编译成Servlet,Servlet再去响应用户的请求,也就是说jsp其实就是Servlet的一原创 2021-07-12 22:21:44 · 231 阅读 · 0 评论 -
会话技术知识点整理(Cookie和Session)
会话技术会话: 一次会话中包含多次请求和响应功能方式Cookie基础使用步骤修改servlet模板代码,方便编程代码演示Cookie实现原理Cookie细节一次发送多个CookieCookie在浏览器中保存的时间Cookie的持久化存储Cookie能不能存储中文数据Cookie共享问题Cookie的特点和作用案例: 记住上一次访问时间注意: cookie不支持特殊字符,因此需要采用URL编码存储,用URL解码来解析会话: 一次会话中包含多次请求和响应一次会话: 浏览器第一次给服务器资源发送请求,会话建原创 2021-07-12 15:20:39 · 1345 阅读 · 30 评论 -
tomcat和servlet快速入门教程!!!
Tomact快速入门教程tomcat的入门必备知识1.下载:2.安装: 解压压缩包即可3.卸载: 删除目录即可4.启动:5.关闭:6.部署: 静态项目和动态项目将tomcat集成到IDEA中,并且创建JavaEE项目,部署项目三级目录tomcat的入门必备知识1.下载:tomcat官网下载地址2.安装: 解压压缩包即可注意:安装目录建议不要有中文和空格3.卸载: 删除目录即可4.启动: 4.1 bin/startup.bat ,双击运行该文件即可4.2 访问:浏览器输入: http原创 2021-07-11 15:54:07 · 1398 阅读 · 38 评论