`
wezly
  • 浏览: 487303 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

组合Servlet+Freemarker的两种方法

阅读更多

Servlet的轻巧高效,Freemarker的强大简便,两者结合将是超轻的组合,即可避免丑陋的Java代码和HTML代码杂揉,又可高效基于模板的站点开发。闲话少说,项目需要:

freemarker-2.3.13.jar

定义两个Servlet:

HelloAction.java 对应 /hello,借助Freemarker硬编码输出

public class HelloAction extends HttpServlet { 
    private static final long serialVersionUID = -6082007726831320176L;
    private Configuration configuration; 
    public void init() throws ServletException { 
        configuration = new Configuration(); 
        configuration.setServletContextForTemplateLoading(getServletContext(), "WEB-INF/pages"); 
        configuration.setEncoding(Locale.CHINA, "UTF-8"); 
    }
    @SuppressWarnings("unchecked") 
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
        // 填充数据类型 
        Map map = new HashMap(); 
        map.put("userName", "小敏");    
        Template template = configuration.getTemplate("hello.html"); 
        response.setContentType("text/html; charset=" + template.getEncoding()); 
        Writer out = response.getWriter(); 
        try{ 
            template.process(map, out); 
        }catch (TemplateException e) { 
            e.printStackTrace(); 
        } 
    }
    public void destroy() { 
        super.destroy(); 
        if(configuration != null){ 
            configuration = null; 
        } 
    } 
}
 

对应模板:

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>使用Freemarker渲染2</title> 
</head> 
<body> 
你好, $ {userName!} ! 
</body> 
</html>
 

 

HiAction.java 对应 /hi ,借助Freemrker Servlet的拦截功能,如以往写代码方式,感觉不到Freemarker的存在。

public class HiAction extends HttpServlet { 
    private static final long serialVersionUID = 518767483952153077L;
    public void doGet(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        request.setAttribute("thename", "小敏"); 
        request.getRequestDispatcher("/WEB-INF/pages/hi.html").forward(request, response); 
    } 
}
 

对应的模板:

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>使用Freemarker渲染</title> 
</head> 
<body> 
hi $ {thename!}~<br /> 
</body> 
</html>
 

但需要在web.xml 配置文件中定义如下:

<servlet> 
    <servlet-name>freemarker</servlet-name> 
    <servlet-class> 
        freemarker.ext.servlet.FreemarkerServlet 
    </servlet-class>
    <!-- FreemarkerServlet settings: --> 
    <init-param> 
        <param-name>TemplatePath</param-name> 
        <param-value>/</param-value> 
    </init-param> 
    <init-param> 
        <param-name>NoCache</param-name> 
        <param-value>true</param-value> 
    </init-param> 
    <init-param> 
        <param-name>ContentType</param-name> 
        <param-value>text/html; charset=UTF-8</param-value> 
        <!-- Forces UTF-8 output encoding! --> 
    </init-param>
    <!-- FreeMarker settings: --> 
    <init-param> 
        <param-name>template_update_delay</param-name> 
        <param-value>0</param-value><!-- 0 is for development only! Use higher value otherwise. --> 
    </init-param> 
    <init-param> 
        <param-name>default_encoding</param-name> 
        <param-value>UTF-8</param-value><!-- The encoding of the template files. --> 
    </init-param> 
    <init-param> 
        <param-name>number_format</param-name> 
        <param-value>0.##########</param-value> 
    </init-param>
    <load-on-startup>1</load-on-startup> 
</servlet>
<servlet-mapping> 
    <servlet-name>freemarker</servlet-name> 
    <url-pattern>*.html</url-pattern> 
</servlet-mapping>
 

使用哪一种组合方式,看您喜好了。

借助于Freemarker自身的Servlet工具,只是用于拦截Servlet中forward转向使用到的HTML资源文件。

很简陋,但凑合着能看。

分享到:
评论

相关推荐

    PDF生产方案 maven + freemarker + flyingSoaser 实现 附代码

    标题中的“PDF生产方案 maven + freemarker + flyingSaucer 实现”是指使用Java技术栈,结合Maven构建工具、FreeMarker模板引擎以及FlyingSaucer库来生成PDF文档的一种方法。这个方案通常用于将HTML内容转换为高质量...

    servlet与freeMark组合

    Servlet与FreeMarker是Java Web开发中的两个重要技术,它们经常被组合使用来构建动态网站。Servlet是Java EE标准的一部分,它提供了一种服务器端处理HTTP请求的方法,而FreeMarker则是一个模板引擎,允许开发者将...

    freemarker总结

    运算符的用法有如下两种: variable!或variable!defaultValue,第一种用法不给缺失的变量指定默认值,表明默认值是空字符串,长度为0的集合,或者长度为0的Map对象. 使用!指定默认值时,并不要求默认值的类型和变量类型...

    freemarker,struts

    Freemarker和Struts是两种在Java Web开发中广泛应用的技术,它们在构建动态网页和管理应用程序流程方面发挥着重要作用。 **Freemarker** 是一个基于模板的Java模板引擎,主要用于生成HTML、XML或其他文本格式的输出...

    ejb3+struts2组合的程序

    WebLogic作为成熟的应用服务器,提供了对Java EE标准的全面支持,包括EJB容器和Servlet容器,能够很好地托管和管理这两种技术的结合。 在学习和实践中,理解EJB3的组件模型、持久化机制和依赖注入,以及Struts2的...

    freemaker+struts2

    FreeMarker 和 Struts2 是两种常见的 Java Web 开发技术,它们在构建 MVC(Model-View-Controller)架构的应用程序中发挥着关键作用。 **FreeMarker 知识点:** 1. **FreeMarker 是一个模板引擎**:它的主要功能是...

    SSH框架最新版本整合JAR包Strtus2 2.3.32+Spring3.0.7+Hibernate3.6.10(SSH-JAR)

    Spring 3.0.7是Spring的一个较旧但仍然广泛使用的版本,它支持XML和注解两种配置方式,可以与Struts2进行深度整合,实现模型对象的管理、依赖注入以及事务控制等功能。 Hibernate是一个对象关系映射(ORM)工具,它...

    freemark+struct2.0文章上传生成静态页面

    "Freemarker+Structs2.0文章上传生成静态页面"是这样一个系统,它结合了两个强大的Java技术来实现这一目标。 Freemarker是一个模板引擎,它允许开发者用简单的模板语言(FTL)编写设计模板,然后用数据模型填充这些...

    dwrDemo.rar_生成 静态

    【标题】"dwrDemo.rar_生成 静态"是一个关于使用...此外,还可以了解如何将这两种技术整合,以实现更高效、响应更快的Web应用。在实际项目中,这样的技术组合可以帮助优化用户体验,提高网站的加载速度和可伸缩性。

    jsp+mysql的bbs论坛

    【标题】:“jsp+mysql的bbs论坛”是一种基于Java Server Pages(JSP)技术和MySQL数据库构建的在线讨论平台。...通过学习和实践,开发者不仅可以掌握这两种技术,还能了解Web开发中的许多核心概念和最佳实践。

    struts2笔记

    在理解Struts2之前,我们首先需要回顾一下Web开发的两种经典模式:Model1和Model2。 Model1模式是早期的Web开发模式,它将JSP页面用于展示和数据处理,而JavaBean则用于存储业务逻辑和数据。这种模式导致了代码高度...

    struts下使用dwr

    Struts和DWR(Direct Web Remoting)是两种在Web开发中广泛使用的开源技术。Struts是一种基于MVC(Model-View-Controller)设计模式的Java框架,用于构建可维护性和可扩展性良好的Web应用程序。而DWR则是一个...

    struts1和struts2源代码详解

    Struts是Apache软件基金会下的一个开源项目,主要提供MVC(Model-View-Controller)设计模式的实现,帮助开发者构建可维护性和可扩展性良好的Java...同时,理解这两种框架的差异,有助于选择更适合项目需求的解决方案。

    struts2-blank

    3. **配置方式**:Struts2支持XML和注解两种配置方式。XML配置文件通常是struts.xml,用于定义Action、结果类型、拦截器等。注解则可以直接在Action类或方法上声明,简化了配置过程。 4. **插件系统**:Struts2拥有...

    STRUCTS学习文档

    学习文档会比较这两种方式的优缺点,指导读者根据项目需求选择合适的配置方式。 最后,文档可能还会涵盖 strut2与Spring、Hibernate等其他框架的集成,展示如何利用Structs2构建更完整的MVC架构。此外,安全问题也...

    struts学习

    Struts的配置主要分为两个部分:struts-config.xml和web.xml。前者定义了Action及其关联的ActionForm、Forward、Result等信息;后者用于设置Struts拦截器和过滤器。 **4. ActionForm** ActionForm对象用于封装用户...

    struts1和struts2项目实例

    SSH(Struts+Spring+Hibernate)是一种常见的Java企业级开发组合,其中Struts负责表现层,Spring管理依赖注入(DI)和面向切面编程(AOP),同时整合其他框架,如数据访问层的Hibernate。Hibernate是一个ORM(对象...

    springboot+mybatis员工管理单页面实现

    - **XML配置文件/注解**:两种方式定义SQL语句,XML文件通常用于复杂查询,注解则更适用于简单场景。 - **Executor执行器**:MyBatis有简单执行器、复用执行器和批量执行器,根据需求选择。 3. **Web应用实现** ...

    springmvc框架

    HandlerInterceptor 是一种拦截器,可以在请求处理前后执行自定义逻辑,如权限检查、日志记录等。 对于视图层,SpringMVC 支持多种视图技术,如 JSP、FreeMarker、Thymeleaf 等。通常,我们会在 ModelAndView 对象...

    Struts2+Spring3.02+Spring Security3+Hibernate3.6

    **Struts2** 是一个基于MVC设计模式的Web开发框架,它在Servlet容器(如Tomcat)中运行。Struts2提供了一种组织应用程序的方式,使得业务逻辑和视图层分离,增强了代码的可维护性和可扩展性。它通过拦截器实现动作...

Global site tag (gtag.js) - Google Analytics