日志 --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

posted @ 2014-12-15 16:31  wangliyue  阅读(715)  评论(0编辑  收藏  举报