FreeMark
FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。
特性
<pre name="code" class="java">public class FreeMarker extends HttpServlet { private Configuration cfg; protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException { // 建立数据模型 String page = req.getParameter("page"); List root = DataQuery.dynamicQuery("", page); Map map = new HashMap(); map.put("Content", root); map.put("page", DataQuery.pageHtml(2, page)); // 取得模版文件 Template t = cfg.getTemplate("message.html", "UTF-8"); // 开始准备生成输出 // 使用模版文件的charset作为本页面的charset // 使用text/html MIME-type response.setContentType("text/html; charset=" + t.getEncoding()); PrintWriter out = response.getWriter(); // 合并数据模型和模版,并将结果输出到out中 try { t.process(map, out);// 用模板来开发servlet可以只在代码里面加入动态的数据 } catch (TemplateException e) { throw new ServletException("处理Template模版中出现错误", e); } } protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } public void init() throws ServletException { // 初始化FreeMarker配置 // 创建一个Configuration实例 cfg = new Configuration(); // 设置FreeMarker的模版文件位置 cfg.setServletContextForTemplateLoading(getServletContext(), ""); } }
访问这个servlet都要先初始化这个方法。message.html
<#list Content as con> <#list con?keys as mapkey> <ul class="chatPanel"> <li class="media mediaFullText"> <a href=""> <div class="mediaPanel"> <div class="mediaHead"><span class="title">${con[mapkey].IF_theme}</span><span class="time">${con[mapkey].IF_time}</span> <span class="count" style="font-size:2px;color: #8C8C8C;">阅读次数${con[mapkey].IF_readNum}</span> <div class="clr"></div> </div> <div class="mediaImg"></div> <div class="mediaContent mediaContentP"> <p></p> </div> <div class="mediaFooter"> <span class="mesgIcon right"></span><span style="line-height:50px;" class="left">查看全文</span> <div class="clr"></div> </div> </div> </a> </li> </#list> </#list>页面的我就不详细介绍了
springMVC与FreeMarker整合
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="templateLoaderPath" value="/WEB-INF/view/" /> <property name="freemarkerSettings"> <props> <prop key="template_update_delay">0</prop> <prop key="default_encoding">UTF-8</prop> <prop key="number_format">0.##########</prop> <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop> <prop key="classic_compatible">true</prop> <prop key="template_exception_handler">ignore</prop> </props> </property> </bean>至于springMVC将数据传回页面有两种方式,一种是ModelAndView,另一种是ModelMap.
public ModelAndView freeMark(HttpServletRequest req, HttpServletResponse resp) throws Exception { ModelAndView mv = new ModelAndView("hello"); mv.addObject("title", "Spring MVC And Freemarker"); mv.addObject("content", " Hello world , test my first spring mvc ! "); return mv; }
public String doLogin(HttpServletRequest req, HttpServletResponse resp, ModelMap modelMap) throws Exception { modelMap.put("base", Constants.CONTEXTPATH); return ""; }个人倾向于ModelMap,使用起来比较方便,return 后面的就是页面文件(这里没有填写),前缀和后缀需要在spring配置文件中配置,freemark没有说一定要ftl文件,所以其他文件也可以。
如何访问静态资源
原文地址:http://blog.csdn.net/u013239111/article/details/42290335