如何将src / main / webapp / WEB-INF / views文件夹移出src / main / webapp /?

时间:2014-02-28 01:51:49

标签: spring maven spring-mvc spring-tool-suite

我在Spring MVC src/main/webapp/WEB-INF/views中有一个文件夹,其中包含我的视图模板。我想将其移至src/main/java/views(或src/main/webapp之外的其他文件夹)。如何在Spring MVC中配置它?

我看到包含

的文件src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml
<beans:property name="prefix" value="/WEB-INF/views/" />

从我看来,我可以将其改为

<beans:property name="prefix" value="/views/" />

会将我的观点放在src/main/webapp/views中,但我认为没有办法将views移出src/webapp文件夹。

换句话说,很明显value="/"相当于src/main/webapp/,所以看起来我只限于将我的视图文件夹放在src / main / webapp中。

如何在世界范围内将我的视图文件夹设置为src/main/webapp之外,例如在src/main/foobar中!?!无论我在Google / Bing上搜索什么,都找不到任何内容。

编辑:我尝试使用/../来实现它:

<beans:property name="prefix" value="/../java/edu/csus/csc191/views/" />

但是会导致错误

  

SEVERE:servlet [appServlet]的Servlet.service()与上下文有关   path [/ hp-dsat]抛出异常[请求处理失败;嵌套   异常是org.thymeleaf.exceptions.TemplateInputException:错误   解析模板“v2_upload”,模板可能不存在或可能不存在   任何配置的模板解析器]可以使用root访问   原因

所述模板 存在于src/main/webapp/../java/views中,相当于src/main/java/views

3 个答案:

答案 0 :(得分:3)

当您使用Thymeleaf时,这很容易实现。我不确定Jsps是否有类似的解决方案。

您需要做的就是更改(或添加)模板解析器。 Thymeleaf目前直接支持ServletContextTemplateResolver和ClassLoaderTemplateResolver(如果我还记得正确的话,还支持FilepathTemplateResolver)。

所以你想要的是在TemplateEngine中声明的ClassLoaderTemplateResolver:

<beans:bean id="classLoaderTemplateResolver"
    class="org.thymeleaf.templateresolver.ClassLoaderTemplateResolver">
    <beans:property name="prefix" value="views/" />
    <beans:property name="suffix" value=".html" />
    <beans:property name="templateMode" value="HTML5" />
    <beans:property name="characterEncoding" value="UTF-8" />
    <beans:property name="cacheable" value="${thymeleaf.template.cacheable}" />
    <beans:property name="order" value="0" />
</beans:bean>

<beans:bean class="org.thymeleaf.spring3.dialect.SpringStandardDialect"
    id="thymeleafSpringDialect" />

<beans:bean id="templateEngine" class="org.thymeleaf.spring3.SpringTemplateEngine">
    <beans:property name="templateResolvers">
        <beans:set>
            <beans:ref bean="classLoaderTemplateResolver" />
        </beans:set>
    </beans:property>
</beans:bean>

答案 1 :(得分:3)

通常在应用程序构建到war时它将在src / main / webapp中查找组件,您可以使用maven自定义项目结构来更改它。

How to configure custom maven project structure

最好将视图组件保留在WEB-INF中,因为它不可公开访问。

答案 2 :(得分:1)

我认为,你不能这样做,因为将视图从webapp文件夹中删除意味着,你将web应用程序组件放在应用程序根目录之外,因为src / main / webapp是你的web应用程序的根目录。

Web服务器始终只在Web应用程序根目录中部署Web应用程序组件。如果您将视图放在webapp之外,那么Web服务器将不会部署它。

如果我错了,请让我纠正。