Apache Tiles +文件夹路径中的空格

时间:2013-11-20 11:51:01

标签: java windows tomcat spring-mvc apache-tiles

我目前正在开发涉及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 ''

2 个答案:

答案 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());