It mainly involves three files
1. testservlet. Java is as follows:
Package example; import freemarker. template. configuration; import freemarker. template. template; import freemarker. template. templateexception; import Java. io. bufferedwriter; import Java. io. file; import Java. io. filewriter; import Java. io. ioexception; import Java. io. printwriter; import Java. text. simpledateformat; import Java. util. arraylist; import Java. util. calendar; import Java. util. date; import Java. util. hashmap; Import Java. util. list; import Java. util. map; import Java. util. logging. level; import Java. util. logging. logger; import javax. servlet. servletexception; import javax. servlet. HTTP. httpservlet; import javax. servlet. HTTP. httpservletrequest; import javax. servlet. HTTP. httpservletresponse;/*** test * @ author Wesley */public class testservlet extends httpservlet {private configuration CFG; protected void processreque ST (httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {// initialize freemarker configuration, create configuration instance CFG = new configuration (); cfg. setdefaultencoding ("UTF-8"); // set the position of the freemarker template file cfg. setservletcontextfortemplateloading (getservletcontext (), "templates"); // create the data model map root = new hashmap (); // put the corresponding data root. put ("title", "Use freemarker to generate static page instances! "); Root. put ("content", "freemarker is a template engine and a common tool for generating text output based on templates. It is designed to generate HTML web pages by writing freemarker in pure Java, especially for MVC-based applications, although freemarker has some programming capabilities, the Java program usually prepares the data to be displayed, the freemarker generates a page, and the prepared data (such as) is displayed through the template) "); root. put ("author", "Xiao Qiu"); root. put ("Answer", 43); map latestmap = new hashmap (); latestmap. put ("url", "www.baidu.com"); latestmap. put ("name", "Green mouse"); root. put ("latestmap", latestmap); root. put ("indexof", n EW indexofmethod (); List <Map <string, Object> List = new arraylist <Map <string, Object> (); Map <string, object> map11 = new hashmap <string, Object> (); map11.put ("name", "qiuyujiao1"); map11.put ("Age", 21); list. add (map11); Map <string, Object> map22 = new hashmap <string, Object> (); map22.put ("name", "qiuyujiao2"); map22.put ("Age ", 22); list. add (map22); Map <string, Object> map33 = new hashmap <string, Object> (); map33.put ("name", "qiuyujiao3"); map33.put ("Age", 23); list. add (map33); Map <string, Object> map44 = new hashmap <string, Object> (); map44.put ("name", "qiuyujiao4"); map44.put ("Age ", 24); list. add (map44); root. put ("listtest", list); // end model creation --- // obtain the template file template = cfg. gettemplate ("test. FTL "); // start preparing to generate the output, and use the charset of the template file as the charset response of this page. setcontenttype ("text/html; charset =" + T Emplate. getencoding (); printwriter = response. getwriter (); try {// merge the data model and template, and output the result to printwriter (put the data in printwriter to generate a dynamic page) template. process (root, printwriter); file newhtml = gethtmlfile (); dowrite (template, newhtml. getpath (), root); // generate the static page printwriter. print ("<a href = '" + "2013-01-23" + "/" + newhtml. getname () + "'>" + newhtml. getname () + "</a>"); // string Path = dirname + "/" + newhtml. getna Me (); // httpsession session = request. getsession (true); // session. setattribute ("path", PATH);} catch (exception ex) {// logger. getlogger (testservlet. class. getname ()). log (level. severe, null, ex); throw new servletexception ("error occurred in template processing", ex) ;}/ *** to get the generated file, to obtain the file name and path * @ return generated file */private file gethtmlfile () {long htmlname = calendar. getinstance (). gettimeinmillis (); D Ate date = new date (htmlname); simpledateformat F = new simpledateformat ("yyyy-mm-dd"); string dirname = f. format (date); // The directory that stores the generated static page. For example: 2008-9-9 string savedirectory = getservletcontext (). getrealpath ("/") + dirname + "//"; file dir = new file (savedirectory); // If the directory does not exist, create the directory if (! Dir. exists () {dir. mkdir () ;}// generate static file newhtml = new file (DIR + "/" + htmlname + ". html "); Return newhtml;}/*** generate static file * @ Param template: Template * @ Param path: Static Page path * @ Param root: data Model */private void dowrite (template, string path, Map <string, Object> root) {bufferedwriter BW = NULL; try {BW = new bufferedwriter (New filewriter (PATH); template. setencoding (CFG. getdefaultencoding (); template. process (root, BW); BW. flush ();} catch (templateexception ex) {logger. getlogger (testservlet. class. getname ()). log (level. severe, null, ex);} catch (ioexception ex) {logger. getlogger (testservlet. class. getname ()). log (level. severe, null, ex);} finally {try {BW. close ();} catch (ioexception ex) {logger. getlogger (testservlet. class. getname ()). log (level. severe, null, ex) ;}}@ override protected void doget (httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {processrequest (request, response );} @ override protected void dopost (httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {processrequest (request, response );}}
2. The template file rest. example is as follows:
<HTML>
3. The attached method variable class indexofmethod. Java is as follows:
package example;import java.util.List;import freemarker.template.SimpleNumber;import freemarker.template.TemplateMethodModel;import freemarker.template.TemplateModelException;public class IndexOfMethod implements TemplateMethodModel {public Object exec(List args) throws TemplateModelException {// TODO Auto-generated method stubif (args.size() != 2) {throw new TemplateModelException("Wrong arguments");}return new SimpleNumber(((String) args.get(1)).indexOf((String) args.get(0)));}}
The simple project structure is as follows: