- 博客(40)
- 收藏
- 关注
原创 2.6显示登录信息
用户没有登录显示的是首页 注册 登录的信息登录后显示的是首页 消息和头像相关的内容根据登录与否,显示头部显示的内容可以使用spring的拦截器统一解决问题拦截器可以拦住浏览器访问过来的请求,拦住这些请求后,可以在这些请求的开始或者结束的地方插入一些代码,从而可以批量的解决多个请求共有的业务,这就是拦截器的好处,他可以用一种非常低得耦合度解决通用的问题先演示一下拦截器的示例1.写一个类,实现HandlerInterceptor接口,这个接口中有几个方法,根据情况去实现2.配置拦..
2022-05-20 11:10:53
456
原创 ThreadLocal如何实现线程隔离
ThreadLocal,他主要提供了一个set方法,往里面存值,一个get方法,取值。在存和取得该过程中,用了一个很简答的方法就实现了线程隔离。首先看set方法,往里面存值,存的是你指定类型的对象1.首先获取当前线程2.根据当前线程去获取一个map对象,然后把这个值存到这个map里面。他存储数据根据线程存的,每一个线程得到的map对象不一样,他通过这种方式进行的隔离然后看get方法先取当前线程,然后取当前线程对应的map,从这个map中取值,也就是以线程为key存储.
2022-05-20 10:32:23
685
原创 2.4生成验证码
为了登录功能做准备这里使用Kaptcha工具第一步导包这个包在使用的时候,springboot没有对他做整合,做配置,因为这是一个小工具所以我们要自己对他进行配置,所以写个配置类,写好后,把这个配置类加载到容器里面。spring容器会对他进行初始换第二步在config 下写配置类在类上写@Configuration,说明这是一个配置类然后可以根据Bean注解,申明一个Bean ,这个Bean会被spring容器所管理装配,我们装配的肯定是核心的,kapcha核心的是接口是
2022-05-19 18:00:56
246
原创 1.30社区首页
1.创建discuss_post数据库设计表2.把实体类写好,用来封装表里的数据,3.开发daoList<DiscussPost> selectDiscussPosts(int userId, int offset, int limit);//offset这一页起始行行号limit每一页显示的一页显示的最多的数量//Param给参数取别名//如果只有一个参数并且在if里面使用,必须取别名 //查询帖子的行数在Dao层申明这两个方法,接下来去实现这两个方法,给这m.
2022-05-18 22:23:14
336
原创 3.3帖子详情
在首页,帖子列表页面上,随便点一个帖子,选一个标题,就可以打开帖子详细信息的页面,在这里把帖子的详细内容显示完整。首先开发数据访问层,增加一个查看帖子的方法在业务层表现层,在controller处理查询请求以外,在首页上,在帖子标题上增加一个访问详情页面的链接,还有discuss-detail数据访问层 DAO然后到mapper 下的discusspost-mapper.xml然后开发业务层 diccusspostservice最后表现层增加一..
2022-05-14 14:59:39
208
原创 3.2 帖子
首选用到异步请求所谓起步请求,就是当前网页不刷新,然后我还要访问服务器,服务器会给我返回一些结果,就是网页,我根据这个结果提出的数据,对这些网页进行局部的刷新,通常给一些提示,更改一些样式,这样的方式就叫异步请求,实现异步请求的技术叫AJAX,叫做异步通信技术JS框架jQuery使用jQuery解决异步请求的示例在CommunityUtil下面加几个方法,处理json字符串的方法先搞包依赖依赖弄好后,就可以根据这个API弄几个方法服务器向浏览器返回的json数
2022-05-14 12:59:54
102
原创 redistemplate的配置
@Configurationpublic class RedisConfig { @Bean//定义第三方的Bean //方法设置为公有的,要把哪个对象装配到容器当中,那么就返回这个对象,这边返回的RedisTemplate //用Template访问数据库,Template要有访问数据库的能力,那他就得能够创建连接,连接由连接工厂创建,所以就要把连接工厂 //工厂放进来,注入给Template,他才能访问数据库(RedisConnectionFactory facto.
2022-05-05 17:09:11
4922
1
原创 显示登录信息
没有登录,显示首页登录后登录一成功,请求一刷新,就跳转到首页,这次请求就被拦截器LoginTicketInterceptor拦截到了,在请求之初就根据登录的凭证得到了用户,然后放到了hostHolder里面,并且在controller执行完之后,user又取到了,放到了model里面,index模板上写的代码就生效了,就是能够正确得到loginUser的数据,所以登录成功以后就只看到了消息,用户头像如下然后点击退出登录一退出,就跳到登录界面,退出的时候把凭证登...
2022-04-25 20:19:19
891
原创 开发登录退出功能开发步骤
1.先写数据访问层数据库的登录凭证表结构ticket是核心数据(1)首先实现登录凭证根据数据库字段写实体类LoginTicket,封装表中数据,再写增删改查的逻辑在dao中创建LoginTicketMapper接口,写插入凭证方法,查询方法,修改凭证状态(退出的时候,凭证应该失效,即更改状态 )接下来是实现这个方法之间的方法都是在mapper下新建一个配置文件写sql第二种方法是在接口当中写注解,通过注解去声明方法对应的sql2.开发业务层支持登录的.
2022-04-25 16:36:15
1141
原创 记录日志 AOP
1.程序当中已经开发好的处理业务逻辑的一个个Bean,我们称之为目标对象。2.目标对象上有很多地方可以织入代码,能织入代码的地方,我们人统称为连接点Joinpoint。3.AOP解决统一处理这些系统需求的方式,是将代码定义到一个额外的Bean,叫作方面组件。4.这个方面组件在程序运行的时候或者之前就需要被框架织入到某些连接点上。5.方面组件里面,我们要通过Pointcut切点声明,到底要织入到哪些对象的哪些位置,我们还需要写上通知类的方法来声明我们的方面组件到底要处理什么样的逻辑...
2022-04-18 22:15:25
90
原创 ACM模式下排序
import java.util.*;public class Main{ public static void main(String[] args){ HashMap<Integer,String> map = new HashMap<>(); Scanner sc = new Scanner(System.in); int n = Integer.parseInt(sc.nextLine()); int ...
2022-04-15 16:00:19
341
原创 内部类 黑马笔记
在方法 里面定义的类,称为局部内部类但是一般情况下,我们需要内部类不能被外面看到当内部类Inner 被private 修饰的时候调用方法如下局部内部类在方法 里面定义的类,称为局部内部类匿名内部类是局部内部类的一种特殊形式,所以也是局部内部类这里可以是个类也可以是个接口,里面重写了个show方法重写方法,说明继承了前面的类或者实现了接口new 说明整体是个对象,但是这个对象没有名字,所以...
2022-04-02 10:34:25
390
原创 数组的从小到大和从大到小的排序
数组 nums[ ]Arras.sort()从小到大排序Arrays.sort(nums, (a, b) -> b - a);这是从大到小排列
2022-03-29 18:57:46
453
原创 引用类型在方法传递中过程
int[] arr在栈内存中,右边内容会放在堆内存中,放完之后会有地址值,我们把地址值复制给栈内存的arr,然后输出arr[1]然后调用change 方法,change方法加载到栈内存,然后走到change方法里面,change方法里面有一个形参,所以在change方法里面也会有int[] arr,她一开始的值也是堆内存里面的值,存储的是地址001接下来通过arr[1] =200;修改这个值...
2022-03-28 19:10:13
103
原创 方法的参数传递
第一次输出100后,调用change方法 change(number) 这里的number是10进了change方法之后,修改number值为200,修改完毕后change 的值确实为200了,但是main方法中的number仍然为100所以对于基本类型的参数,形式参数的改变,不影响实际参数的值最后输出 还是100...
2022-03-28 18:56:38
70
原创 Lambda表达式 黑马笔记
以上方法有点繁琐,我们使用匿名内部类的方法进行改进匿名内部类也比较繁琐,我们接下来用Lambda表达式的方式改进如果一个方法参数是接口,那调用的就是该接口的实现类对象接口的实现类然后通过多态的形式创建接口的对象这里就是用的实现类的方式来调用这个方法使用Lambda表达式时,因为接口的eat小括号()没有东西,所以表达式的()里面也没有东西抽象方法带形式参数,但没有返...
2022-03-26 22:45:42
596
原创 StringBuilder删除最后一个元素的方法
StringBuilder sb = new StringBuilder();sb.deleteCharAt(sb.length()-1);
2022-03-23 19:51:54
10360
原创 16进制转10进制
输入 0xAA输出 170import java.util.*;public class Main{public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNext()){ String str = sc.nextLine(); String s = str.substring(2); int a = Integer.valueOf(...
2022-03-21 21:55:59
290
原创 Java ACM模式输入写法
1.首先需要导包例如 import java.util.*;2.写类public class Main{}3.创建Scanner对象Scanner s = new Scanner(System.in);4.在输入之前,可以先判断是否还有输入的数据例如判断字符串可以用 hasNext与hasNextLinewhile(s.hasNextLine()){}5.接受数据String str = s.nextLine();然后接下来就可以利用这个数据进行操作了
2022-03-19 22:05:56
1429
原创 分布式部署下,Session使用变少的原因
对于浏览起来说,各个服务器在他面前是透明的1.首先,浏览器发出请求,服务器访问nginx时,他会做负载均衡,选择哪个服务器主要看策略。(假设选择服务器1,服务器1为了业务连续,就会创建session,返回sessionID给浏览器存起来)2.浏览器第二次发送请求的时候,就会发送一个请求给nginx,就会携带sessinonID,但这个时候nginx因为负载均衡,服务器1比较忙时,服务器3空闲,那他就会发送给服务器3去处理这个请求。此时问题就出现了,服务器3没有session,那他就只能.
2022-03-18 16:25:32
1317
原创 会话管理笔记
HTTP无状态同一个人连接中,两次执行成功的请求之间是没有关系的多次请求之间没有关系从服务器的角度来说,就是同一个浏览器向我发送多个请求,我也把你当做一个陌生人来对待或者服务器无法记住浏览器的状态。HTTP本质是无状态的为了解决业务连续性的问题,可以只用Cookies创建有状态的会话- Session服务器创建了Session,用Session存储了当前浏览器或者当前用户的相关数据(例如包括id 密码 姓名等),在响应的时候,服务器...
2022-03-18 15:47:06
133
原创 开发程序,解决问题思路
发现问题,可以这么解决1.先看状态码,大概定位一下,是客户端程序有问题还是服务端程序有问题200 请求成功302 请求的资源现在临时从不同的URL响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expirs中进行了指定的情况下,这个响应才是可缓存的。重定向就是可以以一个非常低的耦合的情况下,实现功能间的跳转404 请求失败,在服务器上没有找到你所请求的资源500 表示请求失败,服务器在执行请求的过程中发生了错.
2022-03-13 13:56:47
322
原创 栈、队列和双向对列
栈栈是限定仅在表尾进行插入和删除操作的线性表 (表尾是栈顶)允许插入和删除的一端称为栈顶(top)Stack<Character> stack = new Stack<>();添加 push(压)删除 pop(弹)栈顶元素 peek (查看堆栈顶部的对象,但不从堆栈中移除它)空 isEmpty()-------------------------------------------------------------------------------
2022-03-11 22:27:19
199
原创 SpringMVC底层原理
1.浏览器访问服务器,由前端控制器处理请求;2.前端控制器会根据写的注解(controller上面的路径),去找到controller,去调用它;3.Controller会把数据封装在model中,返回给前端控制器;4.前端控制器得到model后回去调用View template(视图模板),并且把model给这个模板,(这个模板是个文档,他里面有特殊的符号,可以用model中动态的值去替换,替换完之后就可以生成动态的网页);5.生成网页后,再返回给前端控制器,前端控制器再响应给浏览..
2022-03-11 12:08:43
1483
原创 如何求链表的长度
Java1.首先定义一个节点指向头节点ListNode cur = head;2.定义初始化一个长度int length = 0;3.用while循环判断while(cur!=null){length++;cur = cur.next;}4.返回值return length;
2022-03-09 22:02:42
4282
原创 List小知识
(1)ArrayList的数据存储结构他是一个可以动态修改的数组,没有固定大小限制(2)Arrays.asList()将数组转换成list就可以获得这样的输出结构(3) 双指针法一定要排序
2022-03-03 19:40:21
144
原创 哈希法作用
当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法了。(摘自代码随想录)力扣 202 快乐数classSolution{publicbooleanisHappy(intn){Set<Integer>set=newHashSet<>();while(n!=1&&!set.contains(n)){set.add(n);...
2022-03-02 22:51:53
137
原创 HashSet集合添加元素唯一性的原因
1.首先添加元素,会首先计算下元素的哈希值2.如果哈希表尚未初始化就初始化3.根据对象的哈希值计算对象的存储位置,如果该位置没有元素,则存储元素4.如果该位置有元素,就把该元素与以前的元素比较哈希值如果哈希值不相同,会继续向下执行,把数据添加到集合中如果哈希值相同,就会调用对象的equals()方法进行比较如果返回false,就继续向下执行,把数据添加到集合中如果返回true,说明元素重复,不存储...
2022-02-26 02:11:26
140
原创 集合的遍历 黑马笔记
使用迭代器来遍历Iterator 集合专用的遍历方式Iterator是接口 他的方法如下学生类有两个成员变量 name age一个无参构造方法 一个带参构造方法 还有成员变量对应的get set方法...
2022-02-25 18:01:54
306
原创 集合 黑马笔记
Collection 是单列集合 Map是双列集合List可以重复 Set不可以重复但是这些都是接口,并不能直接创建对象并使用,所以下面讲具体实现类c是new出来的,如果输出一串带包名地址的信息,我们也知道是为什么如果直接出来了,就是ArrayList重写...
2022-02-25 17:50:34
205
原创 java 多态
Aniaml a = new Cat();通过多态的形式去访问成员变量,其实访问的是父类中的 这个age就输出的 Animal的值多态的形式访问成员方法方法也是看左边,playGame()方法Animal没有,Cat有,所以报错但是访问都有的eat方法,输出的确实cat的里面的输出所以多态的形式访问成员方法,编译看左边,运行看右边,这个eat方法就输出的cat中的Animal a = new Cat();Animal a 父类引用 new Cat() 创建...
2022-02-25 17:37:55
239
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅