Day64
ResponseBody
处理ajax
SprinMVC文件下载(不建议用)
步骤:1、找到要下载的文件的流
找到要下载的真实路径
new byte[] ,读取文件流,
2、要下载的文件流返回
new httpHeaders()
htppHeaders.set()
HttpMessageConverter< T >接口
里面的方法:
Boolean canRead:是否能读
Boolean canWrite:是否能写
List<Media Type> getSupportMedia Types() --->转换器支持的媒体类型
如果能读能写,就调用下面两个方法。
T read -->>把信息流读出来,然后封装成我们需要的对象
void write ---->>把读出来的数据,写出去。
拦截器(接口)
拦截器是过滤器的升级版
跟Filter差不多,一个是javaWeb 一个是SpringMVC。
HandleInterceptor比较强大一点。有三个方法
preHandle:在目标方法之前调用,返回boolean;return True 放行;return false不放行。
postHandle:在目标方法运行之后调用,目标方法调用之后。可以给ModeAndView添加对象
afterCompletion:在请求整个完成之后,来到目标页面之后。资源响应之后。
正常情况
1)拦截器是一个接口
2)实现HandleInterceptor接口。
3)配置拦截器
4)了解拦截器的运行流程。
拦截器的preHandle---->>目标方法--->>拦截器postHandle---->>页面 ----->>.拦截器的afterCompletion
其他情况
1、只要preHandle不放行,后面都不运行。
2、只要放行了,不管怎么样。afterCompletion都会执行;
多个拦截器的情况下 :
运行流程跟filter有点像
先进后出。
preA运行--->preB运行 ----->目标方法----->postB运行----->postA运行---->页面--->afterB运行---->afterA运行。
不放行的情况下:都不运行;
第二个拦截器不放行,但是前面已经放行的拦截器的afterCompletion总会运行。‘
preHandle执行成功后,会记录索引位置。
第一次:ConversionServiceExposingIntercepter -->> interceptorIndex=0;
第二次:firstInterceptor -->> interceptorIndex=1;
第三次:secondInterceptor 执行afterCompletion()
已经放行的拦截器的afterCompletion一定会执行
SpringMVC的国际化
1.写好国际化资源文件
2.让Spring的ResourceBoudleMessageSouce管理国际化资源文件。
3.直接去页面取值。
2021.6.7每天继续。
小知识
线程和进程的知识:
1、一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程(通常说的主线程)。 2、资源分配给进程,同一进程的所有线程共享该进程的所有资源。 3、线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。 4、处理机分给线程,即真正在处理机上运行的是线程。 5、线程是指进程内的一个执行单元,也是进程内的可调度实体。
SSH的知识
SSH(Struts,Spring,Hibernate) Struts进行 流程控制,Spring进行业务流转,Hibernate进行数据库操作的封装。
-
return i++ 比较特殊,先是return i;然后i++。
-
return i=i+ 1 则不同,它是先让i=i+1,再return。
包装类是针对 *基本数据类型* 的。
数值型变量在默认情况下为Int型,byte和short型在计算时会自动转换为int型计算,结果也是int 型。所以a1*a2的结果是int 型的。