Java Web学习笔记
文章平均质量分 95
web(World Wide Web)即全球广域网,也称为万维网,它是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息系统。是建立在Internet上的一种网络服务,为浏览者在Internet上查找和浏览信息提供了图形化的、易于访问的直观界面,其中的文档及超级链接将Inter
GeorgiaStar
世上无难事,只要肯放弃
展开
-
Spring源码分析——一次HTTP请求在Spring中的处理过程
在网上有很多Spring处理请求的流程图,但是都是比较简单的过程,都是围绕的DispatcherServlet进行说明的,这里我们将从一个请求如何进入spring中开始,到返回结果结束进行说明。原创 2021-05-13 21:37:44 · 2718 阅读 · 0 评论 -
Spring源码分析——Bean的注册
背景Spring版本:5.1.14.RELEASE仔细阅读依赖注入(Dependency Injection)框架是如何实现的这篇博文后,我们大致知道了一个DI容器是如何创建bean的。总体来,bean的创建流程分为如下三步:定义化:从xml文件中解析bean的定义(获得BeanDefinition实例),之后创建bean都是通过bean的定义去创建。实例化:实例化的过程是一个创建Bean的过程,即调用Bean的构造函数,单例的Bean放入单例池中。初始化:初始化的过程是一个赋值的过程,即调用B原创 2021-05-12 10:42:38 · 559 阅读 · 0 评论 -
依赖注入(Dependency Injection)框架是如何实现的
DI容器的核心功能一般有三个:配置解析、对象创建和对象生命周期管理转载 2020-11-09 13:49:58 · 2225 阅读 · 0 评论 -
Spring源码分析——Bean的加载
Spring版本:5.1.14.RELEASEBean实例创建过程如下图,Bean的创建过程大部分是在docreateBean()里面完成的。原创 2020-12-03 11:29:24 · 250 阅读 · 1 评论 -
避免缓存穿透的利器之BloomFilter
缓存穿透问题当用户想要查询一个数据,发现缓存中没有,出现缓存未命中,于是转向持久层数据库查询发现也没有,于是本次查询失败,且不会加入缓存。这就会导致,下次再用相同的条件查询时,由于缓存未命中依旧会查数据库,当并发流量很大时,会把DB打垮,这就是缓存穿透。缓存穿透是指查询一个根本不存在的数据,缓存和存储层都没有命中,通常当存储层查不到数据时就不会写入缓存。public Object getItemById(long id) { //从缓存中查 Object item = cache.get(id);原创 2020-07-26 12:59:41 · 539 阅读 · 0 评论 -
Spring容器对默认标签的解析
本文主要研究Spring对配置文件中标签的解析,源码版本:5.2.2.RELEASE。Spring配置文件中的标签中有默认标签和自定义标签两种,标签的解析是在DefaultBeanDefinitionDocumentReader.parseBeanDefinitions函数中进行的,可以看到默认标签与自定义标签有解析是不同的。Spring容器对默认标签的解析先说默认标签的解析过程。默认标签...原创 2020-04-23 19:57:46 · 435 阅读 · 0 评论 -
理解Spring中的事务管理
Spring事务的基本原理Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,Spring是无法提供事务功能的。对于纯JDBC操作数据库,想要用到事务,可以按照以下步骤进行:获取连接 Connection con = DriverManager.getConnection()开启事务con.setAutoCommit(true/false);执行CRUD提交事务/回...转载 2020-03-16 21:42:41 · 3424 阅读 · 0 评论 -
Java Web程序在Tomcat上是如何运行的
一个 JVM 是一个进程,JVM 上跑 Tomcat,Tomcat 上可以部署多个应用。这样的话,每个跑在 Tomcat 上的应用是一个线程吗?如果一个应用 crash 了,其他应用也会crash吗?理解程序运行时的执行环境,直观感受程序是如何运行的,对我们开发和维护软件很有意义。我们以上面这个问题为例,看下 Java Web 程序的运行时环境是什么样的,来梳理下进程、线程、应用、Web 容器、...转载 2020-02-18 18:44:09 · 4845 阅读 · 4 评论 -
ZooKeeper学习笔记及应用场景梳理
官网文档地址:https://zookeeper.apache.org/doc/r3.5.4-beta/zookeeperOver.html概述Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架, 它负责存储和管理大家都关心的数据, 然后接受观察者的注册, 一旦这些数据的状态发生变化, Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做...原创 2020-01-31 16:46:39 · 971 阅读 · 0 评论 -
从一个Logger异常开始梳理Java日志体系
从一个启动异常开始SpringBoot项目在启动时报堆栈溢出,错误如下。Exception in thread "main" java.lang.StackOverflowError at org.apache.logging.log4j.util.StackLocator.getCallerClass(StackLocator.java:108) at org.apache....原创 2020-01-01 11:51:36 · 1072 阅读 · 0 评论 -
使用Spring Boot进行Java EE开发
Spring Boot是Spring社区较新的一个项目。该项目的目的是帮助开发者更容易得创建基于Spring的应用程序和服务,让更多人的人更快的对Spring进行入门体验,让Java开发也能够实现Ruby on Rails那样的生产效率。为Spring生态系统提供了一种固定的、约定优于配置风格的框架。 多年以来,Spring IO平台饱受非议的一点就是大量的XML配置以及复杂的依赖管理。在Spr原创 2017-06-15 17:36:21 · 5024 阅读 · 1 评论 -
Spring及Spring MVC总结
一、Spring概述 Spring是一个分层的Java SE/EE应用一站式的轻量级开源框架,其从持久层、业务层到表现层都拥有相应的支持,几乎为企业应用提供了所需的一切。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。它的核心是IOC和AOP,如下图所示,整个原创 2017-07-09 12:47:43 · 1145 阅读 · 0 评论 -
Spring Boot应用的启动原理
在使用Spring Boot进行Java EE开发一文中,我们体验到了Spring Boot自动配置带来的方便与快捷,但是只有理解了Spring Boot的内部启动原理,才能做到知其所以然。 我们开发任何一个Spring Boot项目,都会用到如下的启动类。@SpringBootApplicationpublic class Application { public static转载 2017-08-19 11:30:58 · 963 阅读 · 0 评论 -
MyBatis中的动态SQL
1、静态SQL与动态SQL 首先,所谓SQL的动态和静态,是指SQL语句在何时被编译和执行,二者都是用在SQL嵌入式编程中的,这里所说的嵌入式是指将SQL语句嵌入在高级语言中,而不是针对于单片机的那种嵌入式编程。 在某种高级语言中,如果嵌入了SQL语句,而这个SQL语句的主体结构已经明确,例如在Java的一段代码中有一个待执行的SQL语句:“select * from t1原创 2017-08-06 11:54:02 · 3030 阅读 · 7 评论 -
Java中的NIO与Netty框架
前言 随着移动互联网的爆发性增长,小明公司的电子商务系统访问量越来越大,由于现有系统是个单体的巨型应用,已经无法满足海量的并发请求,拆分势在必行。 在微服务的大潮之中, 架构师通常会把系统拆分成了多个服务,根据需要部署在多个机器上,这些服务非常灵活,可以随着访问量弹性扩展。 世界上没有免费的午餐, 拆分成多个“微服务”以后虽然增加了弹性,但也带来了一个巨大的挑战:各个服务之间互相调用的开销原创 2017-12-16 12:08:14 · 5839 阅读 · 1 评论 -
从MVC到前后端分离
理解MVC MVC模式早在上个世纪70年代就诞生了,直到今天它依然存在,可见生命力相当之强。MVC模式最早用于Smalltalk语言中,最后在其它许多开发语言中都得到了很好的应用,例如,Java中的Struts、Spring MVC等框架。 MVC是一种经典的设计模式,全名为Model-View-Controller,即模型-视图-控制器。其中,模型是用于封装数据的载体,例如,在Ja...转载 2018-08-11 13:38:37 · 12923 阅读 · 6 评论 -
用消息系统实现分布式事务
从支付宝转账1万块钱到余额宝,这是日常生活的一件普通小事,但作为互联网研发人员的职业病,我就思考支付宝扣除1万之后,如果系统挂掉怎么办,这时余额宝账户并没有增加1万,数据就会出现不一致状况了。 上述场景在各个类型的系统中都能找到相似影子,比如在电商系统中,当有用户下单后,除了在订单表插入一条记录外,对应商品表的这个商品数量必须减1吧,怎么保证?!在搜索广告系统中,当用户点击某广告后,除了在点击事转载 2017-10-01 15:34:01 · 754 阅读 · 0 评论 -
前后端分离架构概述
1、背景       前后端分离已成为互联网项目开发的业界标准使用方式,通过nginx+tomcat的方式(也可以中间加一个nodejs)有效的进行解耦,并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务(多种客户端,例如:浏览器,车载终端,安卓,IOS等等)打下坚实的基础。这原创 2018-08-12 14:16:51 · 232287 阅读 · 70 评论 -
InnoDB对MVCC的实现
1、什么是MVCCMVCC,Multi-Version Concurrency Control,多版本并发控制。MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问。如果有人从数据库中读数据的同时,有另外的人写入数据,有可能读数据的人会看到『半写』或者不一致的数据。有很多种方法来解决这个问题,叫做并发控制方法。最简单的方法,通过加锁,让所有的读者等待写者工作完成,但是...原创 2019-06-09 14:29:34 · 12973 阅读 · 16 评论 -
Spring在SingleTon模式下的线程安全
1、有状态的bean与无状态的bean有状态bean:每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即有状态;一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束。即每个用户最初都会得到一个初始的bean。无状态bean:bean一旦实例化就被加进会话池中,各个用户都可以共用。即使用户已经消亡,bean的生命期也不一定结束,它可能依然存在于会话池中,供其他用...原创 2019-09-15 12:31:09 · 4837 阅读 · 1 评论 -
JavaScript开发的45个经典技巧
1 前言JavaScript是世界上最流行的脚本语言,因为你在电脑、手机、平板上浏览的所有的网页,以及无数基于HTML5的手机App,交互逻辑都是由JavaScript驱动的。简单地说,JavaScript是一种运行在浏览器中的解释型的编程语言。那么问题来了,为什么我们要学JavaScript?尤其是当你已经掌握了某些其他编程语言如Java、C++的情况下。简单粗暴的回答就是:因为你没有选择。在We转载 2017-04-07 12:42:24 · 3033 阅读 · 0 评论 -
理解JavaScript中的函数
本文旨在提供web开发人员必须了解的所有JavaScript函数的基本知识。函数于软件开发者而言并不是什么奇幻世界。如果你的日常活动涉及到编码,哪怕是一点点,那么在一天结束的时候,你一定创建/修改了一个或多个函数。简而言之函数只不过是一组执行某个操作的语句。函数可能会有一些输入参数(在函数体中使用),并在执行后返回值。 JavaScript函数也具有这些特性,但它们不仅仅是常规函数。JavaSc转载 2017-06-26 23:06:19 · 522 阅读 · 0 评论 -
Maven简介及入门
1、什么是Maven Maven是跨平台的项目管理工具。主要服务于基于Java平台的项目构建,项目管理和项目信息管理。那么怎么样才算是理想的项目构建呢?理想的项目构建就是必须具备高度自动化,跨平台,可重用的组件,标准化这些特性。 所谓的项目构建就是对项目进行清理、编译、测试、报告、打包、部署等一系列的过程称为项目的构建如下图所示: 如今我们构建一个项目需原创 2017-04-27 17:17:13 · 1170 阅读 · 0 评论 -
JavaMail邮件发送解析
电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等。电子邮件在网络中传输和网页一样需要遵从特定的协议,常用的电子邮件协议包括 SMTP,POP3,IMAP。其中邮件的创建和发送只需要用到 SMTP协议,所有本文也只会涉及到SMTP协议。SMTP 是 Simple Mail Transfer Protocol 的简称,即简单邮件传输协议。原创 2017-06-13 12:04:03 · 950 阅读 · 0 评论 -
Jsp理论与实践综述
J2EE是一套规范,而Servlet/Jsp是J2EE规范的一部分,是Tomcat的主要实现部分。在最初的应用实践中,当用户向指定Servlet发送请求时,Servlet利用输出流动态生成HTML页面,这导致Servlet开发效率极为低下。JSP技术通过实现普通静态HTML和动态部分混合编码,使得逻辑内容与外观相分离,大大简化了表示层的实现,提高了开发效率。本文以JSP的本质是Servlet为主线转载 2017-03-29 17:02:32 · 1041 阅读 · 0 评论 -
Servlet过滤器与SpringMVC拦截器
Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter。通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截。简单说,就是可以实现web容器对某资源的访问前截获进行相关的处理,还可以在某资源向web容器返回响应前进行截获进行处理。Servlet过滤器和SpringM原创 2017-03-30 22:09:02 · 5319 阅读 · 0 评论 -
Servlet理论与实践综述
Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础。本文首先从请求/响应架构应用的大背景谈起 Servlet 的由来,明确 Servlet 的产生动机,并揭示了 Servlet 的本质以及其在标准MVC模式中所扮演的角色。紧接着,给出了 Servlet族的继承结构,并对族内的接口和抽象类作了进一步的介绍,并给出开发一个Servlet程序转载 2017-03-28 22:23:12 · 523 阅读 · 0 评论 -
J2EE规范
在许多企业级应用中,例如数据库连接、邮件服务、事务处理等都是一些通用企业需求模块,这些模块如果每次在开发中都由开发人员来完成的话,将会造成开发周期长和代码可靠性差等问题。于是许多大公司开发了自己的通用模块服务。但其与用户的沟通都各有不同,从而导致用户无法将各个公司不同的中间件组装在一块为自己服务。从而产生瓶颈。于是提出标准的概念。其实J2EE就是基于Java技术的一系列标准。J2EE 是由 S转载 2017-03-24 15:14:51 · 576 阅读 · 0 评论 -
JavaScript严格模式及其使用
1 前言 ECMAScript5中引入的严格模式,通过让JavaScript运行环境对一些开发过程中最常见和不易发现的错误做出和当前不同的处理,来让开发者拥有一个”更好”的JavaScript语言。很长一段时间内,由于只有Firefox支持严格模式,我曾对严格模式表示怀疑。但到了今天,所有主流的浏览器都在他们的最新版本中支持了严格模式(包括IE10,Opera12和Android4,IOS5),是原创 2017-04-10 17:01:27 · 968 阅读 · 0 评论 -
JavaScript简介及组成
1 JavaScript历史 要了解JavaScript,我们首先要回顾一下JavaScript的诞生。 在上个世纪的1995年,当时的网景公司正凭借其Navigator浏览器成为Web时代开启时最著名的第一代互联网公司。由于网景公司希望能在静态HTML页面上添加一些动态效果,于是叫Brendan Eich这哥们在两周之内设计出了JavaScript语言。你没看错,这哥们只用了10天时间。原创 2017-04-08 10:52:50 · 4742 阅读 · 0 评论 -
JavaScript变量作用域
变量作用域是程序中定义这个变量的区域。先贴一段代码,如果读者对代码的输出并不感到困惑就不用往下面读了。/* 代码1 */ var scope = "global "; function checkScope() { var scope = "local "; function childCheck() { var scope转载 2017-04-08 11:37:35 · 515 阅读 · 0 评论 -
Jsp中文编码问题(上)
摘要: 本文首先介绍了一个JSP的源文件执行过程,即需要经过三个阶段,两次编码,才能完成一次完整的输出。特别需要注意的是,在这个过程中,编码问题贯穿始终。我们知道在JSP/Servlet中,主要有以下四种方式可以设置编码,即 pageEncoding、contentType、request.setCharacterEncoding 和 response.setCharacterEncoding,转载 2017-03-30 21:13:21 · 647 阅读 · 0 评论 -
Servlet过滤器与封装器
在Servlet容器调用某个Servlet的service()方法前,Servlet并不会知道有请求的到来,而在Servlet的service()方法运行之后,容器真正对浏览器进行HTTP响应之前,浏览器也不会知道Servlet真正的响应是什么。过滤器正如其名称所示,是介于Servlet之前,可拦截过滤浏览器对Servlet的请求,也可以改变Servlet对浏览器的响应。本文将介绍过滤器的运用,了解原创 2017-05-25 11:38:11 · 1175 阅读 · 0 评论 -
JSON的序列化与反序列化及其在前后台交互中的应用
1、什么是JSON JSON是JavaScript Object Notation的缩写,它是一种数据交换格式。 在JSON出现之前,大家一直用XML来传递数据。因为XML是一种纯文本格式,所以它适合在网络上交换数据。XML本身不算复杂,但是,加上DTD、XSD、XPath、XSLT等一大堆复杂的规范以后,任何正常的软件开发人员碰到XML都会感觉头大了,最后大家发现,即使你努力钻研几个月,也未原创 2017-05-27 19:48:40 · 28436 阅读 · 5 评论 -
对IOC和DI的通俗理解
学习过spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC 、DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解。首先要分享的一位技术牛人对Spring框架的IOC的理解,写得非常通俗易懂,以下内容全部来自原文,原转载 2017-02-19 10:41:56 · 30122 阅读 · 7 评论 -
Web容器安全管理(下)——容器基本身份验证
为了更好地了解并实现Web容器的安全管理,笔者以两篇博客的篇幅来介绍,即:《Web容器安全管理(上)——Java EE的安全概念》 和 《Web容器安全管理(下)——容器基本身份验证》。上篇博客已经介绍了Java EE安全的基本概念,打下了基础。在本文,我们详述Web容器提供的基本身份验证方式。1、容器声明式基本身份验证 假设你已经开发好了应用程序,现在想针对几个页面进行保护,只有通过身份验证且原创 2017-06-12 11:51:32 · 2706 阅读 · 0 评论 -
Servlet异步处理特性分析与实践
众所周知,Servlet 3.0标准已经发布了很长一段时间,相较于之前的2.5版的标准,新标准增加了很多特性,比如说以注解形式配置Servlet、web.xml片段、异步处理支持、文件上传支持等。虽然说现在的很多Java Web项目并不会直接使用Servlet进行开发,而是通过如Spring MVC、Struts2等框架来实现,不过这些Java Web框架本质上还是基于传统的JSP与Servlet进原创 2017-06-20 20:47:42 · 2602 阅读 · 1 评论 -
Web容器安全管理(上)——Java EE的安全概念
每个人都知道安全(Security)很重要,特别是在应用程序发布到网络上之后,安全就更为重要了,但要实现安全管理,问题却很多。原因之一是安全观念及意识不是朝夕即可养成;二是实现时的各种疏忽。 到目前为止,Web容器已经实现了许多功能,而在安全这方面,容器也提供了机制来满足安全的基本需求,当没办法做得更好时,适当地使用容器进行安全管理不仅方便,而且有一定的防护效果。 为了更好地了解并实现Web原创 2017-06-11 12:01:09 · 1769 阅读 · 0 评论 -
Web前端性能优化的10点建议
摘要: 一般说来Web前端指网站业务逻辑之前的部分,包括浏览器加载、网站视图模型、图片服务、CDN服务等,主要优化手段有优化浏览器访问、使用反向代理、CDN等。1. 减少HTTP请求 在浏览器(客户端)和服务器发生通信时,就已经消耗了大量的时间,尤其是在网络情况比较糟糕的时候,这个问题尤其的突出。 一个正常HTTP请求的流程简述:如在浏览器中输入”www.xxxxxx.com”并按下原创 2017-04-06 17:28:24 · 6922 阅读 · 0 评论 -
Spring中bean的作用域与生命周期
在Spring中,那些组成应用程序的主体及由Spring IoC容器所管理的对象,被称之为bean。简单地讲,bean就是由IoC容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象没有什么区别了。而bean的定义以及bean相互间的依赖关系将通过配置元数据来描述。 Spring中的bean默认都是单例的,这些单例Bean在多线程程序下如何保证线程安全呢?例如对于Web应用来原创 2017-06-17 22:29:18 · 128986 阅读 · 15 评论