我在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
答案 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服务器将不会部署它。
如果我错了,请让我纠正。