错误:
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是对当前线程对象进行操作,不会产生上述问题,但与题意不符