![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java
文章平均质量分 81
坚持
ciao-lk
这个作者很懒,什么都没留下…
展开
-
thymeleaf无法加载resources中的静态资源
如果设置编码还是打包失败,或者显示找不到js、css、html等静态资源,说明服务器没有访问资源的权限,需要在pom.xml的build下引入资源文件。打包编译项目,显示找不到js、css等静态资源。原创 2023-11-01 09:45:34 · 270 阅读 · 0 评论 -
Redis开机自启动
redia开机自启原创 2022-07-06 14:27:25 · 451 阅读 · 1 评论 -
SpringBoot-ssm
SpringBoot-ssm1、创建项目lombok、devtool、spring web、mybatis、oracle driver2、在src/main下创建文件webappwebapp/WEB-INFwebapp/WEB-INF/content3、application.properties# 配置连接池,使用默认推荐的HikariCPspring.datasource.driver-class-name=oracle.jdbc.OracleDriverspring.datas原创 2021-06-24 21:30:29 · 68 阅读 · 0 评论 -
Spring Boot入门
Spring Boot是什么?Spring Boot并不是什么新的框架,它是对Spring的缺点进行了改善和优化,Spring Boot默认了很多的框架使用方式,像maven整合了所以jar包同一个道理。及SpringBoot并不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式而已。为什么使用Spring Boot?Spring Boot官方是这么说的:Spring Boot它是基于Spring开发项目的起点,Spring Boot的设计主要是让你快速地跑起来Spring应用程序原创 2021-06-24 21:29:24 · 121 阅读 · 1 评论 -
SpringMVC框架搭建流程
SpringMVC框架搭建流程开发过程1)配置DispatcherServlet前端控制器2)开发处理具体业务逻辑的Handler(@Controller、 @RequestMapping)3) xml配置⽂件配置controller扫描,配置springmvc三⼤件4)将xml⽂件路径告诉springmvc(DispatcherServlet)详细流程:创建目录新建maven项目,注意选择webapp骨架。创建成功之后会发现没有src等目录,这些需要我们手动创建:在src下面新建m原创 2021-06-24 21:22:46 · 127 阅读 · 1 评论 -
SpringMVC 概述
SpringMVC 概述Spring 为展现层提供的基于 MVC 设计理念的优秀的 Web 框架,是目前最主流的MVC 框架之一2)Spring3.0 后全面超越 Struts2,成为最优秀的 MVC 框架。3)Spring MVC 通过一套 MVC 注解,让 POJO 成为处理请求的控制器,而无须实现任何接口。4)支持 REST 风格的 URL 请求。5)采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性。SpringMVC是什么1)一种轻量级的、基于MVC的Web原创 2021-06-24 21:15:47 · 61 阅读 · 0 评论 -
Oracle-伪列
Oracle数据库表中的伪列##rownum对于rownum来说它是oracle系统顺序分配为从查询返回行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,且rownum不能以任何表的名称作为前缀。rownum 对于等于某值的查询条件如果希望找到学生表中第一条学生的信息,可以使用rownum=1作为条件。但是想找到学生表中第二条学生的信息,使用rownum=2结果查不到数据。因为rownum都是从1开始,但是1以上的自然数在rownum做等于判断是原创 2021-05-26 11:30:54 · 104 阅读 · 0 评论 -
SM的开发步骤
SM的开发步骤1、在中央库提供的web应用中查询依赖的GAV坐标值spring-context-support提供Spring的IoC容器spring-jdbc提供Spring针对JDBC编程的支持,并按照传递依赖自动添加spring-tx事务支持spring-web提供spring针对web编程的支持mybatis声明依赖mybatis框架mybatis-spring整合Spring和MyBatis框架HikariCP提供连接池依赖ojdbc8是oracle11g的jar包为了解决默原创 2021-05-18 16:26:40 · 2413 阅读 · 0 评论 -
控制反转和依赖注入
控制反转和依赖注入IoC实现由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控,控制权由应用代码中转到了外部容器,控制权的转移,是所谓控制反转。实际上真正的IoC有两种实现方式DI和DL可供选择的IoC 容器: Apache Avalon、PicoContainer 和 HiveMind。Avalon 从没怎么流行,尽管它很强大而且有很长的历史。Avalon相当的重和复杂,并且看起来比新的IoC解决方案更具侵入性。PicoContainer是一个轻量级而且更强调通过构造函数表达依赖性而不是原创 2021-05-18 16:25:22 · 101 阅读 · 0 评论 -
spring-IoC容器
Spring的IoC容器IoC在程序开发中,实例的创建不再由调用者管理,而是由Spring容器创建。Spring容器会负责控制程序之间的关系,而不是由程序代码直接控制,因此,控制权由程序代码转移到了Spring容器中,控制权发生了反转,这就是Spring的IoC思想基础理论回顾Spring是一个轻量级的控制反转IoC/DI依赖注入和面向切面AOP的开源容器框架,是一个开源的Java/Java EE全功能栈full-stack的应用程序框架,以Apache许可证形式发布Spring是一个轻量级的原创 2021-05-11 16:55:10 · 213 阅读 · 0 评论 -
Spring基础
Spring框架Spring是分层的JavaSE/JavaEE应用一站式的轻量级开源框架,以IoC/DI和AOP为内核,提供了展现层SpringMVC和持久层SpringJDBC以及业务层事务管理等众多的企业级应用技术,并整合了大量的第三方框架和类库,逐步成为使用最多的JavaEE企业级应用开发框架Hello Spring用于总体的管理,主要简化对象的创建和依赖关系的管理,并依靠AOP可以抽离公共的业务逻辑处理1、添加依赖<dependency> <gro原创 2021-05-10 14:01:59 · 103 阅读 · 0 评论 -
Spring框架中获取连接池常用的四种方式
1:DBCP数据源DBCP类包位于 /lib/jakarta-commons/commons-dbcp.jar,DBCP是一个依赖Jakarta commons-pool对象池机制的数据库连接池,所以在类路径下还必须包括/lib/jakarta-commons/commons-pool.jar。下面是使用DBCP配置oracle数据源的配置片断:<bean id=”dataSource”class=”org.apache.commons.dbcp.BasicDataSource” destroy原创 2021-05-08 18:01:37 · 617 阅读 · 0 评论 -
Mybatis延迟加载
延迟加载问题MyBatis针对关联表中的数据支持延迟加载。延迟加载其实就是将数据加载时机推迟,比如推迟嵌套查询的执行时机。延迟加载可以实现先查询主表,按需实时做关联查询,返回关联表结果集,一定程度上提高了效率。<settings> <!-- 启用延迟加载特性,不配置默认关闭该特性--> <setting name="lazyLoadingEnabled" value="true" /> <!-- 按需加载:原创 2021-05-07 09:23:58 · 145 阅读 · 0 评论 -
Mybatis应用
JavaEE企业级开发中的分层架构微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层、表示层。分层式设计可以达至目的:分散关注、松散耦合、逻辑复用、标准定义。JavaEE中分层架构:表现层、业务层、持久层轻量级开发中采用的是:表现层、业务层、持久层、域对象层表现层:MVC模式,SpringMVC,收集客户动作和显示业务数据业务层:Spring框架,封装业务逻辑,逻辑复用持久层:DAO模式、ORM模式,MyBatis,封装数据访问逻辑域对象层:实现层和层之间转载 2021-04-28 21:36:28 · 103 阅读 · 0 评论 -
MyBatis配置
MyBatisMyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。1、核心配置文件resources/mybatis-config.xml全局配置<?xml version="1.0" encodi转载 2021-04-23 16:42:31 · 84 阅读 · 0 评论 -
MyBatis基础
MyBatisMyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。1、核心配置文件resources/mybatis-config.xml全局配置<?xml version="1.0" encodi原创 2021-04-23 16:34:20 · 88 阅读 · 0 评论 -
JSP技术
JSP技术JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准,它实现了在HTML标签中使用Java代码JSP是一种动态网页技术标准,也是JavaEE的标准。JSP和Servlet一样,是在服务器端执行的。JSP是在Servlet技术发展之后为了让开发者写html标签更方便而发展起来的技术,JSP实际上就是Servlet。但是通常把Servlet作为We转载 2021-04-21 21:30:56 · 1914 阅读 · 0 评论 -
response响应
重要的APIconfiginit()和init(ServletConfig config)getInitParameter():StringgetServletConfig().getInitParameter("height")response响应HttpServletResponse接口属于Servlet规范,存在于servlet-api.jar中,由服务器提供接口的实现类,主要用于封装服务器的响应信息,可以将doGet或doPost的响应信息写出到【响应体】中ServletRes转载 2021-04-19 17:17:31 · 1108 阅读 · 0 评论 -
Servlet(二)
Servlet技术Servlet规范是JavaEE规范中的一个部分,是用于扩展服务器功能的运行在服务器中的小型Java程序(即服务器端小应用程序),是实现了Servlet接口通过http接收和响应web客户端请求的类静态和动态因人因时因地而发生变化服务器web服务器:定位资源—Apachejsp/servlet容器:运行jsp或者servlet程序—TomcatServlet概述Servlet是一种用于扩展服务器功能的服务器端组件技术要求直接或者间接的实现Servlet接口运行转载 2021-04-17 16:07:31 · 162 阅读 · 0 评论 -
Servlet(一)
Servlet组件什么是servletServlet是一种用于扩展服务器功能的服务器端组件技术,用于实现动态网页编程是直接或者间接实现Servlet接口的类有三种:Servlet Filter xxxListenerHello ServletServlet接口不在JavaSE中,需要因为servlet-api依赖 <dependency> <groupId>javax.servlet</groupId> <artifactId&转载 2021-04-15 19:38:04 · 61 阅读 · 0 评论 -
http协议
HTTP 超文本传输协议 Hyper Text Transfer ProtocolWeb页面具有极强的交互性。由于Web页面是用HTML编写的,而HTML具备超强的表现力,并且,服务器端升级后,客户端无需任何部署就可以使用到新的版本,因此,BS架构升级非常容易。协议是什么?协议就是不同的应用程序之间按照事先做好的约定进行的通信。 这样就能互相读懂对方的意思。浏览器和WEB服务器之间,使用的就是一种叫做HTTP的协议。 这样是BS (Browser Server )架构模型的基础HTTP协议HTT原创 2021-04-14 19:58:47 · 79 阅读 · 0 评论 -
Tomcat
今日总结原创 2021-04-13 19:04:39 · 79 阅读 · 0 评论 -
JAVA反射机制-获取类对象
今日总结原创 2021-04-12 22:52:10 · 101 阅读 · 0 评论 -
工厂模式
工厂模式用户package com.liu.entity;import java.io.Serializable;import java.util.Date;public class UserBean implements Serializable{ private static final long serialVersionUID = 6507691697025137000L; private Long id; private String username; private tr原创 2021-03-22 20:27:45 · 64 阅读 · 0 评论 -
简单的ATM系统
package ATM;import java.util.Scanner;public class ATM {static Scanner sc = new Scanner(System.in);private String[] accounts = { “admin”, “12345”, “23456” }; // 账户private String[] password = { “123456”, “11111”, “22222” }; // 密码private double[] money原创 2021-03-05 21:12:53 · 181 阅读 · 0 评论 -
线程问题
死锁问题所谓死锁是指两个或两个以上的线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。特殊的概念饥饿指的线程无法访问到它需要的资源而不能继续执行时,引发饥饿最常见资源就是CPU时钟周期。在程序中使用的Thread.yield或者Thread.sleep(0)表明该程序试图克服优先级调整问题,让优先级更低的线程拥有被CPU调度的机会。Thread.sleep(0)不等于不写活锁指的是线程不断重复执行相同的操作,但每次操作的结果都是失败的。活锁通常发生在处原创 2021-03-05 21:07:56 · 218 阅读 · 0 评论 -
集合练习
今日总结:原创 2021-03-03 23:38:05 · 259 阅读 · 1 评论 -
集合与线程
使用 Iterator 修改集合中的数据ArrayList 中针对 iterator 接口的实现创建 Itr 对象时会记录当前集合的 modCount 修改次数当调用 Itr 对象的 next 方法时首先判定修改次数是否发生变化,如果已经修改了则抛出异常Java 集合中的快速失败机制有线程在遍历集合的同时,有另外线程进行了集合结构的修改,则会引发异常,异常是告知遍历集合的线程当前集合已经发生了改变[modcount++],要求重新获取遍历器迭代器的快速失败行为无法得到保证,因为一般来说,原创 2021-03-02 21:33:05 · 474 阅读 · 0 评论 -
Map接口
Map 接口哈希表就是一种以键-值(key-indexed) 存储数据的结构,只要输入待查找的值即 key,即可查找到其对应的值。哈希的思路很简单,如果所有的键 hashCode 都是整数,那么就可以使用一个简单数组来实现:将键作为索引,值即为其对应的值,这样就可以快速访问任意键的值。简单的计算方法 hashcode%数组长度=【0,数组的长度-1】它提供了一组键值的映射。其中存储的每个数据对象都有一个相应的键 key,键决定了值对象在 Map 中的存储位置。键应该是唯一的,不允许重复,每个 k原创 2021-03-01 22:48:13 · 133 阅读 · 1 评论 -
Set接口
通配符参数的语法使用<? extends E>上限通配符,用来限制类型的上限public class B{ public void pp(List<? extends T> list){} //表示list中元素的类型必须是T类型或者T类型的子类或者T接口的实现类 public void cc(List list){} //要求list中的元素必须是T类型的,假设有实参ArrayList...原创 2021-02-27 21:48:14 · 129 阅读 · 0 评论 -
泛型
泛型当将一个对象放入集合中,集合不会记住此对象的类型,当再次从集合中取出此对象时,改对象的编译类型变成了Object类型,但其运行时类型任然为其本身类型。List list=new ArrayList();list.add(new Random());list.add("abc"); //list并没有识别"abc"是字符串类型,而是当作Object进行处理String str=list.get(0);//语法错误,需要编程实现类型转换注意:问题1进行数据的强制类型转换之前必须进行类型判断,C原创 2021-02-24 21:33:27 · 253 阅读 · 1 评论 -
Vector
Vector类定义属于老版本提供的,从1.0,而ArrayList比较新,从1.2。属于线程安全的类,大部分方法上都有synchronized,一般用于要求线程安全的属性定义public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable,java.io.Serializable数据存储protected Object[] elementDat原创 2021-02-23 21:29:54 · 58 阅读 · 0 评论 -
集合
数据结构1、线性表(数组)存储区间是连续的,占用内存严重,故空间复杂度很大。但数组的二分查找(前提是必须有序)时间复杂度小,为O(1);数组的特点是:寻址容易(arr[n]=arr[0]+n*每个元素的长度,时间复杂度为O(1))插入和删除困难(可能会引发一半以上的数据元素移动,时间复杂度为O(n));Java中的数组是定长的,如果需要变长则需要自行编程实现2、链表存储区间离散(数据不是连续存放的),占用内存比较宽松,故空间复杂度很小,但操作元素的时间复杂度很大,达O(N)。链表的特点原创 2021-02-22 20:52:00 · 73 阅读 · 0 评论 -
线程同步
线程同步synchronized小结1、线程同步的目的是为了保护多个线程访问一个资源时对资源的破坏。多线程的执行过程不可重现,可能会造成对共享数据的破坏volatile可见性和有序性,但是不能保证原子性synchronized可以保证原子性2、线程同步方法是通过锁(监视者)来实现,每个对象都有且仅有一个锁,这个锁与一个特定的对象关联,线程一旦获取了对象锁,其他访问该对象的线程就无法再访问该对象的同步方法(可以访问静态同步方法)。3、对于静态同步方法,锁是针对这个类的,锁对象是该类的Cl原创 2021-02-20 21:31:04 · 300 阅读 · 0 评论 -
线程安全
今天就线程安全问题和解决方案进行了深入学习。线程安全多线程的执行顺序不可重现,但是必须要求执行结果必须可以重现线程的共享数据操作不完整性就一定会出现数据被破坏,而导致结果无法预知的问题—线程的安全问题同步处理的引入在java语言中存在两种内建的synchronized语法:synchronized代码块和synchronized方法( 静态方法和非静态方法)可以解决线程安全问题首先synchronized将并行改为串行,当然会影响程序的执行效率,执行速度会受到影响。其次synchronized操原创 2021-02-19 20:16:28 · 165 阅读 · 0 评论 -
线程状态切换
未完待续原创 2021-02-04 23:33:07 · 708 阅读 · 0 评论 -
Java内存模型
未完待续原创 2021-02-03 21:38:52 · 61 阅读 · 0 评论 -
多线程编程细节
未完待续原创 2021-02-02 22:37:48 · 68 阅读 · 0 评论 -
线程池
未完待续原创 2021-02-01 18:49:41 · 61 阅读 · 0 评论 -
线程的实现方法
今日原创 2021-01-30 23:30:48 · 104 阅读 · 0 评论