服务器部署项目问题总结
一.问题
在本机运行正常的项目,部署到远程服务器上之后部分功能运行出错,错误信息是“ No Result Defined For Action And Result Input ”,由于在本机运行正常,所以初步认为是远程服务器上的java环境导致的运 行出错,但是在将服务器上的JDK、Tomcat等环境重装成和本地一致之后项 目仍然报相同的错误,在网上搜查的方法也都没有解决问题,后来使用 struts2的debug标签查找到了问题所在,问题是上传文件的临时路径无法找到导致带有文件上传的表单提交无法通过struts2的拦截器验证,返回“INPUT”,但是在action中没有关于“INPUT”的配置,所以导致出现上述错误。
在出错的表单中,文件上传功能是使用struts2的fileUpload方式实现的,在实现文件上传时,需要获取到上传文件的绝对路径和相对路径,但是这两个只是在文件的上传和持久化路径时需要,除了这两个路径之外还需要一个虚拟路径,这个虚拟路径用来保存上传文件所形成的临时文件,也就是一个临时路径,如果文件上传失败,临时文件也是存储在该路径之中。如果不配置的话将使用默认的 javax.servlet.context.tempdir 来保存文件,但是在struts2的配置文件中设置<constant name="struts.multipart.saveDir" value="c:/test"/>那么上传文件的临时路径就变成了c盘的test文件夹,但是之前设置的临时文件的保存路径是在E盘,但是远程服务器上只存在C盘,并不存在E盘,导致了找不到指定路径进而报错。解决办法就是将临时文件改为远程服务器上存在的系统盘即可。
二.反思
1.第一点不得不说的就是对于struts2的fileUpLoad组件的使用的熟练程度不够,每次使用的时候都是拿到以前写好的或者是在网上查找到的例子直接Copy、修改,看到代码也能理解是什么意思,也能实现需要的功能,虽然这样做可以提高效率,但是某些配置或者细节就容易遗忘,出错了也不知道是哪里的问题,一个小小的错误可能会纠结很久,但是当你找到出错的问题所在时又感觉十分简单,所以以后的开发学习中不管是什么东西,都尽量的去弄懂,看详细看深入,这样可能刚开始的时候很费时间,但是在以后的使用中可以很快的写出代码,并且出现问题了也能很快的定位,对于这个方面我还需要很多的努力。
2.曾经在博客园看到这样一篇文章,说一个饭店老板让店里的员工去调查市场上鸡的价格,A员工直接跑了几家市场,调查了鸡的价格,B员工去详细询问了老板为什么要调查鸡的价格,然后不仅去市场调查了鸡的价格,而且去别的饭店调查了鸡的价格,C员工不仅调查了鸡的价格,而且调查了鸭、鱼等其他同类产品的价格,D员工在调查鸡的价格的同时还想到是不是需要一个好的厨师,刚好有一个朋友就是厨师,然后就介绍给了老板,给饭店储备人才,然后上述的四个员工分别得到了60/70/80/90分,因为A员工仅仅完成了任务,B员工在完成任务的同时还知道了为什么要完成这个任务,C、D员工虽然得到80/90分的详细原因我不太记得了,但是总结起来就是超前意识,因为在完成任务的时候不仅知道了为什么要完成这个任务,还要想到与之相关的东西。对于我来说,缺乏的就是这样的一种超前的意识,可能有时候完成一个功能,仅仅是完成了一个功能,或者说有时候知道为什么完成这个功能,但是对于这些功能中的一些内容的封装、复用 以及与之相关功能的扩展做的很不够,可能上面的例子不够恰当,其实主要想说的是对于代码的重构,以后再这方面可能要做的更 多一些,我怎么感觉上面的例子就是废话呢?
3.第三个方面可能跟第一个有点类似,就是每次研究一些东西基本都是浅尝辄止,例如fancybox、ajaxForm这些,但是也不全是我不愿意去深入研究,我的JQUERY能力还是太弱了一些,很多JS代码根本看不懂,这个东西不是一时半会儿可以补起来的,接下来会找时间来继续学习,另外在研究一些东西的时候也将研究成果形成文字记录下来。
暂时能想到的就这些了,以后再有其他问题再进行总结记录。