入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

SpringMVC与freemarker整合

创建时间:2015-01-12 投稿人: 浏览次数:8328

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="">
      <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整合

springMVC配置这里也不做介绍,请自行百度。 这里只给出freemark的配置
<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. ModelAndView
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;  
    }  
上面代码中的hello就是对应的模板文件,title和content在页面中可以直接通过${title}和${content}取得 ${title!}这样写可以防止title没有值而在页面中报错,加上感叹号后没有值也不会显示 ModelMap
public String doLogin(HttpServletRequest req,
			HttpServletResponse resp, ModelMap modelMap) throws Exception {
		
		
		modelMap.put("base", Constants.CONTEXTPATH);
		return "";
	}
个人倾向于ModelMap,使用起来比较方便,return 后面的就是页面文件(这里没有填写),前缀和后缀需要在spring配置文件中配置,freemark没有说一定要ftl文件,所以其他文件也可以。



阅读更多
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
  • 上一篇:没有了
  • 下一篇:没有了
未上传头像