Spring 3.1.1 FreeMarkerconfiguer基于java的配置问题
我将Spring3.1.1与Freemarker一起使用。 在我成功使用新的Spring3.1基于java的配置的新概念之后。 现在我尝试使用Freemarker。 然而,我得到了一个例外: javax.servlet.ServletException:无法解析名为的视图 名为“appServlet”的servlet中的“/welcome” org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1139) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:927) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778) javaservlet.http.HttpServlet.service(HttpServlet.java:621) javaservlet.http.HttpServlet.service(HttpServlet.java:722) 以下是网络配置:Spring 3.1.1 FreeMarkerconfiguer基于java的配置问题,spring,spring-mvc,freemarker,Spring,Spring Mvc,Freemarker,我将Spring3.1.1与Freemarker一起使用。 在我成功使用新的Spring3.1基于java的配置的新概念之后。 现在我尝试使用Freemarker。 然而,我得到了一个例外: javax.servlet.ServletException:无法解析名为的视图 名为“appServlet”的servlet中的“/welcome” org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.jav
package com.springway.config;
@Configuration
@ComponentScan("com.springway")
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Inject
private Environment environment;
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new MappingJacksonHttpMessageConverter());
}
@Bean
public ViewResolver viewResolver() {
UrlBasedViewResolver viewResolver = new UrlBasedViewResolver();
viewResolver.setViewClass(FreeMarkerView.class);
return viewResolver;
}
@Bean
public FreeMarkerConfigurer freeMarkerConfigurer() {
FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
configurer.setTemplateLoaderPath(
"/WEB-INF/freemarker.xml");
return configurer;
}
我和你的问题是一样的。我尝试为“org.springframework.web.servlet.view.freemarker.freemarkerconfiguer”打开日志级别“DEBUG”。我发现了以下消息:
java.io.FileNotFoundException:ServletContext资源[/WEB-INF/freemarker/]无法解析为URL,因为它不存在
在org.springframework.web.context.support.ServletContextResource.getURL(ServletContextResource.java:154)~[spring-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
在org.springframework.web.context.support.ServletContextResource.getFile(ServletContextResource.java:169)~[spring-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
在org.springframework.ui.freemark.FreeMarkerConfigurationFactory.getTemplateLoaderFormath(FreeMarkerConfigurationFactory.java:351)[spring-context-support-3.1.1.RELEASE.jar:3.1.1.RELEASE]
在org.springframework.ui.freemark.FreeMarkerConfigurationFactory.createConfiguration(FreeMarkerConfigurationFactory.java:304)[spring-context-support-3.1.1.RELEASE.jar:3.1.1.RELEASE]
.....
和码头的有线日志:
WARN org.eclipse.jetty.util.log-/freemarker/
我不知道发生了什么事!因此,我用另一个名称替换了“templateLoaderPath”的值,如“/WEB-INF/tmpl freemarker/”,然后一切都是可行的强>
接下来,我尝试使用测试“/WEB-INF/freemarker/html.ftl”。结果如下:
Resource under /WEB-INF/freemarker/: null
我的测试代码:
@Inject
私有ServletContext ServletContext;
试一试{
logger.info(“在/WEB-INF/freemarker/:{},servletContext.getResource(“/WEB-INF/freemarker/html.ftl”)下的资源);
}捕获(例外e){
logger.info(“获取资源时异常”,e);
}
似乎也无法正确找到“/WEB-INF/freemarker/”下的资源。但我不确定Spring的ServletContext的对象是否与JavaServlet的正常环境中的对象相同
我使用的是FreeMarker 2.3.19、Springframework 3.1.1.RELEASE和jetty maven插件7.4.5.v20110725,它们都是maven的插件。我和你的问题一样。我尝试为“org.springframework.web.servlet.view.freemarker.freemarkerconfiguer”打开日志级别“DEBUG”。我发现了以下消息:
@Configuration
@EnableWebMvc
@ImportResource("classpath:/security-integration.xml")
@ComponentScan("com.springway")
public class WebConfiguration extends WebMvcConfigurerAdapter {
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}
@Bean
public FreeMarkerViewResolver viewResolver() {
FreeMarkerViewResolver freeMarkerViewResolver = new FreeMarkerViewResolver();
freeMarkerViewResolver.setCache(true);
freeMarkerViewResolver.setPrefix("");
freeMarkerViewResolver.setSuffix(".ftl");
return freeMarkerViewResolver;
}
@Bean
public FreeMarkerConfigurer freemarkerConfig() {
FreeMarkerConfigurer freeMarkerConfigurer = new FreeMarkerConfigurer();
freeMarkerConfigurer.setTemplateLoaderPath("/WEB-INF/freemarker/");
Properties settings = new Properties();
settings.setProperty("number_format", "0.######");
freeMarkerConfigurer.setFreemarkerSettings(settings);
Map variables = new java.util.HashMap<String, Object>();
variables.put("xml_escape", new XmlEscape());
freeMarkerConfigurer.setFreemarkerVariables(variables);
return freeMarkerConfigurer;
}
}
java.io.FileNotFoundException:ServletContext资源[/WEB-INF/freemarker/]无法解析为URL,因为它不存在
在org.springframework.web.context.support.ServletContextResource.getURL(ServletContextResource.java:154)~[spring-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
在org.springframework.web.context.support.ServletContextResource.getFile(ServletContextResource.java:169)~[spring-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
在org.springframework.ui.freemark.FreeMarkerConfigurationFactory.getTemplateLoaderFormath(FreeMarkerConfigurationFactory.java:351)[spring-context-support-3.1.1.RELEASE.jar:3.1.1.RELEASE]
在org.springframework.ui.freemark.FreeMarkerConfigurationFactory.createConfiguration(FreeMarkerConfigurationFactory.java:304)[spring-context-support-3.1.1.RELEASE.jar:3.1.1.RELEASE]
.....
和码头的有线日志:
WARN org.eclipse.jetty.util.log-/freemarker/
我不知道发生了什么事!因此,我用另一个名称替换了“templateLoaderPath”的值,如“/WEB-INF/tmpl freemarker/”,然后一切都是可行的强>
接下来,我尝试使用测试“/WEB-INF/freemarker/html.ftl”。结果如下:
Resource under /WEB-INF/freemarker/: null
我的测试代码:
@Inject
私有ServletContext ServletContext;
试一试{
logger.info(“在/WEB-INF/freemarker/:{},servletContext.getResource(“/WEB-INF/freemarker/html.ftl”)下的资源);
}捕获(例外e){
logger.info(“获取资源时异常”,e);
}
似乎也无法正确找到“/WEB-INF/freemarker/”下的资源。但我不确定Spring的ServletContext的对象是否与JavaServlet的正常环境中的对象相同
我使用的是FreeMarker 2.3.19、Springframework 3.1.1.RELEASE和jetty maven插件7.4.5.v20110725
@Configuration
@EnableWebMvc
@ImportResource("classpath:/security-integration.xml")
@ComponentScan("com.springway")
public class WebConfiguration extends WebMvcConfigurerAdapter {
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}
@Bean
public FreeMarkerViewResolver viewResolver() {
FreeMarkerViewResolver freeMarkerViewResolver = new FreeMarkerViewResolver();
freeMarkerViewResolver.setCache(true);
freeMarkerViewResolver.setPrefix("");
freeMarkerViewResolver.setSuffix(".ftl");
return freeMarkerViewResolver;
}
@Bean
public FreeMarkerConfigurer freemarkerConfig() {
FreeMarkerConfigurer freeMarkerConfigurer = new FreeMarkerConfigurer();
freeMarkerConfigurer.setTemplateLoaderPath("/WEB-INF/freemarker/");
Properties settings = new Properties();
settings.setProperty("number_format", "0.######");
freeMarkerConfigurer.setFreemarkerSettings(settings);
Map variables = new java.util.HashMap<String, Object>();
variables.put("xml_escape", new XmlEscape());
freeMarkerConfigurer.setFreemarkerVariables(variables);
return freeMarkerConfigurer;
}
}
@EnableWebMvc
@ImportResource(“classpath:/security integration.xml”)
@组件扫描(“com.springway”)
公共类网络配置扩展了WebMVCConfigureAdapter{
public void addResourceHandlers(ResourceHandlerRegistry注册表){
registry.addResourceHandler(“/resources/**”).addResourceLocations(“/resources/”);
}
@豆子
public FreeMarkerViewResolver viewsolver(){
FreeMarkerViewResolver FreeMarkerViewResolver=新建FreeMarkerViewResolver();
freemarkervewresolver.setCache(true);
freeMarkerViewResolver.setPrefix(“”);
freeMarkerViewResolver.setSuffix(“.ftl”);
返回freemarkervewersolver;
}
@豆子
public freemarkerconfiguer freemarkerConfig(){
freemarkerconfiguer freemarkerconfiguer=新的freemarkerconfiguer();
Freemarker配置
import org.springframework.web.portlet.ModelAndView;
import org.springframework.web.servlet.ModelAndView;