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