Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用servlet运行Freemarker模板?_Java_Jsp_Tomcat_Servlets_Freemarker - Fatal编程技术网

Java 如何使用servlet运行Freemarker模板?

Java 如何使用servlet运行Freemarker模板?,java,jsp,tomcat,servlets,freemarker,Java,Jsp,Tomcat,Servlets,Freemarker,我正在用Freemarker模板编写应用程序。我通过Java类了解了如何配置和运行.ftl模板机制,并将控制台或文件输出到上面打印模板结果 但是如何在servlet上实现呢?它是如何工作的?我试图在类似Tomcat的.jsp文件上运行.ftl文件。但它只给我一个错误(“说明请求的资源不可用”) 有人能告诉我如何在servlet上运行.ftl文件吗 这是我的web.xml: <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xs

我正在用Freemarker模板编写应用程序。我通过Java类了解了如何配置和运行.ftl模板机制,并将控制台或文件输出到上面打印模板结果

但是如何在servlet上实现呢?它是如何工作的?我试图在类似Tomcat的.jsp文件上运行.ftl文件。但它只给我一个错误(“说明请求的资源不可用”)

有人能告诉我如何在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>

自由标记
freemarker.ext.servlet.FreemarkerServlet
模板路径
/
诺卡奇
真的
内容类型
text/html;字符集=UTF-8
不兼容的改进
2.3.22
模板\u异常\u处理程序
重演
模板更新延迟
0
默认_编码
UTF-8
场所
恩努斯
数字格式
0.##########
1.
自由标记
*.ftl
雄猫
org.springframework.web.servlet.DispatcherServlet
1.
雄猫
/

这是我的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();
    }
}
publicstaticvoidmain(字符串[]args){
ApplicationContext上下文=
新的ClassPathXmlApplicationContext(“context.xml”);
FreeMarkerConfiguration配置包装器=
getBean(“freeMarkerConf”,FreeMarkerConfiguration.class);
Configuration cfg=configurationWrapper.getConfiguration();
试一试{
cfg.设置共享变量(“标题”、“共享标题”);
}捕获(TemplateModelException e1){
e1.printStackTrace();
}
映射数据=新的HashMap();
//data.put(“title”、“Hello”);
数据输入(“姓名”、“安德鲁”);
列表=新的ArrayList();
添加(“波兰”);
添加(“奥地利”);
列表。添加(“德国”);
添加(“匈牙利”);
数据。put(“国家”,列表);
Writer out=新的OutputStreamWriter(System.out);
试一试{
模板模板=cfg.getTemplate(“index.ftl”);
模板、流程(数据、输出);
TemplateTemplate2=cfg.getTemplate(“list.ftl”);
模板2.过程(数据,输出);
}捕获(例外e){
e、 printStackTrace();
}
试一试{
out.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}

要在Java servlet中使用FreeMarker,请执行以下简单步骤:

  • 添加Maven依赖项

    <dependency>
        <groupId>org.freemarker</groupId>
        <artifactId>freemarker</artifactId>
        <version>${freemarker-version}</version>
    </dependency>   
    
  • 清洁和建设


  • 看看my,它展示了如何在Java控制台、Servlet和Spring引导应用程序中设置FreeMarker。

    要将FreeMarker与Java Servlet一起使用,请执行以下简单步骤:

  • 添加Maven依赖项

    <dependency>
        <groupId>org.freemarker</groupId>
        <artifactId>freemarker</artifactId>
        <version>${freemarker-version}</version>
    </dependency>   
    
  • 清洁和建设


  • 看看my,它展示了如何在Java控制台、Servlet和Spring引导应用程序中设置FreeMarker。

    看看这个示例:很好的示例,但我的请求必须由Spring MVC控制器处理:您可以尝试以下示例:看看这个示例:很好的示例,但我的请求必须由Spring MVC控制器处理:您可以尝试以下示例: