- 博客(40)
- 收藏
- 关注
原创 MyBatis日志工厂
MyBatis提供了多种日志的具体实现,可以在配置文件中设置1. STDOUT_LOGGING标准日志输出<settings> <!--标准的日志工厂实现,只需设置,不需要额外操作,比如导包--> <setting name="logImpl" value="STDOUT_LOGGING"/></settings>...
2022-05-01 15:54:47
342
原创 MyBatis核心配置文件的配置解析
1. 属性properties(1)在MyBatis核心配置文件mybatis-config.xml中可以配置name-value形式的属性<properties> <property name="name1" value="value1"></property></properties>(2)在MyBatis核心配置文件mybatis-config.xml中可以引入外部properties配置文件<properties r
2022-04-29 16:17:48
266
原创 增删改查实现
1. UserMapper.javapackage com.jing.dao;import com.jing.pojo.User;import java.util.List;public interface UserMapper { // 获取所有用户 List<User> getUserList(); // 根据id查询用户 User getUserById(int id); // 新增用户 int addUser(Use
2022-04-27 17:17:50
250
原创 第一个MyBatis程序
什么是MyBatisMyBatis是一种持久层框架,将数据持久化到数据库。 它支持自定义SQL、存储过程以及高级映射。 利用MyBatis的配置文件几乎可以免除所有JDBC代码以及设置参数和获取结果集的工作。 遵照MyBatis的约定以及XML配置文件或者注解,可以映射原始类型、接口和数据库中的记录(实体类/POJO)第一个MyBatis程序文件的目录结构1. 搭建环境---导包 <!--导入依赖--> <dependencies>..
2022-04-27 16:16:16
1179
原创 JDBC操作事务
1. 事务(1) 概念一系列的SQL语句构成一个事务,即开始事务到事务提交之前的所有语句(2)事务的四大特性(ACID)a. 原子性(Atomicity):一个事务中的所有操作要么都执行成功,要么都失败,都失败的效果就是语句未执行,其实是通过自动回滚实现的。b. 一致性(Consistency):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。c. 隔离性(Isolation):多个进程(并发事务)对数据库的操作互不干扰。事务之间的隔离分四个不同的级别:(A事务会出现的
2022-04-16 18:02:11
618
原创 SQL注入以及使用PreparedStatement解决SQL注入
SQL注入SQL注入是指web应用没有检查用户输入数据的合法性,进而无法阻止用户的非法输入,用户通过输入在SQL查询语句中添加额外SQL语句,达到自己查询更多数据的目的。使用PreparedStatement防止SQL注入在SQL语句中使用占位符?来代替用户输入的值,然后再按顺序为占位符赋值 PreparedStatement会把所有用来替换占位符的都当成字符串处理package com.jing.jdbc;import com.jing.utils.JDBCUtils;import
2022-04-15 23:44:07
639
原创 对JDBC的理解
1. 概念JDBC(Java Database Connection):java数据库连接。 目前常见的关系型数据库管理系统有很多种,包括MySQL、Oracle、SQLserver等等。 数据库管理系统,顾名思义是用来管理数据库的,将数据库中的数据以表的形式存储。 以MySQL为例,安装完MySQL,可以通过控制台连接数据库、编写SQL语句对数据库进行增删改查。 包括web应用在内的各种需要与数据打交道的应用,都会涉及到数据的增删改查,也就是要与数据库管理系统,比如MySQL,打交道。此时,希
2022-04-15 19:48:05
1659
原创 过滤器Filter
Filter的用处Filter等价于Servlet,都是用来在后端处理请求的,只不过通常是用来实现多个servlet共有的操作,即将多个servlet中共有的操作抽取出来放到filter里执行。比如设置编码格式,权限验证,登录验证。 过滤器可以降低代码的冗余度 过滤的操作可以针对前端的请求,也可以针对后端返回的响应。过滤示意图Filter的使用(设置编码格式)1. 导入javax.servlet.Filter类import javax.servlet.Filter2. 编写
2022-04-14 22:23:32
280
原创 JSP9大内置对象
内置对象pageContext:存东西(setAttribute),保存的数据只在当前页面中有效 request:存东西(setAttribute),保存的数据只在一次请求中有效,请求转发也会携带(请求一次,请求不变) session:存东西(setAttribute),保存的数据在一次会话中有效,从打开浏览器到关闭浏览器(其实并不严格,同一个用户的sessionID对应的cookie没被删除,那么服务器中对应的session就一直是一个) application:存东西(setAttribut.
2022-04-13 17:30:06
149
原创 JSP基础语法
JSP作为一种技术,肯定也有自己的语法规则。JSP表达式 用来在客户端展示变量的值或者表达式的结果 在对应的java文件中的位置:_jspService方法中 <%-- JSP表达式:用来将程序的输出展示在客户端 <%= 变量或者表达式%>--%><%= new java.util.Date()%>JSP脚本片段 用来在JSP中嵌入java代码 在对应的java文件中的位置:_jspService方法中 <%-
2022-01-08 10:01:53
62
原创 JSP简单了解
众所周知,JSP技术已经过时。但是作为java新手,在学完servlet之后,可以趁热打铁,继续了解一下JSP的原理和作用,但无需深入学习。在servlet的基础上再继续了解JSP无需花费太多时间,所以不必纠结“是否有学习JSP的必要”。理解为什么JSP技术为什么出现JSP(Java Server Page),即java服务器端页面。与servlet一样,用于开发动态web页面,是一种部署在服务器端的动态Web资源。可以通过URL进行请求,比如:htttp://localhost:8...
2021-12-06 22:19:53
547
原创 Cookie和Session
会话会话:用户打开浏览器,访问了一系列Web资源之后,关闭浏览器,在为了解cookie和session之前,这个过程可以称为一次会话。 有状态会话:浏览器访问某个服务器上的资源,服务器会产生访问记录,下次再访问这个服务器上的资源时,服务器知道之前访问过。 HTTP协议是无状态的,所以需要Cookie和Session技术来保存会话信息,跟踪会话。 会话跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session,二者是并列关系,并不只有session代表会话
2021-11-30 10:26:14
920
原创 转发和重定向的区别
请求转发:浏览器只发送一次请求,URL不变。 实现原理:由ServletContext在后端实现,会去调用/error对应的servlet的doGet/doPost方法。(通过方法调用实现) this.getServletContext().getRequestDispatcher("/error").forward(req,resp);重定向:浏览器发送两次请求,URL改变。 index.jsp:提交之后,访问/login(Web.xml中映射为RedirectServlet)
2021-11-26 16:32:55
598
原创 ServletContext
什么是ServletContextWeb容器在启动时,会为其上部署的每个Web应用创建一个ServletContext对象。 ServletContext对象凌驾于该应用的所有Servlet之上,使用范围,整个Web应用。 Web容器启动时创建,关闭时销毁。ServletContext的作用1. 共享数据一个Web应用当中的不同Servlet之间可能会用到相同的数据,可以将其保存到ServletContext对象之中(key-value形式),其他Servlet可以根据k...
2021-11-22 12:01:15
194
原创 HelloServlet
什么是ServletServlet是一种技术,用来开发动态Web资源; 所谓动态资源,就是不同人在不同时间请求到的页面内容是不相同的,可以通过jdbc跟数据库交互,获取定制化数据。这种生成动态Web页面的工作就由Servlet负责。此时就需要将Servlet映射成URL请求地址,以供客户端访问,具体实现见下文。 静态资源,展示给每个人的内容都是相同的,是写死在资源文件系统中的(/webapp文件夹下,比如/webapp/header.html),不需要Servlet的参与。资源请求路径:http
2021-11-19 17:33:37
382
原创 常见的服务器响应状态码
1. 200:请求响应成功2. 3xx:请求重定向,服务器返回一个新的URL,客户端重新向这个URL发送请求。此时的状态码是对新请求的响应。3. 4xx:找不到资源,web应用中没有请求的资源,常见的是404。5. 5xx:服务器端出现错误。...
2021-11-18 17:35:34
1508
原创 域名解析过程
URL解析https://www.tencent.com/index.html:URL,统一资源定位符,用于定位网上的资源。 index.html:资源的相对路径,服务器默认访问的页面 com:一级域名 tencent.com:二级域名; www:主机名,一台具体的机器。命名习惯:网站(www),博客(blog),邮箱(mail)等等。 www.tencent.com:网站名:服务器名.域名 https:服务协议 为什么要用域名一个上线的应用,使用IP地址访...
2021-11-18 11:47:00
2618
原创 Tomcat服务器
Tomcat简介1. 下载压缩包,解压2. 无需安装,启动即可Tomcat文件结构B/S架构:浏览器/服务器,想要通过浏览器访问部署在服务器(Tomcat)上的资源(静态网页、动态网页、图片、文件等等),一个大前提就是服务器必须开启,另外一个前提就是应用必须启动。bin文件夹服务器启动成功 Tomcat启动成功后,就可以通过IP地址+端口的形式访问到此服务器上的WEB应用(网页资源)。ip地址+端口号 在我们本机查看...
2021-11-18 10:31:12
431
原创 Java之反射
动态语言:在运行时可以改变其结构的语言,例如新的函数、对象、甚至代码可以被引进等。比如C#,JavaScript,Python等等。静态语言:运行时结构不可变的语言。比如,C、C++、Javajava虽然是静态语言,但是我们可以称其为“准动态语言”,java具有一定的动态性,我们可以通过反射机制获得类似于动态语言的特性。Class对象,即Class类的一个实例对象,是编译得到的Class文件经过类加载器加载进内存(方法区)之后的存在形式。...
2021-11-16 14:55:57
236
原创 java类加载器
三种类加载器+双亲委派机制:实现java类的正确加载package com.jing.reflection;public class Test07 { public static void main(String[] args) throws ClassNotFoundException { // 1. 系统类加载器AppClassLoader ClassLoader systemClassLoader = ClassLoader.getSyste.
2021-11-15 22:46:49
624
原创 静态代码块和静态变量的初始化(<clinit>()方法执行)
类加载过程 类加载过程中的“类加载”是一个整体的词,主要包括以下三个阶段:加载:通过类加载器经Class文件加载进内存,提取出类的元数据存储在方法区当中,在堆当中生成Class对象。 连接:将Java类的二进制代码合并到JVM的运行状态之中的过程。 验证:确保类的信息符合JVM规范,没有危害安全的问题 准备:为静态变量分配内存,并初始化默认值(方法区) 解析:将虚拟机常量池中符号引用转为直接引用 初始化:执行类构造器<clinit>()方法。 类构造器方...
2021-11-15 21:19:51
1409
原创 Class对象存储在Java堆中
在JDK1.8完全废除永久代之前的JDK版本中,方法区是一个逻辑分区,实际是java堆的一部分,但是有Non-heap的标记,以便区分。 众所周知, java中new处的对象存放在java堆中,而对象的引用存放在虚拟机栈中。 Java中的Class也是一个类,所以Class对象也存放在堆当中,存放在方法区当中的是Class对象的引用...
2021-11-15 18:02:34
7251
7
原创 AOP使用方式
AOPAOP(Aspect Oriented Programming),面向切面编程。原本的面向对象编程(OOP)是将一类实体的共有行为抽象成一个公共的类,共有行为既包含核心功能,又包含一些公共行为(比如,日志、权限、缓存、同步、事务等)。这些公共行为重复出现在每个类中,造成了大量的冗余,也不利用各个模块的重用。 面向切面编程(AOP)将这些公共行为抽取出来,每一种公共行为(横切关注点)可以配置成一个“通知(advice)”,利用动...
2021-11-13 11:42:17
636
原创 设计模式之代理模式
经过一天的学习和思考,终于理解了官方文档中的InvocationHandler的解释,网上的资料都将其翻译为【proxy代理实例的调用】【处理程序】【实现的一个接口】,这里的调用是一个名词,我最终的理解是,InvocationHandler这个接口的 实现类 是 处理 proxy这个动态创建的代理对象调用的方法 的程序,由用户编写,具体见文中红字,结合例子程序理解。代理模式 1. 代理模式:给某一个对象提供一个代理对象,并由代理对象控制对原有对象的引用。 ...
2021-11-12 17:33:32
389
原创 使用Java方式配置Spring
通过Java的方式编写一个配置类(用于配置的类,在类上加@Configuration),可以做到完全脱离XML配置文件。主要有两种实现方式:@Configuration+@Bean User类:可以通过注解为属性赋值 public class User { @Value("YuJing") private String name; @Autowired private Cat cat; public String getName() {...
2021-11-11 14:50:15
481
原创 自动装配(@Autowired和@Resource的区别)
程序举例(一个人有两个宠物)Cat类 package com.jing.pojo;public class Cat { public void shout(){ System.out.println("喵"); }} Dog类 package com.jing.pojo;public class Dog { public void shout(){ System.out.println("汪"); }}
2021-11-10 22:58:30
269
原创 依赖注入(DI)的三种方式
个人对依赖注入的理解是:为bean所代表的对象的属性赋值 。对象的属性有多种类型,主要包括基本数据类型、String、引用类型、集合类型、属性类型、空字符串以及空值null。在通过配置文件进行依赖注入时,主要有以下三种配置方式:1. 有参构造器注入这种方式的前提是,在bean所对应的类中显式定义有参构造函数,涉及到的属性才能够使用<constructor-arg/>标签进行赋值。具体参照链接Spring IOC(控制反转)_鲸鱼-D的博客-CSDN博客中I...
2021-11-10 18:38:35
3725
原创 Spring IOC(控制反转)
概要1. 简介Spring框架即以interface21框架为基础,经过重新设计,并不断丰富其内涵,于2004年3月24日,发布了1.0正式版。 Rod Johnson,Spring Framework创始人,著名作者。很难想象Rod Johnson的学历,真的让好多人大吃一惊,他说悉尼大学的博士,然而他的专业不是计算机,而是音乐学 官网:Spring Framework 下载地址:JFrog github地址:GitHub - spring-projects/spring-framewor
2021-11-09 18:08:24
405
原创 虚拟机执行子系统
书中该部分内容主要介绍Java程序是如何存储的、如何载入的、以及如何执行的这三个问题。本文章按照这个顺序简单记载一些重要的内容。类文件结构类文件(Class文件)是Java虚拟机执行引擎的数据入口。本章主要介绍的是Class文件结构中各个组成部分、以及每部分的定义、数据结构和使用方法。Class文件也称字节码文件,由源代码经编译器编译获得。存放的都是编译期间可以确定的数据。 字节:1Byte=8bit。Class文件是由一系列类似于 3A C8...(十六进制)...
2021-11-03 12:17:53
239
原创 垃圾收集器与内存分配策略
概述Java内存区域可以分为两类:一类是线程独享的区域,包括虚拟机栈、本地方法栈和程序计数器。这类内存随线程而生,随线程而死。内存的分配在编译器就看可确定,内存的回收随着线程结束而自然释放。无需额外的垃圾收集器干涉。 另一类是线程共享的区域,即Java堆和方法区。分配和回收都是动态,在运行期间才知道要创建哪些对象,在运行期间才会触发GC。所以,内存分配和垃圾收集针对的是Java堆这部分内存。垃圾收集垃圾收集要做的事情可以简单总结为两个步骤:确定哪些内存需要...
2021-10-27 10:38:07
124
原创 Java运行时常量池
概述 1.常量池在内存中的位置: 在JDK1.6中,方法区是以永久代的方式实现(HotSpot),常量池是方法区的一部分。 在JDK1.7中,方法区合并到堆内存中,常量池可以说在堆内存中。 在JDK8中,方法区又被剥离出来,只不过实现方式不是永久代,此时的方法区叫元数据区,常量池也就在元数据区。 2. 常量池的概念以及作用通常来讲,所有变量,包括基本类型和引用类型,他们都存在虚拟机栈中,包括变量类型、变量名称、和变量值。对于基本类型来说,值就是具...
2021-10-23 22:17:21
6229
原创 实战:OutOfMemoryError异常之 虚拟机栈和本地方法栈溢出
虚拟机参数虚拟机栈:-Xss128k,表示虚拟机栈最大内存为128k。 本地方法栈:-Xoss128k,表示本地方法栈最大内存为128k。由于在HotSpot虚拟机中不区分虚拟机栈和本地方法栈,所以栈容量只由-Xss参数设定。Java虚拟机规范中描述的两种异常如果线程请求栈深度大于虚拟机所允许最大深度(没有内存供继续分配),将抛出StackOverflowError异常。 如果虚拟机在扩展栈时无法申请到足够内存,将抛出OutOfMemoryError异常。单线程SOF测试...
2021-10-23 16:16:35
418
原创 实战:OutOfMemoryError异常之 Java堆溢出
Java堆用于存储对象实例,只要不断创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清楚这些对象,那么在对象数量到达最大堆的容量限制后就会产生内存溢出异常。代码清单public class HeapOOM { static class OOMObject{ } public static void main(String[] args) { List<OOMObject> list = new Array...
2021-10-23 11:11:16
552
原创 Java程序运行时数据区域
概述 java程序员虽然把内存控制的权利全权交给Java虚拟机,但是,当出现内存泄漏和溢出方面的问题时,如果不了解虚拟机是怎样使用内存的,那么排查错误将会成为一项异常艰难的任务。 java程序运行时的数据区域(java虚拟机管理的内存)分为多个线程共享内存和线程私有内存。所有线程共享的数据区域:依赖虚拟机进程的启动和结束而建立和销毁。细分为:堆和方法区(Java 8之后是元空间)。 线程私有的数据区域:依赖用户线程的启动和结束而建立和销毁。细分为:虚拟机栈、本地方法...
2021-10-22 21:13:19
166
原创 Java程序的执行方式
1. java程序的执行方式:编译+解释 混合,在编译基础上进行解释运行的语言。编译:将源代码一次性转换成目标代码的过程。编译器:.java→.class 编译只执行一次,转换成的目标代码影响运行速度,所以编译器一般都集成很多优化技术,使生成的目标代码具备更好的执行效率。 解释:将源代码逐条转换成目标代码并逐条运行的过程。解释器。python是解释执行2. 高级语言分为静态语言和脚本语言静态语言:使用编译执行的编程语言,有了目标语言之后,不再需要编译器和源代码就可执行。 脚本语言:使用
2021-10-22 10:00:08
3329
原创 java内存模型
重排序java编译器和java虚拟机会在编译或者执行程序时改变程序的执行顺序以优化程序的性能。 重排序的语句是没有依赖的语句。 单线程的程序一般不会因重排序导致程序出现运行错误,因为有很多规范对其做出了限制。 但是,在多线程程序中,有时会发生明显是由于重排序导致的运行错误。所以在编写多线程程序时,我们要注意多个线程对共享变量的访问,对其加以限制,比如synchronized或者volatile。可见性线程通常是将共享内存中的实例复制到独有的缓存中,对该实例的更改不能及时更新到共享内存中...
2021-10-21 21:32:16
62
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人