java超全43种常见BUG总结

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) &lt;=  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 文件里  < (小于)号 ,   >(大于)号 ,会被认为是括号,需要额外注意,



解决办法 : 将 < 号换成  **&lt;**     > 号 换成**&gt;** 

```java
<if test="param.day =='1'">
AND DATE_SUB(CURDATE(), INTERVAL 7 DAY) &lt;=  SEARCH_TIME
</if>

43.一般bean创建失败的异常都是mapper.xml文件中的错误

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值