2015年工作中遇到的10个问题:1-10

时间:2021-10-22 21:48:03
1.NullPointerException。
内容分类存在脏数据,导致报错,需要判断变量是否为Null。
查看内容,id不合法,没有找到这条内容,需要判断是否有值,如果为null,跳转到404页面。


2.PDF下载出现“非法”的文件名。
Linux和Windows,对文件名有一定的限制,禁止若干字符出现在文件名中。
在实现PDF下载的时候,我是把文章的title作为文件名的,title出现了“非法字符”,比如
“一个一线城市的IT白领的生活成本3万/年.pdf”中就有非法字符“/”。


在Apache Common FilenameUtils里没有找到过滤方法,就自己写个简单的过滤方法,把“/”等字符替换成“”。
Java正则替换:filteredName = name.replaceAll("[/<>|\"?:]", "").replaceAll("\\\\", "");


3.log4j输出信息不全面。
<param name="ConversionPattern"
value="[%d{yyyy-MM-dd HH:mm:ss\} %-5p] [%t] %l - %X{loginUser} %X{userip} %m%n" />

 %c   输出所属类的全名,可在修改为 %d{Num} ,Num类名输出的维(如:"org.apache.elathen.ClassName",%C{2}将输出elathen.ClassName)
 %l   输出日志事件发生位置,包括类目名、发生线程,在代码中的行数
 
 %l比%c更有用,就是信息更长了一点。
 不知道行号,定位日志要慢一些。


4.分页参数,有检查,但是仍然不够全面,竟然出现pageSize为null的情况。
  看来,考虑得还是不够周全。
  以前重点检查了pageSize和pageNo是否为正数,以及范围。
  
5.搜索参数为空。
  后端做了Null检查,但是前端不输入“搜索词”,也进行了后端查询,比较浪费。
  前端增加JS检查,减少服务器端不必要的请求处理。
  
6.部署网站过程中,经常出现代码冲突问题。
第一次部署,有若干目录,比如article,article.service。
但是第二次部署的时候,代码重构了,只有article一个目录,这个时候直接copy-paste替换进行部署,
article.service这个目录仍然存在,可能会导致一个类文件,比如SearchService,存在2个。
导致Spring @Autowired报错。


这个问题提示我们,部署的时候,需要先清空以前的代码。当然,稳妥起见,最好先完整备份一次。


7.Maven项目打包的时候,没有把xml文件打包,竟然直接忽视了。
一直到2015年1月8日以前,从来没有手动配置maven把xml打包,这次出了问题,只好在pom.xml中增加了一些配置。
 <build>
<plugins>
</plugins>
<resources>  
<resource>  
<directory>src/main/java</directory>  
<includes>  
<include>**/*.xml</include>  
</includes>  
</resource>  
</resources>  
</build>


8.p2p试运营。
很多平台,都有个“试运营”的阶段,在“正式上线”之前。算是一个过渡阶段,如果出现了问题,及时修复。
试运营阶段,用户一般也不会太多,出现的损失也不会太大。


“试运营”和网游的“公测”类似。


9.使用文件时,检查文件是否存在很有必要。
File file = new File(log4jXmlPath);
boolean exist=file.exists();
使用exists方法,比去捕捉java.io.FileNotFoundException要友好的多。

10.java web项目中,log4j.xml的位置和log4j的日志输出目录,都是可以配置的。
   <servlet-name>Log4jInit</servlet-name> 
     <servlet-class>cn.fansunion.common.web.Log4jInit</servlet-class>  
       <init-param>    
         <param-name>log4jOutputPath</param-name>  
      <param-value>C:/log4j/xiaolei</param-value>    
      </init-param>  
    <init-param>    
         <param-name>log4jXmlPath</param-name>  
      <param-value>C:/log4j.xml</param-value>    
      </init-param>    
  </servlet>
  在web.xml中配置变量,写log4j的初始化servlet,在servlet中解析变量,然后手动初始化log4j。
  
  System.setProperty("log4jOutputPath", log4jOutputPath);
  DOMConfigurator.configure(log4jXmlPath);
  
  把这个servlet写好,测试完成,花了1个多小时。
  详细的自定义配置,不再本篇中分享了。


个人官网运营有一段时间了,查看最近2个月的日志,发现了很多问题。
目前,修复了一些。
其它方面的问题也是一个接一个,技术细节太多了。