错误记录

错误:

Caused by:org.apache.commons.logging.LogConfigurationException:org.apache.commons.
logging.LogConfigurationException: No suitable Log constructor [Ljava.lang.Class;@4f9e5d0e for 
org.apache.commons.logging.impl.Log4JLogger (Caused by java.lang.NoClassDefFoundError: org/apache/log4j/Category) 
(Caused by org.apache.commons.logging.LogConfigurationException: No suitable Log constructor 
[Ljava.lang.Class;@4f9e5d0e for org.apache.commons.logging.impl.Log4JLogger (Caused by 
java.lang.NoClassDefFoundError: org/apache/log4j/Category))

Caused by: java.lang.NoClassDefFoundError: org/apache/log4j/Category

Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Category

解决:上述错误可能是jdk版本问题导致的 我用的时1.8.0_161就会报如上错误,换成1.8.0_112就好了

错误:
新项目报NoClassDefined
解决:新的eclipse目录空间要重新配maven,有些时候新项目报NoClassDefined可能是没有将相应的 jar包导入到项目中,可以在Deploy Assembly中导入jar包

错误:
修改了eclipse.ini和jdk系统变量后发现eclipse打不开了。其实是jdk系统变量的原因。我有多个jdk,并配置了多个jdk系统变量,之前想使用哪个时就把哪个jdk系统变量移到Path变量的最上面。这次问题出现在这里。

错误:
java包装类的问题。
解决:
做easyui树形组件的时候因为类型没有统一,Long和long没有区别开来导致了结果一直为null或0,最后发现有些形参里是Long类型的而有些是long类型的,统一了以后就好了

public List<Item> show(@RequestParam(value="parent_id",defaultValue="0") Long parent_id) {
//绑定参数parent_id,赋初值为0
		return TestItemService.selectParent(parent_id);
	}

错误:
数据表中数据的命名问题
数据表中有些数据中间有下划线,我用mybatis逆向工程自动生成了pojo类,但是在使用过程中发现pojo类中的属性一直报null,取不到表里的值。最后知道了若数据表里的数据中间有下划线"_",mybatis会帮我们以驼峰式命名映射的方式将数据映射到数据表中,但是需要在mybatis全局配置中进行配置,比如

<settings>
    <!-- 开启驼峰,开启后,只要数据库字段和对象属性名字母相同,无论中间加多少下划线都可以识别 -->
    <setting name="mapUnderscoreToCamelCase" value="true" />
</settings>

错误:
1、使用easyui的datagrid进行分页时出现了错误。前端正确,点击“下一页”后能够向后端传入两个参数page和rows,但是表格中的数据并不刷新,一直显示之前的第一页数据。
2、数据已经能正常的从controller层传出,但是到easyui的datagrid接收页面时,不加分页控件pagination : true还可以显示数据,只要一加上分页控件就会报NaN的错,并且在controller层渠道的rows值也是null
解决:
1、我的controller一开始是测试用的,所以没有接收任何的参数,仅仅是自己给了page和rows两个固定值,于是每次点击“下一页”,后台就不会接收前台发出的请求参数,导致页面不刷新。在controller中加上上述两个请求参数就行了

//controler类的方法要加请求参数
public EUDataGrid select(Integer page,Integer rows)

2、easyui中有这样一个属性:pageSize,它可以指定每页显示数据数量,还有这样一个属性:pageList: […],括号内填的是一个数组,它的作用和pageSize一样,可以让用户来指定每页显示的数据量。当我单独使用任意一者时,照样会报NaN的错误;同时使用,并且pageSize的值也在pageList数组中出现后,就正确了。
总结:pageSize最好和pageList一起使用,并且pageSize中的值要在pageList中存在

错误:
form的提交问题
我在提交表单时不小心将表单中的按钮值设置为了submit,并且又为按钮绑定了js事件,导致结果提交了两次
解决:
项目中一般都不会将form中的按钮设置为submit值。一般都会将按钮设置为button,然后绑定事件进行js的一些处理后再提交。

错误:
easyui在提交表单时传入了中文参数导致接收乱码
解决:
我查看了easyui前台提交时的数据,并没有乱码,然后又用HttpServletRequest在controller接收请求参数,发现数据到controller后就已经乱码了
最后想起来web.xml中我还没有设置过滤器,然后设置了一下字符过滤器就解决了
贴出代码,以示警告:

<filter>
		<filter-name>characterEncodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>characterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

错误:
在搭建父工程的子工程之前,它们被放在同一个working set下,当子工程创建完毕后出现了
Non-resolvable parent POM ['parent.relativePath]的错
解决:
删除working set,重建项目时不将它们放入working set中就行了
。。。

错误:
今天在maven中添加zookeeper插件的时候明明仓库里有zookeeper插件却一直报not a zip file的错
解决:
我把setting.xml文件中镜像仓库改成了阿里云地址,就好了。。。

错误:
log4j org/apache/log4j/category…
每次都是你。。。上次搞了一天,这次又搞了半天。
解决:
换jdk…上次是小版本冲突,我的log4j和jdk1.8.0_161有冲突,和1.8.0_112却没有冲突。这次是把版本从jdk8换成了jdk7。。。
总结一下:以后遇到log4j的NoClass之类的问题首先考虑jdk版本冲突的问题

错误:
前台Ajax提交数据到后台,后台接收并响应结果一直不对
举个例子:
前台提交str到后台,后台获取数据并判断。这里错误就在后台,我输入的是1,后台打印出的数据也是1,但是比较的结果却是2
前台:

   ...
    <input type="text" name="str">
    ...
         success : function(result){
                if(result==1)
                   alert("1");
                else
                   alert("2");
            }

后台:

public String ret(HttpServletRequest req){
    String str = req.getParameter("str");
    System.out.println(str);
    if(str==1)
       return "1";
    else
       return "2";
}

解决:
String类型的数据要使用equals来进行比较,这样才能判定它们字面是否相等,用“==”来判断就是再判断它们在内存中是否是同一个对象。。。果然,工作久了基础都忘光了。。回去看看基础

错误:
在做微服务(使用dubbo通信)项目时,web服务层一直导入不了pojo层的包。
解决:
web层依赖中忘记添加服务层的接口座标了。。。

错误:
使用secureCRT连不上linux,显示connection timed out
我的项目web层中开启了dubbo服务,配置也没问题,我开始没启动service层,先开启的是web层,这样应该报No Provider的错误,可是也没有提示出错,也访问不了网页
解决:首先尝试在所有设置的网络和internet中将虚拟机的ip改为自动获取,然后重启虚拟机,没用
然后想到了之前我更改过虚拟机目录的文件名,因为要改名,所以我把所有与虚拟机有关的后台进程都停掉了。去我的电脑->管理->服务 中看与vmware有关的进程,果然一共有五个被我停掉了三个。开启就行

错误:
也不能算是错误吧,序列化的问题
使用dubbo构建服务时,web层需要使用的pojo类都在服务层,因为web层和服务层不是同一个java程序,是两个独立地进程,所以要想从服务层传输一个pojo类型的数据(比如easyui的树)到web层必须要序列化,因为网络上只允许传输字符串或者二进制格式的数据,所以我们把pojo的对象序列化以后就可以用json格式来传输了,要不然打印出来的都是一个个对象

错误:
springboot整合mybatis时的映射名称问题
数据库字段名称中含有下划线如user_id,JavaBean中对应名称为UserId,要把它们对应起来。在这里我知道要开启驼峰命名法,于是找到了如下配置文件

mybatis.configuration.mapUnderscoreToCamelCase=true

但是没用
解决:我的mapper.xml中字段名称忘记改成和数据库中字段名称相对应的字段名了,将mapper.xml中查询语句中的字段名(之前是JavaBean中的字段名UserId)改成和数据库中的字段名一致(即加上下划线user_id)就行了

错误:
mybatis中字符串拼接的问题
sql数据库中应该这么写
select column a from table where column b like N’%字符串%’
摘抄网上的:字符串常量以大写字母 N 开头。无论客户端应用程序是否能够识别 Unicode,必需这样做。如果没有字母 N 前缀,则 SQL Server 会将字符串转换为与数据库的默认排序规则相对应的代码页。此代码页中没有的字符都将丢失
sql中的语句好写,但是mybatis就不一样了
1、 使用CONCAT 函数

select column a from table where column b like concat(concat('%',#{字符串的值}),'%'))

这里要经过两次拼接,一次不行

2、 使用${ } 代替 #{ }

因为${ }直接传入SQL,而#{ }传入的是字符串带有引号

select column a from table where column b like '%${字符串}%'

这样容易产生sql注入问题

错误:
一个面试题
两个线程A,B让A打印奇数,B打印偶数,从1一直打印到100,使用wait和notify
比如:A打印1,3,5,7,9 …,B打印2,4,6,8,10…

public class Test {
// static AtomicInteger i=new AtomicInteger(1);
static Integer i = 1;
static boolean flag = true;
//private static ReentrantLock lock = new ReentrantLock();
//Condition conditionA = lock.newCondition();
//Condition conditionB = lock.newCondition();

class A implements Runnable{
	public void run() {
		synchronized(i) {
		//lock.lock();	
		     //while(i.get()<=100) {
		     while(i<=100) {
				if(flag) {
					System.out.println(i);
					//i.getAndIncrement();
					i++;
					flag = false;
					i.notify();
					//conditionB.signal();
				}else {
					try {
						i.wait();
						//conditionA.await();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		//lock.unlock();
		}
	}
}

class B implements Runnable{
	public void run() {
		synchronized(i) {
		//lock.lock();	
			//while(i.get()<=100) {
			while(i<=100) {	
				if(!flag) {
					System.out.println(i);
					//i.getAndIncrement();
					i++;
					flag = true;
					i.notify();
					//conditionA.signal();
				}else {
					try {
						i.wait();
						//conditionB.await();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
	     //lock.unlock();
		}
	}
}

	public static void main(String[] args) {
		Test test = new Test();
		new Thread(test.new A(),"A").start();
		new Thread(test.new B(),"B").start();
	}
}

上面代码思路没有错,但是运行以后只打印了1,2,然后报如下错误

1
Exception in thread "T1" 2
Exception in thread "T2" java.lang.IllegalMonitorStateException
	at java.lang.Object.notify(Native Method)
	at cn.comwebService.SortTest$B.run(SortTest.java:49)
	at java.lang.Thread.run(Thread.java:748)
java.lang.IllegalMonitorStateException
	at java.lang.Object.notify(Native Method)
	at cn.comwebService.SortTest$A.run(SortTest.java:26)
	at java.lang.Thread.run(Thread.java:748)

在上面的代码中,在对变量i使用了synchronzied加锁后,然后才调用的this.wait()。按理不应该抛出这个异常。
最后在网上找到了答案
解决:
原因:Integer类型变量在执行赋值语句的时候,其实是创建了一个新的对象。简单的说,在赋值语句的之前和之后,this.wait并不是同一个对象。
synchronzied(i)绑定的是旧的Integer对象,而this.wait()使用的是新的Integer对象。由于新的Integer对象并没有使用synchronzied进行同步,所以系统抛出了IllegalMonitorStateException异常。
Boolean和String类型变量在使用的时候也会出现如上问题
一个解决方案是采用java.util.concurrent.atomic中对应的类型,比如这里就应该是AtomicInteger。采用AtomicInteger类型,可以保证对它的修改不会创建新的对象。
另外一种就是使用ReentrantLock,ReentrantLock是对当前线程对象进行操作,不会产生上述问题,但与题意不符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值