Struts2 的资源文件路径的空格bug

来源:互联网 发布:阿里云iis 一键安装包 编辑:程序博客网 时间:2024/05/17 03:18

在你使用应用服务器加载应用程序时,如果应用程序使用了struts2框架,有可能会抛出如下的异常:

org.apache.catalina.core.ApplicationContext log信息: Closing Spring root WebApplicationContext2011-12-8 12:50:02org.apache.catalina.core.ApplicationContext log信息: SessionListener: contextDestroyed()2011-12-8 12:50:02org.apache.catalina.core.ApplicationContext log信息: ContextListener: contextDestroyed()2011-12-8 12:50:34org.apache.catalina.core.ApplicationContext log信息: ContextListener: contextInitialized()2011-12-8 12:50:34org.apache.catalina.core.ApplicationContext log信息: SessionListener: contextInitialized()2011-12-8 12:50:34org.apache.catalina.core.ApplicationContext log信息: Initializing Spring root WebApplicationContext2011-12-8 12:50:41org.apache.catalina.core.StandardContext filterStart严重:Exception starting filter struts2java.lang.NullPointerException    at com.opensymphony.xwork2.util.FileManager$FileRevision.needsReloading(FileManager.java:209)    at com.opensymphony.xwork2.util.FileManager.fileNeedsReloading(FileManager.java:60)    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.needsReload(XmlConfigurationProvider.java:325)    at org.apache.struts2.config.StrutsXmlConfigurationProvider.needsReload(StrutsXmlConfigurationProvider.java:168)    at com.opensymphony.xwork2.config.ConfigurationManager.conditionalReload(ConfigurationManager.java:220)    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:61)    at org.apache.struts2.dispatcher.Dispatcher.getContainer(Dispatcher.java:891)    at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:191)    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:295)    at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4072)    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4726)    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601)    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1079)    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1002)    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:506)    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317)    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065)    at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)    at org.apache.catalina.core.StandardService.start(StandardService.java:525)    at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)    at org.apache.catalina.startup.Catalina.start(Catalina.java:595)    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)    at java.lang.reflect.Method.invoke(Unknown Source)    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)2011-12-8 12:50:41 org.apache.catalina.core.ApplicationContext

 此异常是由struts2中的FileManager类加载资源时出现的一BUG,当前资源所在的磁盘路径如果存在空,FileManager在进行资源解析时会错,关键性代码如下:

 public static boolean fileNeedsReloading(String fileName, Class clazz) {        URL fileUrl = ClassLoaderUtil.getResource(fileName, clazz);        return fileUrl != null && fileNeedsReloading(fileUrl.toString());    }

当使用类加载工具将资源转换为URL时,如果资源路径中存在空格,此时路径会中的空格会转换成%20之类的东西,此时再作为文件路径将无法读取文件

原创粉丝点击