日志 --BUG记录
2014-12-15日
在做520wawa的免费推广 部署web应用时
错把path设置为"/*",导致启动tomcat时,导致错误
<Context path="/members" docBase="D:\p4\01宝宝在线\8期\3源码类\03会员门户\web" debug="0" >
此处的path是指去tomcat的webapps下面的哪个目录找这个应用 如果是webapps根目录下则path应为"/"
而我们部署应用不是从tomcat的webapps下去找应用,而是从其他目录中找,但是此处的path也意味一个虚拟目录。
总之,path="/*"是错误的 。。。。。
2014-12-16日
今天在把做好的html页面中的内容,向新建的jsp页面复制时,页面的编码设置为了gb2312,
在保存时,出现某些字符不能保存为gb2312,最后确定是中文状态下输入的“—”,不能保存为gb2312
可以保存为gbk。。。。
2014-12-20日
今天在用mysel建表插入数据时 :
1366 - Incorrect string value......
肯定是问题出在编码上了。。
表 → 设计表 → 选项 将字符集选为utf8.
试了一下 插入数据 妈的巴子 !!还是不行 。。最后 还要将每个数据列的字符集设为utf8才行。
2014-12-22日
oracle数据库插入日期时,
日期插入格式问题:
插入日期格式数据时,报ORA-01861: 文字与格式字符串不匹配。
如果直接按照字符串方式,或者,直接使用to_date('2007-12-28 10:07:24'),没有指定日期格式,就会报错:ORA-01861: 文字与格式字符串不匹配,必须指定日期格式。
按照如下插入:
insert into tb_person (id,name,birthday) values ('0001' ,'wangliyue' , to_date('1991-04-10 10:07:24','yyyy-mm-dd hh24:mi:ss') );
其中的 yyyy-mm-dd hh24:mi:ss 是数据库的默认日期格式 ,可以通过 select sysdate from dual; 来查看。
2015-1-14日
昨天在做POI写excel文件时,在本地上的测试都是通过的,当时在tomcat服务器上时,程序就执行不下去了。
最终的原因是 :jar包的位置和作用没有搞对。
一般如果我们新建了一个java project工程, 会有JRE System Library类库,这是JDK提供的一些基本类库 。
如果我们再增加第三方jar包时,如果不放在命名的User Libraries时,默认将第三方jar包会放在Referenced Libraries中。
为了使第三方jar包更好的分类,我们可以建立不同的User Libraries将第三方jar包分类。
但是当我们建立一个java web project工程时,这时我们添加第三方jar包时,是应该放在web/web-inf/lib中的,因为tomcat在
运行一个web项目时,当需要第三方jar包中的类时,会到web/web-inf/lib中去找的,将里面的jar包add to buildpath之后,会自动
添加到Referenced Libraries中。Referenced Libraries中已经添加到构建路径中的jar包,意味着程序在编译的时候,要用到。而web/web-inf/lib
中的jar包意味着在运行时 要用到的jar包。一般情况下,这两者中的jar包情况应该一致。
2015-11-24日
数组转换为List(Arrays.asList)后add或remove出现UnsupportedOperationException
这个是别人的坑,让我来填。。。
Java中,可以使用Arrays.asList(T... a)方法来把一个数组转换为List,返回一个受指定数组支持的固定大小的列表。此方法同 Collection.toArray()一起,充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。返回的列表是可序列化的,并且实现了 RandomAccess。
此方法还提供了一个创建固定长度的列表的便捷方法,该列表被初始化为包含多个元素:
List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");
当转换后,使用add或者remove方法总是抛出java.lang.UnsupportedOperationException异常。
其底层的实现代码如下:
public static <T> List<T> asList(T... a) {
return new ArrayList<T>(a);
}
创建了一个ArrayList对象,而这个ArrayList并不是java.util包下面的ArrayList,而是java.util.Arrays类中的一个内部类,其实现代码如下:
private static class ArrayList<E> extends AbstractList<E> implements RandomAccess, java.io.Serializable { private static final long serialVersionUID = -2764017481108945198L;
private final E[] a;
ArrayList(E[] array) {
if (array==null)
throw new NullPointerException();
a = array;
}
而这个ArrayList类又继承了AbstractList类,其中的add和remove方法的实现过程又如下:
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
public E remove(int index) {
throw new UnsupportedOperationException();
}
所以,肯定为出现不支持操作的异常。
那么,一种解决办法是把列表再拷贝到ArrayList中就好了。
ArrayList newList = new ArrayList<>(list);就可以使用add()和remove()方法了。
2015-11-24日
在进行SVN的项目检出时,到这一步:
请选择第二个选项,即作为工作空间中的项目检出,然后设置项目名称。
如果检出的项目图标上面没有大写字母J,说明eclipse将检出的项目识别为普通的资源文件,找到该项目的.project文件,替换其中的部分内容如下:
<buildSpec>
<buildCommand>
<name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.common.project.facet.core.builder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
</natures>
然后刷新项目 ,就可以了。
2015-12-8日
今天是关于SVN的版本恢复问题。
在我们进行文件修改是,经常会发现修改错误了,需要回到上一个版本。
这里需要分两种情况 ,我们修改了文件,但是该文件没有提交至SVN,也就是没有成为一个新的修订版,这时我们想要还原,直接选择Team中的还原就行了,
这个时候本地文件就还原到SVN的最新修订版。
如果我们已经将文件的修改提交到了SVN,成为了一个新的修订版本。这时需要做如下步骤:
1.Team --> 显示资源历史记录
2.右键点击想要回复的修订版本,选择获取内容,这时本地文件的内容与所选择的的修订版本的内容相同。
3.修改之后,提交
这里需要说明的修订字段的版本号前面有一个*号的,表示本地文件现在是SVN的哪个修订版。
如果我们在上面的步骤2中,右键选择的是获取修订版,则本地文件会是选择的哪个修订版,如果我们修改了之后提交,如我们本地文件是1061修订版,但是SVN中最新的是1062修订版,
就会提示我们文件已经out of date,需要更新之后才能提交。
通过上面的分析,可以看出,已经提交到SVN的修订版,是不可能被删除或撤销的,我们只能替换文件内容之后,再次提交。
2016-1-15日
今天在启动Tomcat的时候报 :
java.net.BindException: Address already in use: JVM_Bind <null>:80
目测原因是:tomcat在创建http请求处理线程时,使用的是80端口,但是80端口被某个应用程序占用了 。
可以如下解决,亲测有效:
1.使用命令nestat -ano查看各个端口和被占用的进程id
2.使用tasklist 命令查看进程id所对应的应用程序 或者直接在进程管理器中找到相应的进程
3.关闭占用的进程,让后重启tomcat
2016-2-19日
在写js的时候,在进行异步请求时,很容易对异步请求的数据,直接进行操作,如我们异步请求某一个div块数据,让后再改异步请求之后,对该div进行操作,
会发现没有效果,因为异步请求以异步的方式进行,也就是发送异步请求之后,会不受影响的执行后面的代码,相当于在执行的主线程中另起一个线程,所以
我们只能在异步请求返回了div数据之后,才能对该div进行操作,也就是在ajax的success属性对应的函数中。。
另外还有一点,我们通过jQuery发送异步请求时,会发现请求url会多出一个“_”参数,如“_=145218411317456”,这是jQuery为我们添加的,由于浏览器可
能会对异步请求进行缓存,为了让每次的异步请求都是一个新的请求,添加了一个时间戳参数,我们可以在发送ajax请求时,设置cache:true,这样就不会添加“_”参数了。
2016-4-28日
在spring的配置文件时,经常需要去加载一些外部的schema文件(以xsd后缀结尾),考虑到网络原因,我们可以将schema文件下载到本地,添加在eclipse中,如下
最后一步,点击报错的spring配置文件,右键点击validate,一般报错就没有了。
2016-6-22日
<script>标签不能自关闭啊,<script />是不行的,必须是<script></script>,否则会导致一些莫名奇怪的错误。。。。。
2016-7-13日
对于需要通过查询字符串来进行中文传输的请求,应该对整个 url进行encodeURI编码,encodeURI(url),然后发起请求。。。。
2016-8-4日
在orcal数据库中,字符串只能与字符串比较,日期格式只能和日期格式比较,这就需要字符串格式和日期格式相互转换的函数,
to_char(sysdate,'yyyy-mm-dd hh:mi:ss') 日期转化为字符串
to_date('2016-08-04 11:00:00','yyyy-mm-dd hh:mi:ss') 字符串转化为日期
注意 这里的日期格式和java不一样 java为:yyyyy-MM-dd HH:mm:ss ,不要混淆了。
参见2014-12-22日的日志,类似的问题。
2016-9-20日
今天在第一次在使用ant在实际项目打包时,遇到了与jdk版本相关的错误。
还是对eclipse安装了多个jdk时,不太清楚项目到底使用的哪个。。。在这里重新梳理一下。
我们可以在eclipse中指定本地安装的多个jdk,如下图,并且可以勾选一个默认的jdk版本。
我们以后新建一个项目时,使用的就是这个默认的jdk了,包括里面的jre的jar包。也可以指定要使用的jdk。
在一个现成的项目中,我们也可以更改jdk,在项目JRE System Liarbry右键选择Properties,如下图,此处的JRE就是这个项目现在在使用的jdk
通过上述设置了项目所使用的jdk之后,一般我们需要设置项目的编译器的编译水平,编译器就是项目中使用的jdk中的javac.exe,一般编译器水平和jdk版本一致。
通过上述在eclipse里面设置jdk,切换jdk,eclipse都是直接去相应的jdk目录中去找的。所以与系统环境变量中设置的java_home,path环境变量并无关系。eclipse
并不会通过环境变量去寻找jdk。
但是我们在使用ant进行打包时,可以回通过系统环境变量所指定的jdk把所需的jar包,拷过来。这时,如果我们的项目在运行时使用的jdk是jdk1.7,所以项目所
依赖的就是jdk1.7中的jre下面的jar包。我们的系统环境变量的java_home配置的jdk1.6,在ant打包时,就会把jdk1.6中的jre下面的jar包,打包进项目。把这个项目
部署进tomcat就会报类版本异常了。所以我们在打包时,应该把系统环境变量设置的java_home和项目运行使用的jdk保持一致。
最后,环境变量更改了,需要重启电脑,才能生效!!!
2016-11-18日
解决关于linux服务器环境下,tomcat后台输出中文乱码的问题
解决办法:修改Tomcat的bin目录下的catalina.sh文件,找到以下代码:
if [ -z "$LOGGING_MANAGER" ]; then
JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager "
else
JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER"
fi
修改为以下:
if [ -z "$LOGGING_MANAGER" ]; then
JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8"
else
JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER -Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8"
fi