首页 > 代码库 > SpringMVC与freemarker整合
SpringMVC与freemarker整合
FreeMark
FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。
特性
通用
能够生成各种文本:HTML、XML、RTF、Java源代码等等。
易于嵌入到产品中:轻量级;不需要Servlet环境。
插件式模板载入器:可以从任何源载入模板,如本地文件、数据库等等。
可以按所需生成文本:保存到本地文件;作为Email发送;从Web应用程序发送它返回给Web浏览器。
强大的模板语言
所有常用的指令:include、if/elseif/else、循环结构。
在模板中创建和改变变量。
几乎在任何地方都可以使用复杂表达式来指定值。
命名的宏,可以具有位置参数和嵌套内容。
名字空间有助于建立和维护可重用的宏库,或者将一个大工程分成模块,而不必担心名字冲突。
输出转换块:在嵌套模板片段生成输出时,转换HTML转义、压缩、语法高亮等等;可以定义自己的转换。
通用数据模型
FreeMarker不是直接反射到Java对象,Java对象通过插件式对象封装,以变量方式在模板中显示。
可以使用抽象(接口)方式表示对象(JavaBean、XML文档、SQL查询结果集等等),告诉模板开发者使用。方法,使其不受技术细节的打扰。
为Web准备
在模板语言中内建处理典型Web相关任务(如HTML转义)的结构。
能够集成到Model2 Web应用框架中作为JSP的替代。
支持JSP标记库。
为MVC模式设计:分离可视化设计和应用程序逻辑;分离页面设计员和程序员。
智能的国际化和本地化
字符集智能化(内部使用UNICODE)。
数字格式本地化敏感。
日期和时间格式本地化敏感。
非US字符集可以用作标识(如变量名)。
多种不同语言的相同模板。
强大的XML处理能力
<#recurse> 和<#visit>指令(2.3版本)用于递归遍历XML树。
在模板中清楚和直觉的访问XML对象模型。
使用方法
<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,通过doGet、doPost访问。servlet要在web.xml文件配置,这里就不在说明,下面将会对一些地方进行说明。
访问这个servlet都要先初始化这个方法。message.html
<#list Content as con> <#list con?keys as mapkey> <ul class="chatPanel"> <li class="media mediaFullText"> <a href=http://www.mamicode.com/"">>页面的我就不详细介绍了
springMVC与FreeMarker整合
springMVC配置这里也不做介绍,请自行百度。这里只给出freemark的配置<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="templateLoaderPath" value=http://www.mamicode.com/"/WEB-INF/view/" /> >至于springMVC将数据传回页面有两种方式,一种是ModelAndView,另一种是ModelMap.ModelAndViewpublic 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; }上面代码中的hello就是对应的模板文件,title和content在页面中可以直接通过${title}和${content}取得${title!}这样写可以防止title没有值而在页面中报错,加上感叹号后没有值也不会显示ModelMappublic String doLogin(HttpServletRequest req, HttpServletResponse resp, ModelMap modelMap) throws Exception { modelMap.put("base", Constants.CONTEXTPATH); return ""; }个人倾向于ModelMap,使用起来比较方便,return 后面的就是页面文件(这里没有填写),前缀和后缀需要在spring配置文件中配置,freemark没有说一定要ftl文件,所以其他文件也可以。如何访问静态资源
SpringMVC与freemarker整合
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。