【学习笔记】FreeMarker 之于Servlet与Stuts2的应用
2018-02-18 22:07
726 查看
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并测试:
相关文章推荐
- Servlet 学习笔记 Session的设置及应用
- Servlet学习笔记(一)javaWeb应用基本
- 20160322servlet学习笔记Referer的防盗链应用
- SharePoint 应用的开发学习笔记(-)
- React学习笔记之高阶组件应用
- Servlet 学习笔记2:表单
- ServletAndJsp学习笔记--2
- Servlet 学习笔记5:HTTP应答头
- Kinect开发学习笔记之(一)Kinect介绍和应用 (转)
- Fiori学习笔记 - 预定义CSS的应用
- Java学习笔记之反射的应用-动态代理
- STM32学习及应用笔记一:SysTick定时器学习及应用
- Android(java)学习笔记68:同步代码块的锁和同步方法的应用
- iPhone/iPad高级应用与手游开发学习笔记:多点触摸与手势检测(三:UIPinchGestureRecognizer和UIRotationGestureRecognizer)
- sqlserver -- 学习笔记(八)体验charindex、stuff 和 for xml path在实际问题中的应用及几个问题的探讨
- php学习笔记------[php中面向对象三大特性之一[封装性]的应用]
- 我的内核学习笔记11:linux leds-gpio驱动应用实例
- 【D3D11游戏编程】学习笔记二十一:Cube Mapping及其应用之一:天空盒的实现
- Spring学习笔记(二十三):关于STS提示"javax.servlet.http.HttpServletRequest cant be resolved"的问题
- Servlet学习笔记 Servlet原理