- 博客(45)
- 收藏
- 关注
原创 Java 后端提供验证码图片
代码如下 import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import ja
2020-07-08 11:07:18
461
原创 Java文件下载提示保存而不是直接在浏览器打开,并解决文件中文名乱码的问题
文件下载提示保存而不是直接在浏览器打开 使用响应头设置资源的打开方式:content-disposition:attachment;filename=xxx 代码如下: @WebServlet("/downloadServlet") public class DownloadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response..
2020-07-08 10:09:17
855
原创 日志框架
SpringBoot:底层是Spring框架,Spring框架默认是用JCL;SpringBoot选用SLF4j和logback 日志门面:SLF4J;日志实现:Logback SLF4j使用1、如何在系统中使用SLF4jhttps://www.slf4j.org 以后开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法;给系统里面导入slf4j的jar...
2019-08-23 11:48:24
200
原创 SpringBoot修改tomcat参数支持请求特殊符号 解决java.lang.IllegalArgumentException: Invalid character found in the
解决java.lang.IllegalArgumentException: Invalid character found in the request target. 比如GET请求中,key,value中带有特殊符号,请求会报错,见如下URL: http://xxx.xxx.xxx:8080/aaa?key1=val1&a.[].id=123&b=a[1] 进入bo...
2019-08-20 17:51:46
2393
2
原创 爬虫基础 根据URL得到数据
基础maven依赖 <dependencies> <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --> <dependency> <groupId>org.apache.httpco...
2019-08-18 23:28:06
361
原创 项目如何不挂断运行,即当账户退出或终端关闭时,程序仍然运行
把打包好的jar包通过Git Bash上传至公网服务器以后项目运行可以使用Xshell工具连接Linux系统,通过运行java -jar+文件名 命令即可以完成启动。 若需要在公网上如何不挂断开启程序,可以使用nohup java -jar +文件名& 命令,其中nohup意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行;&代表在后台运行。 若想关闭程序,可...
2019-08-06 15:55:26
850
原创 XML
概念:Extensible Markup Language 可扩展标记语言可扩展:标签都是自定义的。 <user> <student>* 功能* 存储数据1. 配置文件2. 在网络中传输* xml与html的区别1. xml标签都是自定义的,html标签是预定义。...
2019-08-05 22:30:23
194
原创 SQL函数
SQL函数 当我们学习编程语言的时候,也会遇到函数。函数的作用是什么呢?它可以把我们经常使用的代码封装起来,需要的时候直接调用即可。这样既提高了代码效率,又提高了可维护性。 SQL中的函数一般是在数据上执行的,可以很方便地转换和处理数据。一般来说,当我们从数据表中检索出 数据之后,就可以进一步对这些数据进行操作,得到更有意义的结果,比如返回指定条件的函数,或者求某 个字段的平均值等。 常用的...
2019-07-30 14:55:53
228
原创 MyBatis 中 @Param 注解的四种使用场景
即使 MyBatis 方法只有一个参数,也可能会用到 @Param 注解。 有的时候一个参数明明不用添加 @Param 注解,有的时候,却需要添加,不添加会报错。 第一种:方法有多个参数,需要 @Param 注解 如下: @Mapper public interface UserMapper { Integer insert ( @Param ("username") Str...
2019-07-24 23:55:56
556
原创 注解
注解: * 概念:说明程序的。给计算机看的 * 注释:用文字描述程序的。给程序员看的 * 定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。 * 概念描述: * JDK1.5之后的新特性 * 说明程序...
2019-07-23 14:09:25
312
原创 Junit单元测试
测试分类: 1. 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值。 2. 白盒测试:需要写代码的。关注程序具体的执行流程。 Junit使用:白盒测试 步骤: 1. 定义一个测试类(测试用例) 建议: 测试类名:被测试的类名Test CalculatorTest 包名:xxx.xxx.xx.test cn.itcast.test 2. 定义测试方法:可以独...
2019-07-23 14:08:07
235
原创 反射
类加载器 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。 加载 就是指将class文件读入内存,并为之创建一个Class对象。 任何类被使用时系统都会建立一个Class对象 连接 验证 是否有正确的内部结构,并和其他类协调一致 准备 负责为类的静态成员分配内存,并设置默认初始化值 解析 将类的二进制数据中的符号...
2019-07-23 14:04:40
226
原创 Stream流 与 方法引用
在Java 8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream概念,用于解决已有集合类库既有的弊端。 Java 8的Lambda让我们可以更加专注于做什么(What),而不是怎么做(How),这点此前已经结合内部类进行 了对比说明。现在,我们仔细体会一下上例代码,可以发现: for循环的语法就是“怎么做” for循环的循环体才是“做什么” 为什么使用循环?因为要进行遍历...
2019-07-23 13:48:06
248
原创 函数式接口
jdk提供我们的常用函数式接口: Supplier; Consumner; Predicate; Function; 02_函数式接口的概念&函数式接口的定义 概念: 有且仅有一个抽象方法的接口; @FunctionalInterface 告诉编译器,我当前这个接口是函数式接口;(编译器就会检测当前接口是不是有且仅有一个抽象方法) 03_函数式接口的使用 l...
2019-07-23 13:46:26
212
原创 Lambda表达式
函数式编程思想概述 在数学中,函数就是有输入量、输出量的一套计算方案,也就是“拿什么东西做什么事情”。相对而言,面向对象过分强调“必须通过对象的形式来做事情”,而函数式思想则尽量忽略面向对象的复杂语法——强调做什么,而不是以什么形式做。 面向对象的思想: 做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情. 函数式编程思想: 只要能获取到结果,谁去做的,怎么做的都不...
2019-07-23 13:37:57
272
原创 网络编程
软件结构 C/S结构:全称为Client/Server结构,是指客户端和服务器结构。常见程序有QQ、迅雷等软件。 即Client/Server(客户机/服务器) 结构,是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,需要安装客户端才可进行管理操作。 客户端和服务器端的程序不同,用户的程序主要在客户端,服务器端主要提供数据管理、...
2019-07-22 22:57:13
377
原创 IO流(十) commons-IO
FilenameUtils 这个工具类是用来处理文件名(译者注:包含文件路径)的,他可以轻松解决不同操作系统文件名称规范不同的问题 常用方法: getExtension(String path):获取文件的扩展名; getName():获取文件名; isExtension(String fileName,String ext):判断fileName是否是ext后缀名; FileUtils...
2019-07-22 22:43:14
182
原创 IO流(九) 打印流
打印流的概述 打印流添加输出数据的功能,使它们能够方便地打印各种数据值表示形式. java.io.PrintStream:打印流 PrintStream 为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。 PrintStream特点: 1.只负责数据的输出,不负责数据的读取 2.与其他输出流不同,PrintStream 永远不会抛出 IOExcep...
2019-07-22 22:41:18
195
原创 IO流(八) 序列化流与反序列化流
用于从流中读取对象的操作流 ObjectInputStream 称为 反序列化流 用于向流中写入对象的操作流 ObjectOutputStream 称为 序列化流 序列化:用一个字节序列可以表示一个对象,该字节序列包含该对象的数据、对象的类型和对象中存储的属性等信息。字节序列写出到文件之后,相当于文件中持久保存了一个对象的信息。 反序列化:该字节序列还可以从文件中读取回来,重构对象...
2019-07-22 22:04:56
223
原创 IO流(七) Properties类
Properties类介绍 Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。 Properties:Map集合的一种,它是Hashtable集合的子集合,它键与值都是String类型,它是唯一能与IO流结合使用的集合 特点: 1、Hashtable的子类,map集合中的方法都可以用。 2、该集合没有...
2019-07-22 22:02:01
523
原创 IO流(六) 缓冲流
在我们学习字节流与字符流的时候,大家都进行过读取文件中数据的操作,读取数据量大的文件时,读取的速度会很慢,很影响我们程序的效率,那么,我想提高速度,怎么办? Java中提高了一套缓冲流,它的存在,可提高IO流的读写速度 缓冲流,根据流的分类分类字节缓冲流与字符缓冲流。 字节缓冲流 字节缓冲流根据流的方向,共有2个 写入数据到流中,字节缓冲输出流 BufferedOutputStream ...
2019-07-22 21:56:27
271
原创 IO流(五) IO异常及转换流
我们在实际开发中,对异常时如何处理的 public class FileOutputStreamDemo3 { public static void main(String[] args) { File file = new File("c:\\file.txt"); //定义FileOutputStream的引用 FileOutputStream fos = null; t...
2019-07-22 21:53:55
197
原创 IO流(四) 字符流
在操作过程中字节流可以操作所有数据,可是当我们操作的文件中有中文字符,并且需要对中文字符做出处理时怎么办呢? 字节流读取字符的问题 通过以下程序读取带有中文件的文件。 public class CharStreamDemo { public static void main(String[] args) throws IOException { //给文件中写中文 write...
2019-07-22 21:50:11
165
原创 IO流(三) 字节流
我们一直都是在操作文件或者文件夹,并没有给文件中写任何数据。现在我们就要开始给文件中写数据,或者读取文件中的数据。 字节输出流写入数据到文件 写入数据的原理(内存-->硬盘) java程序-->JVM(java虚拟机)-->OS(操作系统)-->OS调用写数据的方法-->把数据写入到文件中 字节输出流的使用步骤(重点): 1.创建一个File...
2019-07-22 21:42:22
202
原创 IO流(二) 递归
递归的概述 递归,指在当前方法内调用自己的这种现象递归分为两种,直接递归和间接递归。 public void method(){ System.out.println(“递归的演示”); //在当前方法内调用自己 method(); } 直接递归称为方法自身调用自己。间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。 注意事项: - 递归...
2019-07-22 21:36:53
225
原创 IO流(一) 概述及File类
概述 数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了。那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再把这些数据读出来继续使用呢?其实要把数据持久化存储,就需要把内存中的数据存储到内存以外的其他持久化设备(硬盘、光盘、U盘等)上。 当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作。 当把持久设备上的数...
2019-07-20 13:25:57
185
原创 多线程(七) 等待唤醒机制
线程之间的通信:多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同。通过一定的手段使各个线程能有效的利用资源。而这种手段即—— 等待唤醒机制。 等待唤醒机制所涉及到的方法: wait() :等待,将正在执行的线程释放其执行资格 和 执行权,并存储到线程池中。 notify():唤醒,唤醒线程池中被wait()的线程,一次唤醒一个,而且是任意的。 notifyAll(): 唤醒全...
2019-07-20 11:44:16
282
原创 多线程(六) 死锁和Lock锁
死锁 同步锁使用的弊端:当线程任务中出现了多个同步(多个锁)时,如果同步中嵌套了其他的同步。这时容易引发一种现象:程序出现无限等待,这种现象我们称为死锁。这种情况能避免就避免掉。 synchronzied(A锁){ synchronized(B锁){ } } 我们进行下死锁情况的代码演示: 定义锁对象类 publicclassMyLoc...
2019-07-20 11:39:09
493
原创 多线程(五) 线程安全和线程同步
如果有多个线程在同时运行,而这些线程可能会同时运行这段代码。程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。 我们通过一个案例,演示线程的安全问题: 电影院要卖票,我们模拟电影院的卖票过程。假设座位共100个(本场电影只能卖100张票)。 我们来模拟电影院的售票窗口,实现多个窗口同时卖电影票(多个窗口一起卖这100张票) 需要窗口,采用线程对...
2019-07-20 11:33:50
166
原创 多线程(四) 线程池
多线程有几种实现方案,分别是哪几种? a, 继承Thread类 b, 实现Runnable接口 c, 通过线程池,实现Callable接口 线程池,其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源。 我们详细的解释一下为什么要使用线程池? 在java中,如果每个请求到达就创建一个新线程,开销是相当大的。在实际使用...
2019-07-20 11:24:12
154
原创 多线程(三) 创建线程方式------实现Runnable接口
创建线程的另一种方法是声明实现 Runnable 接口的类。该类然后实现 run 方法。然后创建Runnable的子类对象,传入到某个线程的构造方法中,开启线程。 为何要实现Runnable接口,Runable是啥玩意呢?继续API搜索。 查看Runnable接口说明文档:Runnable接口用来指定每个线程要执行的任务。包含了一个 run 的无参数抽象方法,需要由接口实现类重写该方法。 创...
2019-07-20 11:22:53
2352
原创 多线程(二) 创建线程方式------继承Thread类
创建线程方式一继承Thread类 创建线程的步骤: 1 定义一个类继承Thread。 2 重写run方法。 3 创建子类对象,就是创建线程对象。 4 调用start方法,开启线程并让线程执行,同时还会告诉jvm去调用run方法。 测试类 public class Demo01 { public static void main(String[] args) { ...
2019-07-20 11:09:15
755
原创 多线程(一) 基本概念
多线程介绍 并发与并行 并发:指两个或多个事件在同一个时间段内发生。 并行:指两个或多个事件在同一时刻发生(同时发生) 通俗易懂版: 你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。 你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。 你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这...
2019-07-20 00:04:54
268
原创 异常
什么是异常?Java代码在运行时期发生的问题就是异常。 在Java中,把异常信息封装成了一个类。当出现了问题时,就会创建异常类对象并抛出异常相关的信息(如异常出现的位置、原因等)。 异常基础 在Java中使用Exception类来描述异常。 查看API中Exception的描述,Exception 类及其子类是 Throwable 的一种形式,它用来表示java程序中可能会产生...
2019-07-19 23:51:22
278
原创 集合 (三 Map接口)
Map接口概述 Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同。Collection中的集合,元素是孤立存在的,向集合中存储元素采用一个个元素的方式存储。 Map集合的特点: 1.Map集合是一个双列集合,一个元素包含两个值(一个key,一个value) 2.Map集合中的元素,key和value的数据类型可以相同,也可以不同 3.M...
2019-07-19 23:46:38
192
原创 集合 (二 Iterator迭代器)
Iterator接口 在程序开发中,经常需要遍历集合中的所有元素。针对这种需求,JDK专门提供了一个接口java.util.Iterator。Iterator接口也是Java集合中的一员,但它与Collection、Map接口有所不同,Collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象也被称为...
2019-07-19 23:42:45
316
原创 集合(一 Collection集合)
1. JDK9对集合添加的优化【of( )】方法 JDK9的新特性: List接口,Set接口,Map接口:里边增加了一个静态的方法of,可以给集合一次性添加多个元素 static <E> List<E> of(E... elements) 使用前提:当集合中存储的元素的个数已经确定了,不在改变时使用 注意: 1.of方法只适用于List接口,...
2019-07-19 23:41:44
387
原创 泛型
自定义泛型(类、方法、接口) 泛型通配符 通配符用“?”表示 普通使用 相同点:代表任意的数据类型 不同点:通配符不能创建对象使用,只能作为方法的参数使用 约定上限和下限的使用 泛型的上限限定: ? extends E 代表使用的泛型只能是E类型的子类/本身 泛型的下限限定: ? super E 代表使用的泛型只能是E类型的父类/本身 泛型概述 集合中是可以存...
2019-07-19 23:38:36
177
原创 内部类
什么是内部类 将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称为内部类。其他类也称为外部类。 什么时候使用内部类 在描述事物时,若一个事物内部还包含其他可能包含的事物,比如在描述汽车时,汽车中还包含这发动机,这时发动机就可以使用内部类来描述。 class 汽车 { //外部类 class 发动机 { //内部类 } } 内部类的...
2019-07-19 23:37:25
122
原创 正则表达式
只能输入数字:"^[0-9]*$"。 只能输入n位的数字:"^\d{n}$"。 只能输入至少n位的数字:"^\d{n,}$"。 只能输入m~n位的数字:。"^\d{m,n}$" 只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。 只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"。 只能输入有1~3位小数的正实数:"^[0-9]+(.[0-9]{...
2019-07-19 23:35:43
123
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅