FreeMarker应用在Servlet(0配置web.xml形式):

准备环境:

tomcat7、eclipse最新版、jdk1.8、freemarker v2.3.20.jar

举例项目结构图:

创建DynamicWebProject,在WEB-INF/lib中引入freemarker.jar

在WEB-INF下创建templates文件夹,在templates文件夹下创建test.ftl模板文件

 <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Test Freemarker by servlet</title>
</head>
<body>
${message}
</body>
</html>

创建FreeMarkerServlet

 package com.github.hellxz;

 import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException; /**
* Servlet implementation class FreeMarkerServlet
*/
@SuppressWarnings("serial")
@WebServlet("/test")
public class FreeMarkerServlet extends HttpServlet { Configuration conf; //声明FreeMarker配置文件
@Override
public void init() throws ServletException {
super.init();
conf = new Configuration();//初始化FreeMarker配置文件
//设置模板文件目录
conf.setServletContextForTemplateLoading(getServletContext(), "/WEB-INF/templates");
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//数据模型
Map<String,Object> root = new HashMap<>();
root.put("message", "本条消息由servlet转发FreeMarker展现");
//设置字符集,防止乱码
response.setCharacterEncoding("UTF-8");
//获取输出流
PrintWriter writer = response.getWriter();
//获取模板
Template template = conf.getTemplate("test.ftl");
try {
//生成html文件并输出
template.process(root, writer);
} catch (TemplateException e) {
e.printStackTrace();
}
writer.flush();
writer.close();
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
} }

启动tomcat查看输出:


Struts2实现FreeMarker模板应用:

准备环境:

struts-2.5.14.1(min)、tomcat7、eclipse最新版、jdk1.8、freemarker v2.3.20.jar

举例项目结构图:

lib中引入官网下载的struts2 min必要jar包

将struts2.core解压找到struts-tags.tld放入WEB-INF中(为了能让模板支持类struts标签)

WebContent下新建success.ftl模板文件:

 <#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] /> <#--这一句是为了让Freemarker识别struts2的标签 -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<h1>${companyName}</h1>
<@s.form action="reg" >
<@s.textfield label="用户名" name="uname" />
<@s.submit />
</@s.form>
</body>
</html>

WEB-INF下创建web.xml文件(filter-class中注掉的是老版本的,请按照实际能找到的类进行配置,否则会报ClassNotFoundException)

 <?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
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">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
<!-- org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter -->
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <servlet>
<servlet-name>freemarker</servlet-name>
<servlet-class>
freemarker.ext.servlet.FreemarkerServlet
</servlet-class>
<!--下面的配置freemarke的ftl文件的位置 -->
<init-param>
<param-name>TemplatePath</param-name>
<param-value>/</param-value>
</init-param>
<!-- 是否和服务器(tommcat)一起启动。0为不。1为是-->
<load-on-startup>1</load-on-startup>
</servlet> <servlet-mapping>
<servlet-name>freemarker</servlet-name>
<url-pattern>*.ftl</url-pattern>
</servlet-mapping> <servlet>
<!-- define a JspSupportServlet Object -->
<servlet-name>JspSupportServlet</servlet-name>
<servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class>
<!-- setting JspSupportServlet auto start -->
<load-on-startup>1</load-on-startup>
</servlet> </web-app>

在src下新建TestAction类(注意包名):

 package test;

 import com.opensymphony.xwork2.ActionSupport;

 public class TestAction extends ActionSupport {

     private String companyName="北京尚学堂";

     //不指定方法默认执行此方法
public String execute() throws Exception {
System.out.println("TestAction.execute()");
return SUCCESS;
} public String getCompanyName() {
return companyName;
} public void setCompanyName(String companyName) {
this.companyName = companyName;
} }

src下创建struts.xml

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.i18n.encoding" value="utf8" />
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<package name="default" extends="struts-default">
<action name="test" class="test.TestAction">
<result name="success" type="freemarker">success.ftl</result>
</action>
</package> </struts>

启动tomcat并测试:

【学习笔记】FreeMarker 之于Servlet与Stuts2的应用的更多相关文章

  1. Servlet学习笔记(1)--第一个servlet&&三种状态对象(cookie,session,application)&&Servlet的生命周期

    servlet的404错误困扰了两天,各种方法都试过了,翻书逛论坛终于把问题解决了,写此博客来纪念自己的第一个servlet经历. 下面我会将自己的编写第一个servlet的详细过程提供给初学者,大神 ...

  2. Struts2学习笔记(五)——Action访问Servlet API

    在Strut2中访问Servlet API有三种方式: 1.通过ActionContext访问Servlet API,推荐使用这种,但是这种方案它获取的不是真正的事Servlet API. 步骤: 1 ...

  3. Javaweb学习笔记——(九)——————Servlet的进入,及ServletConfig、GenericServlet、HttpServlet、ServletContext、获取类路径资源

    Servlet1.什么是Servlet? *Servlet是Javaweb三大组件之一(Servlet,Filter,Listener) *Servlet是用来处理客户端请求的动态资源 *Servle ...

  4. Java学习笔记之:Java Servlet 过滤器配置

    一.步骤 1.创建一类实现Filter接口,重写父类的方法 public class SimpleFilter implements Filter { public void destroy() { ...

  5. Java学习笔记之:Java Servlet环境配置

    一.介绍 Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层. 使用 ...

  6. JavaWeb学习笔记(三)—— Servlet

    一.Servlet概述 1.1 什么是Servlet Servlet是是sun公司提供一套规范(接口),是JavaWeb的三大组件之一(Servlet.Filter.Listener),它属于动态资源 ...

  7. [Spring MVC]学习笔记--基础Servlet

    Servlet是一个用Java编写的应用程序,在服务器上运行,处理请求的信息并将其发送到客户端. Servlet的客户端提出请求并获得该请求的响应. 对于所有的客户端请求,只需要创建Servlet的实 ...

  8. Servlet学习笔记01——什么是servlet?

    1.什么是Servlet? sun公司制订的一种用来扩展web服务器功能的组件规范. (1)扩展web服务器功能 早期的web服务器(apache web server,iis) 只能处理静态资源的请 ...

  9. Java Servlet学习笔记(四)Servlet客户端Http请求

    Servlet 客户端 HTTP 请求 当浏览器请求网页时,它会向 Web 服务器发送特定信息,这些信息不能被直接读取,因为这些信息是作为 HTTP 请求的头的一部分进行传输的.您可以查看 HTTP ...

随机推荐

  1. Linux上多次restore Tensorflow模型报错

    环境:python3,tensotflow 在恢复了预先训练好的模型进行预测时,第一次是能够成功执行的,但我多次restore模型时,出现了以下问题: 1.ValueError: Variable c ...

  2. 解决在Mac上用pyenv安装python3失败的问题

    背景 前段时间在本地Mac系统上要跑一个python3写的压测脚本. Mac默认安装的是python2, 而且很多软件依赖的也是python2. 为了不影响现有系统其它软件, 当时安装了pyenv来实 ...

  3. vue2.0 keep-alive 最佳实战(转载)

    1.基本用法 vue2.0提供了一个keep-alive组件用来缓存组件,避免多次加载相应的组件,减少性能消耗 <keep-alive> <component> <!-- ...

  4. HDU 2078 复习时间

    http://acm.hdu.edu.cn/showproblem.php?pid=2078 Problem Description 为了能过个好年,xhd开始复习了,于是每天晚上背着书往教室跑.xh ...

  5. 第215天:Angular---指令

    指令(Directive) AngularJS 有一套完整的.可扩展的.用来帮助 Web 应用开发的指令集 在 DOM 编译期间,和 HTML 关联着的指令会被检测到,并且被执行 在 AngularJ ...

  6. matlab gradient 和 prctile

    介绍两个matlab小函数: 1.gradient 借用别人的例子:例:>> x=[6,9,3,4,0;5,4,1,2,5;6,7,7,8,0;7,8,9,10,0]x =     6  ...

  7. unix常用命令记录

    1. ls 命令:列出文件及文件夹 ls -a 列出目录下的所有文件,包括以 . 开头的隐含文件.ls -b 把文件名中不可输出的字符用反斜杠加字符编号(就象在C语言里一样)的形式列出.ls -c 输 ...

  8. git gitosis 添加项目

    example: 1, user@my-test:~/perl_src$ git inituser@my-test:~/perl_src$ git add .user@my-test:~/perl_s ...

  9. MT【156】特例$a_n=\dfrac{6}{\pi n^2}$

    设无穷非负数列$\{a_n\}$满足$a_n+a_{n+2}\ge2 a_{n+1},\sum\limits_{i=1}^{n}{a_i}\le1$,证明:$0\le a_n-a_{n+1}\le\d ...

  10. BZOJ2276 [Poi2011]Temperature 【单调队列】

    题目链接 BZOJ2276 题解 一开始看错题,以为求的是可以不连续的,想出一个奇怪的线段树,发现空间根本开不下?? 题目要我们求连续的最长可能不下降区间 对于区间\([l,r]\)如果合法,当且仅当 ...