最近开发过程中,碰到一个颇为头疼的问题:同样一套代码,在我本地机器上运行完全没有问题,在测试的机器上会返回500错误信息,在查看日志后,发现SpringMVC抛出了找不到视图的异常。
我重复在自己的机器上debug运行,发现controller的确返回了对应的视图,页面也成功跳转,怎样也重现不了那个500错误。经过检查,我发现controller里返回的视图是这样的:
return "frag/efrag";
而在我的frag目录下,文件名称是“eFrag.ftl”。
看来500错误的原因找到了,文件名不同,SpringMVC找不到名为“efrag”的视图。果然,我把测试机器上部署的工程里eFrag.ftl改名为efrag.ftl,500错误不再出现了。
但是问题还没有彻底解决,刚才已经说了,该500错误只在测试服务器上出现,在我本地开发机器上一切正常,完全无法复现该错误。经过检查,测试机器上的代码和我本机的代码属同一SVN版本,不存在代码差异的问题。
那问题到底出在哪呢?代码版本一样,运行结果却不同,那就只能是两台机器环境有差异了。但我们的tomcat、jdk以及spring包都是一样的版本……仔细思考后,发现两台机器环境的确不一样,它们之间唯一的不同就是——操作系统!我本机开发环境是windowsXP,而测试服务器环境是红帽linux。
查询一些资料后,我得知,SpringMVC的controller也是在servlet之上实现,servlet返回一个视图,是根据相对路径来查找对应的文件名,ftl文件当然是放在tomcat的路径下,那么,对于对文件名大小写不敏感的操作系统,efrag.ftl和eFrag.ftl是相同的文件。
看来原因彻底找到了,linux对文件名大小写敏感,windowsXP对文件名大小写不敏感。为了验证windows这一无聊的特性,我在windows下先建立了一个名为nnn.txt的文件,然后又在同一目录建立了一个新的txt并将其重命名为NNN.txt,发现windows弹出了这样的警告窗口:
确实,windowsXP把NNN.txt和nnn.txt视为同一文件,这表示,windowsXP对文件名大小写是不敏感的。
以前前辈们就告诉过我们,在windows上开发需要注意其与linux的差异,在做项目的过程中,这种问题还真没少出现过,比如MD5加密所用的库文件等问题。很多人认为java是跨平台的语言,是真正的“一次编写,到处运行”,但在javaEE的开发中,部署环境等问题一直是值得注意的,windows和linux的差异一定不能忽略
结论:linux是对文件名大小写敏感的,使用SpringMVC时,一定要保证controller返回的视图名称与实际文件名完全相同,大小写字母也不能忽略。
相关推荐
07SpringMVC视图解析.md
SpringMVC自定义多视图,多视图实现
springMVC 多视图配置(Jsp Freemarket Json)实例
SpringMVC 使用JSON、XML视图,json-lib jackson,xstream castor,jibx jaxb2
SpringMVC及视图解析器
1、手写springmvc框架及分析springmvc源码.zip1、手写springmvc框架及分析springmvc源码.zip1、手写springmvc框架及分析springmvc源码.zip1、手写springmvc框架及分析springmvc源码.zip1、手写springmvc框架及分析...
Spring MVC--5.视图和视图解析器
读写分离springMVC项目
springmvc 3.1 多视图,freemarker jsp
1、什么是 SpringMvc? 2、Spring MVC 的优点: 3、SpringMVC 工作原理? 4、SpringMVC 流程? 6、SpringMvc 的控制器是不是单例模式,如果是,有什么问题,怎么解决? 7、如果你也用过 struts2.简单介绍下 springMVC ...
SSM笔记-SpringMVC自定义视图及重定向视图、语言国际化
1. 什么是springmvc? 2. springmvc框架原理 前端控制器、处理器映射器、处理器适配器、视图解析器 3. springmvc入门程序 目的:对前端控制器、处理器映射器、处理器适配器、视图解析器学习 非注解的处理器映射器...
java spring springmvc 手写 博客位置: http://knight-black-bob.iteye.com/blog/2407872
springmvc对json支持
本程序为SpringMVC的入门小程序,实现了MVC的基本功能,能在前端页面上注册信息,并显示信息
理解视图和视图解析器的解析流程、使用常用的InternalResourceView和JstlView、实现自定义视图、实现重定向操作
poi excel 读写 2007 springmvc 实现
SpringMVC九大常用注解 SpringMVC
这是一个简单的SpringMVC用aop写操作日志的例子
使用Spring+SpringMVC+hibernate做的一个小项目,附带数据库