Spring mvc 使用SpringMVC在freemarker中获取服务器名称和方案?
我正在使用Freemarker作为SpringMVC应用程序的视图技术。我需要找到服务器名称和方案,但我尝试的似乎都不起作用。在JSP中,有一个隐式的Spring mvc 使用SpringMVC在freemarker中获取服务器名称和方案?,spring-mvc,freemarker,Spring Mvc,Freemarker,我正在使用Freemarker作为SpringMVC应用程序的视图技术。我需要找到服务器名称和方案,但我尝试的似乎都不起作用。在JSP中,有一个隐式的请求对象将包含此信息,但Freemarker似乎没有相应的对象。我将SpringrequestContext公开为rc,但rc.request为空 以下是我的视图解析器配置: <bean id="freemarkerViewResolver" class="org.springframework.web.servlet.view.fr
请求
对象将包含此信息,但Freemarker似乎没有相应的对象。我将SpringrequestContext
公开为rc
,但rc.request
为空
以下是我的视图解析器配置:
<bean id="freemarkerViewResolver"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="cache" value="false" />
<property name="suffix" value=".ftl" />
<property name="order" value="1" />
<property name="exposeRequestAttributes" value="true" />
<property name="requestContextAttribute" value="rc" />
<property name="exposeSpringMacroHelpers" value="true" />
</bean>
<bean id="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPaths">
<list>
<value>${freemarker.templatePath}</value>
</list>
</property>
<property name="defaultEncoding" value="UTF-8" />
</bean>
${freemarker.templatePath}
我认为您无法通过rc.Request
访问请求,因为RequestContext#getRequest
受到保护,即无法从FreeMarker/reflection访问
免责声明:我根本不是SpringMVC专家,所以下面的方法可能是完全疯狂的,但它应该可以工作
您可以使用自定义的FreeMarkerView
和freemarkervewresolver
公开原始请求,例如
public class CustomFreeMarkerView extends FreeMarkerView {
protected SimpleHash buildTemplateModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) {
SimpleHash fmModel = super.buildTemplateModel(model, request, response);
fmModel.put("RawRequest", request);
return fmModel;
}
}
public class CustomFreeMarkerViewResolver extends AbstractTemplateViewResolver {
public CustomFreeMarkerViewResolver() {
setViewClass(requiredViewClass());
}
@Override
protected Class requiredViewClass() {
return CustomFreeMarkerView.class;
}
}
Scheme: ${RawRequest.scheme}
Server Name: ${RawRequest.serverName}
这种方法在Spring Framework 3.0.5中非常有效。我认为您无法通过
rc.Request
访问请求,因为RequestContext\getRequest
受到保护,即无法从FreeMarker/reflection访问
免责声明:我根本不是SpringMVC专家,所以下面的方法可能是完全疯狂的,但它应该可以工作
您可以使用自定义的FreeMarkerView
和freemarkervewresolver
公开原始请求,例如
public class CustomFreeMarkerView extends FreeMarkerView {
protected SimpleHash buildTemplateModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) {
SimpleHash fmModel = super.buildTemplateModel(model, request, response);
fmModel.put("RawRequest", request);
return fmModel;
}
}
public class CustomFreeMarkerViewResolver extends AbstractTemplateViewResolver {
public CustomFreeMarkerViewResolver() {
setViewClass(requiredViewClass());
}
@Override
protected Class requiredViewClass() {
return CustomFreeMarkerView.class;
}
}
Scheme: ${RawRequest.scheme}
Server Name: ${RawRequest.serverName}
这种方法在SpringFramework3.0.5中适用。Hm,应该可以。我想我可以加入
响应
和会话
,以确保完整性。我只是想知道为什么它还没有这样做?Spring MVC已经向模板公开了请求,但包装为FreeMarker HttpRequestHashModel,它只提供对servlet请求属性的访问,而不提供像serverName或scheme.Hm这样的请求属性,应该可以。我想我可以加入响应
和会话
,以确保完整性。我只是想知道为什么它还没有这样做?Spring MVC已经将请求公开给模板,但包装为FreeMarker HttpRequestHashModel,它只提供对servlet请求属性的访问,而不提供对请求属性(如serverName或scheme)的访问。