java超全43种常见BUG总结
1.NoSuchMethodError1、项目依赖复杂。不使用maven管理项目依赖时更容易出现该问题。处理的方法是: 如果使用maven,执行maven dependency:tree 人工排除2、运行环境问题。一般java web程序都运行在容器中,tomcat等。如果容器中已经存在了某个版本的jar包并已经加载了某些类,而web项目中依赖了不同的版本。处理方法:保证使用“干净”的容器运行程
1.NoSuchMethodError
- 1、项目依赖复杂。不使用maven管理项目依赖时更容易出现该问题。
处理的方法是: 如果使用maven,执行maven dependency:tree 人工排除
-
2、运行环境问题。一般java web程序都运行在容器中,tomcat等。如果容器中已经存在了某个版本的jar包并已经加载了某些类,而web项目中依赖了不同的版本。
-
处理方法:保证使用“干净”的容器运行程序,或者在maven依赖中将容器中已经存在的依赖设置为provided
2.jsp获取不到ModelAndView的数据
-
Idea自动创建的web.xml约束太低了,导致不能正常获取
-
把web.xml约束的信息换成,下面的就ok
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> </web-app>
3.400异常
- 参数有问题
4.解决由静态资源拦截,导致不能访问动态资源
- 在springmvc配置文件中添加
- mvc:annotation-driven</mvc:annotation-driven>
<mvc:annotation-driven></mvc:annotation-driven>
<context:component-scan base-package="controller"/>
5.实现****HandlerIntercepter接口不实现方法,也不报错
- jdk1.8新特性
- 使用default修饰,就是不实现也就不会报错
public interface HandlerInterceptor {
default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return true;
}
default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
}
default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
}
}
6.web.xml文件中的webapp有红线
-
标签有先后顺序
-
- 你写的标签没有按照约束文件的标签顺序
7.idea找不到配置文件
- 把maven的项目clear一下
8.MyBatis访问不了数据库
- 必须有parameterType=“pojo.Student”
<insert id="insertStudent" parameterType="pojo.Student">
insert into springdb.student(name,age) values (#{name},#{age})
</insert>
9.tomca打不开index.html
- 中央调度器的通配符问题
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
10.springmvc会根据你的访问请求后缀名,判断你是不是静态资源
11.解决tomcat访问html中文乱码
- 在html总添加
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
12.Maven引用依赖报错
13.Centos安装时候,不能联网
- 检查者俩个网络是否启动
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k7TFBQV2-1598026740659)(D:\1workeFiles\运行文件\有道云笔记\qq78DD6D55826D645CB39BD6FE390A4558\136658c507814e9e90ad16d318bf30d4\clipboard.png)]
14.linux运行sql文件错误
- 是因为linux下MySQL版本不兼容导致的
把文件中的所有的utf8mb4_0900_ai_ci替换为utf8_general_ci 以及utf8mb4替换为utf8
15.linux显示中文乱码
-
修改 /etc/locale.conf文件内容为
- LANG=“zh_CN.UTF-8”
-
让修改的文件立即生效
- source /etc/locale.conf
16.java.lang.StackOverflowError
- 由于死递归造成的
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
HttpSession session = request.getSession();
Object stuNum = session.getAttribute("stuNum");
if(stuNum==null){
request.setAttribute("msg","没有权限");
try {
request.getRequestDispatcher("/index").forward(request,response);//这里重定向到index
} catch (Exception e) {
System.out.println("异常");
}
return false;
}else {
return true;
}
}
@Configuration
public class MyConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("index");
registry.addViewController("/index").setViewName("index");
registry.addViewController("/success").setViewName("success");
}
@Override
public void addInterceptors(InterceptorRegistry registry) {//这里又把index拦截
- InterceptorRegistration interceptorRegistration = registry.addInterceptor(new MyInterceptor());
interceptorRegistration.addPathPatterns("/**");//拦截哪些请求
interceptorRegistration.excludePathPatterns("/","/webjars/**","/css/**","/js/**","/img/**","/login");//不拦截哪些请求
}
}
17.找不到mapper
- 告诉他mapper.xml在哪里
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
18-MVC异常拦截器
- public String myExceptionHandler(Exception e)这里面的参数只能填写异常参数
@ControllerAdvice//相当于@Controller,注册到容器中
public class MyExceptionHandler {
@ExceptionHandler(Exception.class)//相当于@RequestMapping,拦截哪个异常。
public String myExceptionHandler(Exception e){//只能填写一个异常参数
return "error/404";
}
}
19-docker启动错误
- 查看是否是/etc/sysconfig/docker 配置文件有内容错误
20.安装Mysql容器出错
- 重启Docker后在重启Mysql容器
systemctl restart docker docker start mysql
21-Thymeleaf渲染失败
- 得经过Controller的调用才能执行渲染
22.CryptoException
-
这个是Shiro的remberme的错误。
-
每次重启都会重新生成一对密钥
-
第一次启动程序shiro使用A密钥加密了cookie,第二次启动程序shiro重新生成了密钥B,当用户访问页面时,shiro会用密钥B去解密上一次用密钥A加密的cookie,导致解密失败
-
解决办法
-
- 自己定义一个秘钥
@Bean
public CookieRememberMeManager cookieRememberMeManager() {
CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager();
SimpleCookie simpleCookie = new SimpleCookie("rememberMe");
simpleCookie.setMaxAge(259200000);
cookieRememberMeManager.setCookie(simpleCookie);
cookieRememberMeManager.setCipherKey(Base64.decode("6ZmI6I2j5Y+R5aSn5ZOlAA=="));
return cookieRememberMeManager;
}
23.mybatis中文乱码
-
characterEncoding=utf-8
-
- 指定编码方式
spring:
datasource:
url: jdbc:mysql://118.190.247.115:3306/answer?characterEncoding=utf-8
username: root
password: HJC916924
24.linux启动SpringBoot报错注入bean失败
- 没有添加mysql驱动(不是说导入mybatis框架会自动导入吗,怎么还得在导入一下我靠)
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
25.docker启动镜像报错
- 使用 root 权限登录 Centos。确保 yum 包更新到最新。
- 更新一下yum就好了
sudo yum update
- 错误信息
Error response from daemon: oci runtime error: container_linux.go:247: starting container process
26.前端插入数据,数据库乱码
- url添加UTF-8编码
url: jdbc:mysql://39.106.82.217:3306/our_web?useUnicode=true&characterEncoding=UTF-8
**27.**报错org.thymeleaf.exceptions.TemplateInputException: Error resolving template解决方案
- 后台不能返回Map的json数据,返回list可以
28.Ajax中,跳转url的时候,不是自己设置的
1.ajax中设置的href要以/开始
- 否则路径会解析出错
$.ajax({
url:"/selectCreateClass",
dataType:"json",
success:function(data){
// alert(data)
$("#cClass").html("");
$.each(data,function (i,n) {
$("#cClass").append(
"<dd><a href='/file/"+n.cno+"/"+n.cname+"' class='uploadFile'>"+n.cname+"</a></dd>");
})
}
})
-
在href中以 / 开头了
"<dd><a href='/file/"+n.cno+"/"+n.cname+"' class='uploadFile'>"+n.cname+"</a></dd>"
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tt0q7gLf-1598026740661)(D:\1workeFiles\运行文件\有道云笔记\qq78DD6D55826D645CB39BD6FE390A4558\4b13d9591f3843a0b95d502623058e19\clipboard.png)]
- 没有以 / 开头
"<dd><a href='/file/"+n.cno+"/"+n.cname+"' class='uploadFile'>"+n.cname+"</a></dd>"
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wZkrMIs5-1598026740662)(D:\1workeFiles\运行文件\有道云笔记\qq78DD6D55826D645CB39BD6FE390A4558\9d5d56c9ccc84201808095b49a0f2f64\clipboard.png)]
29.tomcat的非法数据异常
- 因为请求参数中含有非法的符号,所以给SpringBoot中添加下面的类就OK
package com.paperfly.config;
import org.apache.catalina.connector.Connector;
import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SpringConfig {
@Bean
public TomcatServletWebServerFactory webServerFactory() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
factory.addConnectorCustomizers(new TomcatConnectorCustomizer() {
@Override
public void customize(Connector connector) {
connector.setProperty("relaxedPathChars", "\"<>[\\]^`{|}");
connector.setProperty("relaxedQueryChars", "\"<>[\\]^`{|}");
}
});
return factory;
}
}
30.Mysql的日期函数时间不对
- 设置mysql时区为中国
- 但是mysql重启后就会恢复默认
set time_zone=’+8:00’;
- url连接mysql的时区要和mysql的时区一致
characterEncoding=utf-8&serverTimezone=UTC
31.Mysql获取的时间和存储的时间不一致
解决办法:
在实体类的时间属性上加上如下注解:
@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”, timezone = “GMT+8”)
问题解决!!!
扩展:
@JsonFormat 有两种使用用法:在对象属性上,或者在属性的 getter 方法上
因为我们是东八区(北京时间)。所以我们在格式化的时候要指定时区(imezone = “GMT+8”)
@JsonFormat与@DateTimeFormat区别:@JsonFormat用于将后台返回前台的Date变量转换为字符串类型;
而@DateTimeFormat用于将前台传到后台字符串变量转换为Date类型
32.关于maven打包 “程序包com.sun.deploy.net不存在” 的问题
- com.sun.deploy.net.URLEncoder 换成 java.net.URLEncoder 即可
33.thymeleaf 模板在linux下解析报500问题
- springboot 项目在本地运行没问题,放在linux下出现访问页面报500的问题。
这可能是模板解析找不到模板路径的问题,比如controller层返回的url中出现有大写,文件名为config.html,路径写出了device/Config,在window下启动项目的时候,这是能访问到的,但是在linux下必须与文件名一致,还有前面不要加/ 也会500
34.前端出入特殊字符后端接收为空格
- 在前端使用encodeURIComponent进行设置
" <a href='/deleteOneFile/?filePath="+encodeURIComponent(n.filePath)+"&no="+createNo+"&cno="+cno+"&cname="+cname+"&userName="+userName+"&classTaskId="+classTaskId+"'>删除</a>\n" +
" <a href='deleteOneBlogFile/?blogFilePath="+encodeURIComponent(n.blogFilePath)+"/&blogFileId="+encodeURIComponent(n.blogFileId)+"'>删除</a>\n" +
35.第一次登陆很慢
- 在JVM环境中解决
- 打开$JAVA_PATH/jre/lib/security/java.security这个文件,找到下面的内容:
securerandom.source=file:/dev/random
- 替换成
securerandom.source=file:/dev/./random
**36.**Result consisted of more than one row错误的修正
- 一看到这个错误,就知道是在使用SELECT INTO的时候出现了多于一行的情况
37.Idea的jdk版本
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w9qiYxQa-1598026740664)(D:\1workeFiles\运行文件\有道云笔记\qq78DD6D55826D645CB39BD6FE390A4558\05026619edbb4732be8421fbb46baa53\clipboard.png)]
38.application.ym不出现叶子
**39.**SpringCloudConfig使用ssh方式连接GitHub报错JSchException: Auth fail
- 使用这种方式生成公钥,就可以解决
ssh-keygen -m PEM -t rsa -b 4096 -C “11111111@qq.com”
40.IDEA新建项目一直下载Resolving dependencies of xxx
- 可能是maven3.5.2版本不行,换个版本
-DarchetypeCatalog=internal
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dCyHyRVw-1598026740665)(D:\1workeFiles\运行文件\有道云笔记\qq78DD6D55826D645CB39BD6FE390A4558\9c8cbddd9f31409a8f3196656ab07083\clipboard.png)]
41.对象字段为全大写时,转json后会变成全小写问题
private String ZYH; //
private String PID; //
但以json格式传到其他项目的时候,变成了 zyh,pid
- 解决办法
import com.fasterxml.jackson.annotation.JsonProperty;
@JsonProperty("ZYH")
private String ZYH; //
@JsonProperty("PID")
private String PID; //
@JsonProperty("ZYH")
public String getZYH() {
return ZYH;
}
@JsonProperty("ZYH")
public void setZYH(String ZYH) {
this.ZYH = ZYH;
}
@JsonProperty("PID")
public String getPID() {
return PID;
}
@JsonProperty("PID")
public void setPID(String PID) {
this.PID = PID;
}
要把getter,setter方法也要加上,不然json就会出现ZYH,zyh,PID,pid四个,两个大写,两个小写,值是一样的
42.Mybatis元素内容必须由格式正确的字符数据或标记组成.
原因 : Mapper.xml 文件里 < (小于)号 , >(大于)号 ,会被认为是括号,需要额外注意,
解决办法 : 将 < 号换成 < > 号 换成**>**
<if test="param.day =='1'">
AND DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= SEARCH_TIME
</if>
@JsonProperty("PID")
public String getPID() {
return PID;
}
@JsonProperty("PID")
public void setPID(String PID) {
this.PID = PID;
}
要把getter,setter方法也要加上,不然json就会出现ZYH,zyh,PID,pid四个,两个大写,两个小写,值是一样的
**42.Mybatis元素内容必须由格式正确的字符数据或标记组成.**
原因 : Mapper.xml 文件里 < (小于)号 , >(大于)号 ,会被认为是括号,需要额外注意,
解决办法 : 将 < 号换成 **<** > 号 换成**>**
```java
<if test="param.day =='1'">
AND DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= SEARCH_TIME
</if>
43.一般bean创建失败的异常都是mapper.xml文件中的错误
更多推荐
所有评论(0)