`
yongboy
  • 浏览: 105857 次
  • 来自: ...
博客专栏
E16f1064-1c93-305c-9ed5-2118b09bada4
Servlet 3.0 学...
浏览量:0
社区版块
存档分类

很轻的,Servlet + Freemarker 组合体,没有那么硬~

阅读更多

老调重弹。对SSH经典组合有些腻,不再那么轻,重返到若干年前的原始。

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

闲话少说,项目需要:

freemarker-2.3.13.jar

servlet.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资源文件。

很简陋,但凑合着能看。

项目源代码已经打包如下:

下载源文件

7
1
分享到:
评论
6 楼 leafxf 2012-05-25  
感谢非常有用!
5 楼 yangchaoy33 2011-02-15  
我最近一直在找这样的资料,楼主你写得很 好了的,但是我不明白,如果那样,和jsp,el有什么区别?
4 楼 wangking717 2011-01-09  
个人认为,如果不喜欢在JSP里写JAVA代码,用EL就可以了。
3 楼 knight701 2009-11-11  
楼主写的不错 看你写的胜过我以前看的n多文章...
2 楼 java_mike 2009-11-11  
挺不错的。
1 楼 jamesqiu 2009-11-10  
FreeMarker很好,2.0的时候就开始用;
但近年来懒得写html和js,就用上Wicket了,用Java coding界面;

使用FreeMarker的话,写一两个全局用的servlet(Controller)就够了,其他用pojo(Model)和ftl(View)组合出页面。

相关推荐

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

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

    FreeMarker与Servlet整合,静态资源下载

    在实际项目中,FreeMarker与Servlet整合能够实现高效的动态内容生成和静态资源管理。 在整合FreeMarker和Servlet的过程中,首先需要在Web应用的配置文件(如web.xml)中注册FreeMarkerServlet,以便处理.ftl文件。...

    freemarker总结

    FreeMarker对空值的处理非常严格,FreeMarker的变量必须有值,没有被赋值的变量就会抛出异常,因为FreeMarker未赋值 的变量强制出错可以杜绝很多潜在的错误,如缺失潜在的变量命名,或者其他变量错误.这里所说的空值,...

    SSH相关整合的总要资料

    SSH,全称Struts、Spring、Hibernate,是Java EE领域常用的三大开源框架的组合,用于构建高效、可扩展的企业级应用程序。Struts是基于MVC(Model-View-Controller)设计模式的Web应用框架,主要负责处理用户请求,...

    cms后台管理

    一 Jeecms安装过程 将解压后得到的jeecms-...&lt;bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"&gt; &lt;property name="freemarkerVariables"&gt; &lt;map&gt; …… ...

    spring mvc入门教程

    Spring MVC是一种基于Java语言的轻量级Web应用框架,它是Spring框架的一个模块,遵循MVC设计模式,将Web层进行分离,提供了清晰的角色定义以及开发的各个组件之间的耦合关系。 **知识点一:Spring MVC架构概述** 1...

    springMVC示例

    Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,主要用于构建 MVC(Model-View-Controller)模式的 Web 应用程序。在本示例中,我们将深入探讨 Spring MVC 的核心概念、配置、以及...

    Spring MVC入门Demo

    Spring MVC 是一款基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的重要组成部分,主要用于构建 MVC(Model-View-Controller)架构的 Web 应用程序。本入门Demo将帮助初学者快速理解并掌握 Spring MVC 的基本...

    帮助文档大全(二)

    它整合了众多优秀框架,如Freemarker和OGNL,提供强大的拦截器机制,使得开发者可以方便地实现业务逻辑和页面展示的分离,提高代码的可维护性和可测试性。 【Spring】 Spring是Java企业级应用的核心框架,它提供了...

    springmvc简单demo

    Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,主要用于构建 MVC(Model-View-Controller)模式的 Web 应用程序。在本示例中,"springmvc简单demo" 提供了一个基础的 Spring MVC ...

    SSH整合通用jar包

    6. **org.springframework.web.servlet-3.1.1.RELEASE.jar**:这部分是Spring MVC的实现,负责Web层的请求处理,包括控制器映射、视图解析等。 7. **freemarker-2.3.18.jar**:FreeMarker是一个模板引擎,常用于...

    html/css/javascript/j2ee技术手册

    - 选择器:理解ID选择器、类选择器、元素选择器以及更复杂的组合选择器。 - 属性与值:学习颜色、字体、布局、盒模型、边距、边框、背景等样式属性及其设置方法。 - CSS布局:掌握流式布局、网格布局、Flexbox和...

    SpringMVC面试专题.pdf

    `@RestController` 实际上是 `@Controller` 和 `@ResponseBody` 的组合,意味着控制器的方法返回的对象将被序列化为响应体而不是渲染视图。 #### 8. @RequestMapping 注解: - **类级别使用**:当注解应用于类时,...

    SpringMVC Jar 包

    10. **Interceptors(拦截器)**:类似于Servlet的Filter,SpringMVC的拦截器可以在请求被Controller处理之前和之后执行代码,常用于权限控制、日志记录等场景。 11. **MVC配置**:通过XML或Java配置(@...

    SpringBoot基础.pdf

    -@SpringBootApplication是组合注解,包含了@Configuration、@EnableAutoConfiguration、@ComponentScan。 - @Configuration表示这个类可以作为Spring容器中的Bean。 - @EnableAutoConfiguration表示开启自动配置...

    learnSpringMVC:spring mvc 学习

    Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,专为构建可扩展、高性能的 Web 应用程序而设计。在这个“learnSpringMVC”项目中,我们可以深入理解 Spring MVC 的核心概念、工作...

    Spring MVC框架示例

    1. **web.xml**:这是Web应用的部署描述符,定义了应用的配置信息,如Servlet、Filter、监听器等。在Spring MVC中,可能会配置Spring的DispatcherServlet,它是Spring MVC的核心,负责调度HTTP请求。 2. **classes*...

    Spring MVC面试宝典1.pdf

    SpringMVC是一个基于Java的轻量级Web应用框架,该框架遵循MVC(Model-View-Controller)设计模式,旨在简化Web层的开发。通过将模型(Model)、视图(View)和控制器(Controller)分离,SpringMVC能够帮助开发者更...

    springboot参考指南中文word文档

    这是一个组合注解,包含`@SpringBootConfiguration`、`@EnableAutoConfiguration`和`@ComponentScan`。 **3.7 运行应用程序** - **从IDE中运行**。 - **作为一个打包后的应用运行**。 - **使用Maven插件运行**。 - ...

Global site tag (gtag.js) - Google Analytics