【学习笔记】FreeMarker 之于Servlet与Stuts2的应用

时间:2022-09-13 19:30:42

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

准备环境:

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

举例项目结构图:

【学习笔记】FreeMarker 之于Servlet与Stuts2的应用

创建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查看输出:

【学习笔记】FreeMarker 之于Servlet与Stuts2的应用


Struts2实现FreeMarker模板应用:

准备环境:

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

举例项目结构图:

【学习笔记】FreeMarker 之于Servlet与Stuts2的应用

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的应用

【学习笔记】FreeMarker 之于Servlet与Stuts2的应用

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

  1. Servlet学习笔记&lpar;1&rpar;--第一个servlet&amp&semi;&amp&semi;三种状态对象&lpar;cookie&comma;session&comma;application&rpar;&amp&semi;&amp&semi;Servlet的生命周期

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

  2. Struts2学习笔记&lpar;五&rpar;——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. &lbrack;Spring MVC&rsqb;学习笔记--基础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. Python模块之day4

    模块,代码归类实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才能 ...

  2. KMP快速字符串匹配

    KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现.KMP算法的关键是利用匹配失败后的信息,从错误中吸取经验,尽量减少模式串与主串的匹配次数以 ...

  3. Opserver监控工具的使用

    Opserver监控工具的使用 Opserver是Stack Overflow的开源监控解决方案,由Stack Exchange发布,基于.NET框架构建.开源地址:https://github.co ...

  4. 从TP、FP、TN、FN到ROC曲线、miss rate、行人检测评估

    从TP.FP.TN.FN到ROC曲线.miss rate.行人检测评估 想要在行人检测的evaluation阶段要计算miss rate,就要从True Positive Rate讲起:miss ra ...

  5. Max批量导出工具

    Max批量导出工具 http://www.paulneale.com/scripts/batchItMax/batchItMax.htm Scripts Batch It Max: Batch It ...

  6. trackr&colon; An AngularJS app with a Java 8 backend – Part I

    该系列文章来自techdev 我想分享在techdev公司开发的项目-trackr-的一些最新的见解.trackr是一个用来跟踪我们的工作时间,创建报告和管理请假的web应用程序.做这个程序的目的有两 ...

  7. 理解&ast;ptr&plus;&plus;

    这是C语言中指针的基本用法之一,我们先来看一个小例子.下面是代码: int main(void) { char *p = "Hello"; while(*p++) printf(& ...

  8. c&num; 柱状图(转载)

    // c# 显示柱状图 using System; using System.Data; using System.Configuration; using System.Web; using Sys ...

  9. xzzx

    创建包: CREATE OR REPLACE PACKAGE WYL_TEST_PKG_GGYW_XZZX IS -- Purpose : 公共业务-参保险种注销 --注销选择的险种,并将参保缴费信息 ...

  10. iOS 面试题&colon;OC标题的基本概念&amp&semi;lt&semi;延续&amp&semi;gt&semi;

    第一,如何确定一个方法方法名称 删除减号,加,删除返回值,删除参数类型,删除参数,剩下的就是的方法名 秒,id,能够用assign,copy,retain,依据须要使用 第三,autorelease ...