kay*_*ahr 7 java spring spring-mvc
我想配置Spring MVC来提供与静态文件混合的动态文件,比如这个(URL => File):
/iAmDynamic.html => /WEB-INF/views/iAmDynamic.html.ftl
/iAmAlsoDynamic.js => /WEB-INF/views/iAmAlsoDynamic.js.ftl
/iAmStatiHtml => /iAmStatic.html
Run Code Online (Sandbox Code Playgroud)
将DispatchServlet
被映射到/
,基于注解的MVC配置被使能和我有这样(简体)一个视图控制器:
@Controller
public class ViewController
{
@RequestMapping("*.html")
public String handleHtml(final HttpServletRequest request)
{
return request.getServletPath();
}
@RequestMapping("*.js")
public String handleJavaScript(final HttpServletRequest request)
{
return request.getServletPath();
}
}
Run Code Online (Sandbox Code Playgroud)
spring配置如下所示:
<context:component-scan base-package="myPackage" />
<mvc:default-servlet-handler />
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/views/" />
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="cache" value="true" />
<property name="prefix" value="" />
<property name="suffix" value=".ftl" />
</bean>
Run Code Online (Sandbox Code Playgroud)
不幸的是它不起作用.当它<mvc:default-servlet-handler />
处于活动状态时,我只能访问该iAmStatic.html
文件.当我禁用default-servlet-handler时,只有动态的东西才有效.但是我想要同时使用这个,而这正是这个默认的servlet处理程序应该做什么,不是吗?这里的错误在哪里?
我认为您返回的视图名称ViewController
无效。我希望request.getServletPath()
为所有 URL 返回一个空白字符串,因为 servlet 的路径可能是/
,并且 Java 文档说getServletPath()
为该路径返回一个空白字符串。因此,FreeMarker 视图解析器可能会忽略视图名称,因为它不知道要显示什么。
然而,无论如何,使用控制器类@RequestMapping
可能不是完成此任务的理想方法。Spring 包含一个ContentNegotiatingViewResolver,它根据内容类型自动确定正确的视图。ContentNegotiatingViewResolver 的概述解释了如何设置它。
归档时间: |
|
查看次数: |
18427 次 |
最近记录: |