欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringMVC视图名称对大小写敏感吗?

程序员文章站 2022-06-24 17:03:07
...

    最近开发过程中,碰到一个颇为头疼的问题:同样一套代码,在我本地机器上运行完全没有问题,在测试的机器上会返回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弹出了这样的警告窗口:


SpringMVC视图名称对大小写敏感吗?
            
    
    博客分类: SpringMVC SpringMVC大小写linuxjava视图
     确实,windowsXP把NNN.txt和nnn.txt视为同一文件,这表示,windowsXP对文件名大小写是不敏感的。

    以前前辈们就告诉过我们,在windows上开发需要注意其与linux的差异,在做项目的过程中,这种问题还真没少出现过,比如MD5加密所用的库文件等问题。很多人认为java是跨平台的语言,是真正的“一次编写,到处运行”,但在javaEE的开发中,部署环境等问题一直是值得注意的,windows和linux的差异一定不能忽略

    结论:linux是对文件名大小写敏感的,使用SpringMVC时,一定要保证controller返回的视图名称与实际文件名完全相同,大小写字母也不能忽略。

 

  • SpringMVC视图名称对大小写敏感吗?
            
    
    博客分类: SpringMVC SpringMVC大小写linuxjava视图
  • 大小: 10.1 KB