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个月的日志,发现了很多问题。
目前,修复了一些。
其它方面的问题也是一个接一个,技术细节太多了。