我目前正在开发涉及Apache Tiles的项目,但遇到了以下问题。
项目文件夹在路径名中有(一个或多个)空格。
C:\Users\MyUsername\Documents\Dropbox\Subfolder\My Projects\GymApp
现在,令我惊讶的是,当我使用Apache Tiles时,它会尝试从以下位置加载tile-definition.xml
:
C:\Users\MyUsername\Documents\Dropbox\Subfolder\My%20Projects\GymApp\src\main\webapp\WEB-INF\configurations\tile-definition.xml
所以问题出在工具X试图将所有空格转换为%20(URL编码)的部分,其中工具X是:Windows,Java,Tomcat,Spring或Apache Tiles。因为这个Apache Tiles无法加载文件,因为该文件不存在(如果我尝试在Windows资源管理器中打开URL,它会给我一个错误,即该文件不存在,同样的事情出现在我的IDE的控制台日志中)。
至于我的问题,是否可以在包含空格的文件夹中运行Apache Tiles项目?如果是这样,这是怎么做到的?
注意*:如果我将My Projects
的文件夹名称更改为My_Projects
,项目运行时没有任何错误,所以我知道文件夹路径在此处有问题。
- 编辑 -
我使用此代码配置tilesConfigurer
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView" />
</bean>
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
<property name="definitions" value="/WEB-INF/configurations/tiles.xml" />
</bean>
- 编辑2 -
这是我的IDE日志显示的内容:
DEBUG BaseLocaleUrlDefinitionDAO:154 - File Resource file:/C:/Users/MyUsername/Documents/Dropbox/Subfolder/My%20Projects/GymApp/src/main/webapp/WEB-INF/configurations/tiles.xml at file:/C:/Users/MyUsername/Documents/Dropbox/Subfolder/My%20Projects/GymApp/src/main/webapp/WEB-INF/configurations/tiles.xml not found, continue
DEBUG BaseLocaleUrlDefinitionDAO:154 - File Resource file:/C:/Users/MyUsername/Documents/Dropbox/Subfolder/My%20Projects/GymApp/src/main/webapp/WEB-INF/configurations/tiles_en.xml at file:/C:/Users/MyUsername/Documents/Dropbox/Subfolder/My%20Projects/GymApp/src/main/webapp/WEB-INF/configurations/tiles_en.xml not found, continue
DEBUG TestDispatcherServlet:938 - Could not complete request
javax.servlet.ServletException: Could not resolve view with name 'home' in servlet with name ''
答案 0 :(得分:0)
在指定tilesConfigurer bean时是否使用上下文相关路径?因为如果你这样做,那么你的项目文件夹是否包含空格并不重要。
我的dispatcher-servlet.xml中有以下代码:
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView" />
</bean>
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
<property name="definitions">
<list>
<value>/WEB-INF/tiles/config/template-definitions.xml</value>
<value>/WEB-INF/tiles/config/page-definitions.xml</value>
</list>
</property>
</bean>
...即使我的项目文件夹包含空格,Tiles仍然会找到definition-xml。
答案 1 :(得分:0)
我知道这是一个旧线程,但是没有标记为已解决,并且我遇到了类似的问题,也许这会对其他人有所帮助。
当您添加## 2以指定战争版本时,通过Tomcat并行部署,它将被扩展到具有相同版本(包括#个字符)的文件夹中,并且这些文件将转义到具有相同结果的%23-tile .xml无法加载。
为解决此问题,我重写了URLApplicationResource类,并在两个构造函数中都替代了
file = new File(url.getPath());
我用过
file = new File(url.toURI());