<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    聶永的博客

    記錄工作/學(xué)習(xí)的點點滴滴。

    Servlet 3.0筆記之使用Freemarker替代JSP,更快更輕更高效

    曾經(jīng)寫過一篇博文《很輕的,Servlet + Freemarker 組合體,沒有那么硬~》,不過那是基于Servlet 2.× 系列的,今天談?wù)勅绾卧赟ervlet 3.0 下使用Freemarker進行更快的開發(fā)方式。
    Servlet 3.0的強大、簡單的,擺脫以前的約束,重構(gòu)類名還得需要到web.xml中手動修改,如今再也沒有那么多煩惱,當(dāng)然這僅僅是一個側(cè)面而已,就已經(jīng)說明了其強大。
    Freemarker強大的模板化能力,據(jù)說解析速度超越JSP,讓討厭JSP+ JAVA混合體編程的人得到一種解脫,身心的。還有一點就是快速的模型填充,不需要隨處可見的JAVA代碼,任何角落都是。
    總之:Servlet 3.0 + Freemarker, 超級輕的MVC組合,讓人愉悅。
    閑話短說,先來一個Servlet + JSP組合體:

    TemplateTestAction.java@WebServlet("/test")
    public class TemplateTestAction extends HttpServlet {
    private static final long serialVersionUID = 88687687987980L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String id = "1687";

    String title = "JSP測試";
    String content = "這是JSP測試";

    request.setAttribute("blog", new UserBlog(id, title, content, new Date()));

    request.getRequestDispatcher("/WEB-INF/pages/template.jsp").forward(request, response);
    }
    }
    對應(yīng)JSP:
    template.jsp<%@page import="java.text.SimpleDateFormat"%>
    <%@page import="com.demo.UserBlog"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP + Servlet</title>
    </head>
    <body>
    <%UserBlog blog = (UserBlog)request.getAttribute("blog"); %>
    <h1>ID : <%=blog.getId() %></h1>
    <h5>TITLE : <%=blog.getTitle() %></h5>
    <p>DATETIME : <%=new SimpleDateFormat("yyyy-MM-dd HH:mm").format(blog.getDate()) %></p>
    <div>
    CONTENT : <br/>
    <p><%=blog.getContent() %></p>
    </div>
    </body>
    </html>

    看看代碼,以前大家也都是這些寫過來的。
    對比一下Servlet + Freemarker :
    TemplateTest1Action.java@WebServlet("/test1")
    public class TemplateTest1Action extends HttpServlet {
    private static final long serialVersionUID = 6576879808909808L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String id = "1688";

    String title = "使用freemarker";
    String content = "這是測試";

    request.setAttribute("blog", new UserBlog(id, title, content, new Date()));

    request.getRequestDispatcher("/WEB-INF/pages/template1.html").forward(request, response);
    }
    }

    Servlet代碼沒有發(fā)生什么變化,只是這次轉(zhuǎn)向了html文件:
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Freemaker模板測試1</title>
    </head>
    <body>
    <h1>ID : ${blog.id}</h1>
    <h5>TITLE : ${blog.title}</h5>
    <p>DATETIME : ${blog.date?string("yyyy-MM-dd HH:mm")}</p>
    <div>CONTENT : <br />
    <p>${blog.content}</p>
    </div>
    </body>
    </html>
    請再次對比一下JSP 和 html文件的區(qū)別,您會選擇寫HTML還是JSP頁面呢 ?
    要想讓TemplateTest1Action轉(zhuǎn)向HTML頁面生效,您需要配置一個Freemarker的控制器,用以解析html頁面。
    這里控制器為:TemplateController.java 文件:
    @WebServlet(
    urlPatterns = {"*.html"}, // 需要定義Freemarker解析的頁面后綴類型
    asyncSupported = false,
    loadOnStartup = 0,
    name = "templateController",
    displayName = "TemplateController",
    initParams = {
    @WebInitParam(name = "TemplatePath", value = "/"),
    @WebInitParam(name = "NoCache", value = "true"),//定義是否緩存
    @WebInitParam(name = "ContentType", value = "text/html; charset=UTF-8"),// 定義內(nèi)容類型
    @WebInitParam(name = "template_update_delay", value = "0"), // 開發(fā)環(huán)境中可設(shè)置為0
    @WebInitParam(name = "default_encoding", value = "UTF-8"),
    @WebInitParam(name = "number_format", value = "0.##########")
    }
    )
    public class TemplateController extends FreemarkerServlet {
    private static final long serialVersionUID = 8714019900490761087L;
    }
    這里僅僅需要繼承FreemarkerServlet即可,再加上一些注解即可,內(nèi)容代碼不用寫。
    當(dāng)然也可以省去TemplateController,直接在web.xml文件中配置:
      <servlet>
    <servlet-name>freemarker</servlet-name>
    <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
    <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>
    </init-param>
    <init-param>
    <param-name>template_update_delay</param-name>
    <param-value>0</param-value>
    </init-param>
    <init-param>
    <param-name>default_encoding</param-name>
    <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
    <param-name>number_format</param-name>
    <param-value>0.##########</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
    <servlet-name>freemarker</servlet-name>
    <url-pattern>*.html</url-pattern>
    </servlet-mapping>

    記得把 freemarker-2.3.13.jar 文件扔進WEB-INF/lib 目錄下。
    項目源代碼下載地址:
    下載地址
    接下來一篇將體驗一下Servlet 3.0 的WebFragment功能,支持組件、功能的插拔,使之可以模塊化構(gòu)造一個站點服務(wù),大的跨越,一個變革,必將受益開發(fā)者社區(qū)。

    posted on 2010-07-04 02:36 nieyong 閱讀(5168) 評論(0)  編輯  收藏 所屬分類: Servlet3

    公告

    所有文章皆為原創(chuàng),若轉(zhuǎn)載請標(biāo)明出處,謝謝~

    新浪微博,歡迎關(guān)注:

    導(dǎo)航

    <2010年7月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    統(tǒng)計

    常用鏈接

    留言簿(58)

    隨筆分類(130)

    隨筆檔案(151)

    個人收藏

    最新隨筆

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久久久久久综合日本亚洲| 亚洲成人免费电影| 97国产在线公开免费观看| 亚洲三级在线观看| 亚洲国产精品无码久久青草 | 精品国产污污免费网站入口在线| 人人狠狠综合久久亚洲88| 国产在线观看免费观看不卡| eeuss影院www天堂免费| 亚洲女人18毛片水真多| 又黄又爽无遮挡免费视频| 91老湿机福利免费体验| 免费无码AV一区二区| 亚洲美女一区二区三区| 亚洲成AⅤ人影院在线观看 | 超清首页国产亚洲丝袜| 噼里啪啦免费观看高清动漫4| 成人国产网站v片免费观看| 亚洲电影在线播放| 伊人久久大香线蕉亚洲| 在线免费观看色片| 99在线观看免费视频| 人与动性xxxxx免费| 亚洲最大中文字幕无码网站| 亚洲AV乱码一区二区三区林ゆな| 成人免费视频国产| 思思re热免费精品视频66| 国产在线精品免费aaa片| 日韩色日韩视频亚洲网站| 亚洲av日韩av综合| 亚洲色欲色欲综合网站| 国产成人亚洲综合| 国产精品久久香蕉免费播放| 麻豆最新国产剧情AV原创免费 | 国产一级高清免费观看| 日本免费xxxx| 久久这里只精品热免费99| 一级做α爱过程免费视频| 亚洲午夜理论片在线观看| 亚洲第一成年网站大全亚洲| 国产亚洲人成网站观看|