知识点:
Spring 任意位置获取 HttpServletRequest 对象
方法一:
//获取RequestAttributes
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
//从获取RequestAttributes中获取HttpServletRequest的信息
HttpServletRequest request = (HttpServletRequest)requestAttributes.resolveReference(RequestAttributes.REFERENCE_REQUEST);
方法二:
ServletRequestAttributes attributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
日志框架:Log4j2:
https://hcshow.blog.csdn.net/article/details/102769565
添加统一日志支持:
https://blog.51cto.com/lianghecai/4608975
SSM文件上传功能实现:
https://hcshow.blog.csdn.net/article/details/121255788
服务器:
————————————————————————————
版权声明:本文为CSDN博主「梁云亮」的原创文章
————————————————————————————
插件:
今天没得插件 :)
面试题:
1、error和exception有什么区别
error表示系统级的错误,是java运行环境内部错误或者硬件问题,不能指望程序来处理这样的问题,除了退出运行外别无选择,它是Java虚拟机抛出的。
exception 表示程序需要捕捉、需要处理的异常,是由与程序设计的不完善而出现的问题,程序必须处理的问题
2、运行时异常和一般异常有何不同
Java提供了两类主要的异常:runtimeException和checkedException
一般异常(checkedException)主要是指IO异常、SQL异常等。对于这种异常,JVM要求我们必须对其进行cathch处理,所以,面对这种异常,不管我们是否愿意,都是要写一大堆的catch块去处理可能出现的异常。
运行时异常(runtimeException)我们一般不处理,当出现这类异常的时候程序会由虚拟机接管。运行时异常的也是继承自Exception,也可以用catch块对其处理,只是我们一般不处理罢了,也就是说,如果不对运行时异常进行catch处理,那么结果不是线程退出就是主程序终止。
//常见的runtimeException
ClassCastException(类转换异常)
IndexOutOfBoundsException(数组越界)
NullPointerException(空指针)
ArrayStoreException(数据存储异常,操作数组时类型不一致)
如果不想终止,那么我们就必须捕获所有可能出现的运行时异常。如果程序中出现了异常数据,但是它不影响下面的程序执行,那么我们就该在catch块里面将异常数据舍弃,然后记录日志。如果,它影响到了下面的程序运行,那么还是程序退出比较好些。
3、Java中异常处理机制的原理
Java通过面向对象的方式对异常进行处理,Java把异常按照不同的类型进行分类,并提供了良好的接口。在Java中,每个异常都是一个对象,它都是Throwable或其子类的实例。当一个方法出现异常后就会抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并对异常进行处理。Java的异常处理是通过5个关键词来实现的:try catch throw throws finally。
一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws),我们可以通过它的类型来捕捉它,或最后由处理器来处理它(finally)。
try:用来指定一块预防所有异常的程序
catch:紧跟在try后面,用来捕获异常
throw:用来明确的抛出一个异常
throws:用来标明一个成员函数可能抛出的各种异常
Throw和throws的区别
1)throws 用在方法声明后,跟在后面的是异常类名 (Execution ),throw 用在方法体内,跟的是异常的对象名 (new Execution)。
2)throws 后可以跟多个异常类名,用逗号隔开;而 throw 只能抛出一个异常对象名。
3)throws 表示抛出的异常由该方法调用者处理,throw表示抛出的异常由自己处理(定义方法体内)
4)throws 表示会出现异常的一种可能性,不一定会发生该异常;throw 要是执行了则一定抛出了某种异常且后面的代码都不执行。
finally:确保一段代码无论发生什么异常都会被执行的一段代码。
4、 怎样对异常进行处理的。
(1)尽量避免出现runtimeException 。例如对于可能出现空指针的代码,带使用对象之前一定要判断一下该对象是否为空,必要的时候对runtimeException也进行try catch处理。
(2)进行try catch处理的时候要在catch代码块中对异常信息进行记录,通过调用异常类的相关方法获取到异常的相关信息,返回到web端,不仅要给用户良好的用户体验,也要能帮助程序员良好的定位异常出现的位置及原因。例如,以前做的一个项目,程序遇到异常页面会显示一个图片告诉用户哪些操作导致程序出现了什么异常,同时图片上有一个按钮用来点击展示异常的详细信息给程序员看的。
5、final、finally、finalize的区别
(1)、final用于声明变量、方法和类的,分别表示变量值不可变,方法不可覆盖,类不可以继承
(2)、finally是异常处理中的一个关键字,表示finally{}里面的代码一定要执行
(3)、finalize是Object类的一个方法,在垃圾回收的时候会调用被回收对象的此方法。
6、关于finally结果输出的情况:
只要进入try语句块后,finally语句块一定会执行,除exit除外。
代码测试:
1.结果输出1,原因如果try中和finally中都存在return,jvm虚拟机会忽略掉try中的return,执行finally中的return
private static int getInt() {
try {
return 0;
} catch (Exception e) {
e.printStackTrace();
}finally{
return 1;
}
}
2.finally不执行的情况:
除了下面这一种情况。调用exit(0)方法。终止虚拟机也就是退出你的Java程序
public class App {
private static int total() {
try {
System.out.println(“执行try”);
System.exit(0);
} catch (Exception e) {
System.out.println(“执行catch”);
} finally {
System.out.println(“执行finally”);
}
return 0;
}
异常总结自博主:JAVA好难
2、SpringMVC工作流程
————————————————————————————————————————————————
出现的错误
jdbc编程步骤:
1.注册驱动
2.获取连接
3.获取数据库操作对象
4.执行sql
5.处理查询结果集
6.释放资源
spring注入方式:
1.注解注入
- @Autowired:自动装配
2.构造器注入
构造器注入指的是在类中构造带参数的构造方法实现类的注入,举例:在类SpringAction中要依赖两个对象SpringDao和User类的对象,那么我们就可以在SpringAction中进行构造器注入,也就是说在创建SpringAction对象时要将SpringDao和User两个参数值传进来:
3.构造器注入
指的是在类中构造带参数的构造方法实现类的注入,举例:在类SpringAction中要依赖两个对象SpringDao和User类的对象,那么我们就可以在SpringAction中进行构造器注入,也就是说在创建SpringAction对象时要将SpringDao和User两个参数值传进来
4.静态 工厂的方式注入
静态工厂顾名思义,就是通过调用静态工厂的方法来获取自己需要的对象,为了让spring管理所有对象,我们不能直接通过"工程类.静态方法()"来获取对象,而是依然通过spring注入的形式获取
5.动态 工厂的方式注入
工厂模式
与静态工厂方式注入的方法不同,它需要先创建工厂类再调用方法
ps: 第一种、第二种和第三中的情况较多。现在大部分都是注解注入