Freemarkerは、それがより一般的なものになるように、使用されているコンテキストを知らないように意図的に設計されていることを理解することが重要です。これは、JSPとは異なり、デフォルトではHttpServletRequestおよびResponseオブジェクトへのアクセス権がないことを意味します。アクセス権を持っている場合は、それを提供する必要があります。
私がこれを解決したのは、Freemarkerがアクセスできるリクエスト属性としてHttpServletRequestオブジェクトを追加するServlet Filterを作成することでした。
あなたはそれが機能するためには、あなたのweb.xmlにこれを定義する必要があります
/**
* This simple filter adds the HttpServletRequest object to the Request Attributes with the key "RequestObject"
* so that it can be referenced from Freemarker.
*/
public class RequestObjectAttributeFilter implements Filter
{
/**
*
*/
public void init(FilterConfig paramFilterConfig) throws ServletException
{
}
public void doFilter(ServletRequest req,
ServletResponse res, FilterChain filterChain)
throws IOException, ServletException
{
req.setAttribute("RequestObject", req);
filterChain.doFilter(req, res);
}
public void destroy()
{
}
}
:
:
<filter>
<filter-name>RequestObjectAttributeFilter</filter-name>
<filter-class>com.foo.filter.RequestObjectAttributeFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>RequestObjectAttributeFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
その後、私の.ftlファイルで、私は次のように使用することができます
${Request.RequestObject.getServerName()}
FreemarkerにはpageContextがありませんが、私はRequestオブジェクトを持っています。どのようにしてホスト名を取得できますか? –