我正在用Freemarker模板编写应用程序。我通过Java类获得了如何配置和运行. ftl模板机制的知识,并使控制台或文件输出在上面打印模板结果。
但是如何在servlet上实现呢?它是如何工作的?我想跑。类似Tomcat的ftl文件。jsp文件。但它只给我一个错误(“说明请求的资源不可用”)。
有人能给我解释一下怎么跑吗。servlet上的ftl文件?
这是我的web.xml:
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-name>freemarker</servlet-name>
<servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
<!-- FreemarkerServlet settings: -->
<init-param>
<param-name>TemplatePath</param-name>
<param-value>/</param-value>
</init-param>
<init-param>
<param-name>NoCache</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>ContentType</param-name>
<param-value>text/html; charset=UTF-8</param-value> <!-- Forces UTF-8 output encoding! -->
</init-param>
<!-- FreeMarker settings: -->
<init-param>
<param-name>incompatible_improvements</param-name>
<param-value>2.3.22</param-value>
<!-- Recommended to set to a high value. For the details, see the Java
API docs of freemarker.template.Configuration#Configuration(Version). -->
</init-param>
<init-param>
<param-name>template_exception_handler</param-name>
<!-- Use "html_debug" instead during development! -->
<param-value>rethrow</param-value>
</init-param>
<init-param>
<param-name>template_update_delay</param-name>
<!-- ATTENTION, 0 is for development only! Use higher value otherwise. -->
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>default_encoding</param-name>
<!-- The encoding of the template files. -->
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>locale</param-name>
<!-- Influences number and date/time formatting, etc. -->
<param-value>en_US</param-value>
</init-param>
<init-param>
<param-name>number_format</param-name>
<param-value>0.##########</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>freemarker</servlet-name>
<url-pattern>*.ftl</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>tomcat</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>tomcat</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
这是我的Java代码,可以在控制台上打印输出:
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext("context.xml");
FreeMarkerConfiguration configurationWrapper =
context.getBean("freeMarkerConf", FreeMarkerConfiguration.class);
Configuration cfg = configurationWrapper.getConfiguration();
try {
cfg.setSharedVariable("title", "SharedTitle");
} catch (TemplateModelException e1) {
e1.printStackTrace();
}
Map<String, Object> data = new HashMap<String, Object>();
//data.put("title", "Hello");
data.put("name", "Andrew");
List<String> list = new ArrayList<>();
list.add("Poland");
list.add("Austria");
list.add("Germany");
list.add("Hungary");
data.put("countries", list);
Writer out = new OutputStreamWriter(System.out);
try {
Template template = cfg.getTemplate("index.ftl");
template.process(data, out);
Template template2 = cfg.getTemplate("list.ftl");
template2.process(data, out);
} catch (Exception e) {
e.printStackTrace();
}
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
要将FreeMarker与JavaServlet一起使用,请遵循以下简单步骤:
>
添加Maven依赖项。
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>${freemarker-version}</version>
</dependency>
在web.xml
文件中配置FreeMarker。从FreeMarker网站复制并粘贴设置。
将处理从Servlet分派到FreeMarker模板文件。
request.getRequestDispatcher("WEB-INF/views/show.ftl").forward(request, response);
清洁的
看看我的FreeMarker教程,它展示了如何在Java控制台、Servlet和Spring Boot应用程序中设置FreeMarker。
作为基础了解,在web应用程序范畴内使用 FreeMarker 和其它并没有什么不同; FreeMarker将它的输出写入传递给 Template.process 方法的 Writer 对象,它不关心 Writer 将输出写入控制台,文件或是 HttpServletResponse 的输出流。 FreeMarker 并不知道什么是servlet和web;它仅仅是使用模板文件来合并Java对象, 之
我正在制作这个新的servlet: 这是我在WEB-INF中的web.xml 创建动态web项目时,会自动生成display-name和welcome-file-list标记。servlet和servlet映射由我编写。当我使用Appache7运行项目时,它显示HTTP status404-/firstservlet/。我的错在哪里?
问题内容: 如何实例化servlet?如何使用session?如何共享变量?如何在多线程中使用? 问题答案: ServletContext 当servlet容器(如Apache Tomcat)启动时,它将部署并加载其所有Web应用程序。加载Web应用程序后,Servlet容器将创建ServletContext一次并将其保存在服务器的内存中。Web应用程序的web.xml所有包含的web-fragm
问题内容: 我根本不确定这是否是可以解决的问题,但是假设我有一个freemarker模板,我想问一下该模板使用了哪些变量。 就我的目的而言,我们可以假设freemarker模板非常简单- 只是“根级别”条目(此类模板的模型可以是简单的Map)。换句话说,我不需要处理要求嵌套结构等的模板。 问题答案: 我有相同的任务要从Java端的模板获取变量列表,除了使用反射之外,没有找到任何好的方法。我不确定是
我正在使用与Freemarker启动的Spring Boot。 给定以下字符串: 我试图对这个字符串执行一些验证,以确保它包含正确的Freemarker语法。 ----提示:如果已知失败的表达式在法律上引用了有时为null或缺少的内容,可以指定默认值,如myoptionalvar!mydefault,或者使用<#If myoptionalvar??>when-present<#else>when-
问题内容: 我想在我的JSF应用程序中上传文件。我正在使用和访问上载文件。 但是,返回一个空集合。如何在Tomcat7.0.8中的Servlet过滤器中启用解析? 问题答案: 为了获得在一个工作在Tomcat中,您需要设置在webapp的元素或。 因为根据Servlet3.0规范,该属性只能在带有注释的内使用。另请参阅元素的文档: 设置为Tomcat是否应在调用或时自动解析请求主体,即使目标ser