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

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

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

    聶永的博客

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

    Servlet 3.0筆記之體驗(yàn)可插拔特性,以及在實(shí)際中可能的應(yīng)用范圍

    我預(yù)先建立一個(gè)WEB項(xiàng)目Hiservlet3,作為主項(xiàng)目。下面再建立一個(gè)Web Fragment項(xiàng)目作為主項(xiàng)目的從屬:
    webfragment
    建立Servlet,F(xiàn)ilter,Listener等,沒有什么區(qū)別。
    使用Web Fragment,較為麻煩的是頁面文件的存放,其它到?jīng)]有多大區(qū)別。但有以下兩個(gè)方法解決:

    1. 使用ANT編寫 build.xml 文件,自動打成JAR包,假如有HTML文件的話,可以把HTML等頁面文件部署到主項(xiàng)目的部署設(shè)定目錄下
            比如,我們設(shè)置轉(zhuǎn)向到oneuser.html文件:
           request.getRequestDispatcher("/oneuser.html").forward(request, response);



             就需要在發(fā)布時(shí)把oneuser.html文件放在主項(xiàng)目的部署根目錄下,其它路徑,以此類推。
            建議編寫ANT腳本搞定。


    2. 把頁面文件也打進(jìn)JAR包,使用Freemarker硬編碼實(shí)現(xiàn)頁面渲染。這種方式有些硬,另一方面移植性好,一個(gè)JAR包直接包含了Servlet 和頁面文件,但會帶來修改頁面文件的麻煩。
    下面為演示如何使用Freemarker實(shí)現(xiàn)硬編碼:

    /**
    * 這次,我們把模板文件放在JAR文件包中
    *
    * @author xiaomin
    *
    */
    @WebServlet("/some/")
    public class ViewSomethingAction extends HttpServlet {
        private static final long serialVersionUID = 65464645L;
        private static final String DEFAULT_ENCODING = "UTF-8";
        private static final String TEMPLATE_NAME = "some";
        private String templateString;
        private Configuration configuration;
        public void init() throws ServletException {
            configuration = new Configuration();
            configuration.setDefaultEncoding(DEFAULT_ENCODING);
            configuration.setEncoding(Locale.CHINA, DEFAULT_ENCODING);
            // 初始化模板
            templateString = getTemplateString("pages/something.html");
        }
        protected void doGet(HttpServletRequest request,
                HttpServletResponse response) throws ServletException, IOException {
            // 構(gòu)造要傳遞到模板的屬性值
            Map<String, Object> map = new HashMap<String, Object>();       
            map.put("userName", "小敏");
            response.setContentType("text/html; charset=" + DEFAULT_ENCODING);
            printResponsesString(response, map);
        }
        /**
         * 輸出請求內(nèi)容
         * @param response
         * @param map
         * @throws IOException
         */
        private void printResponsesString(HttpServletResponse response,
                Map<String, Object> map) throws IOException {
            Template template = new Template(TEMPLATE_NAME, new StringReader(
                    templateString), configuration, DEFAULT_ENCODING);
            Writer out = response.getWriter();
            try {
                template.process(map, out);
            } catch (TemplateException e) {
                e.printStackTrace();
            } finally {
                out.flush();
                template = null;
            }
        }

        /**
         * 獲取JAR包內(nèi)的HTML模板文件內(nèi)容
         * @param jarHtmlPath eg: pages/something.html
         * @return
         */
        private String getTemplateString(String jarHtmlPath) {
            ClassLoader myCL = this.getClass().getClassLoader();
            InputStream is = myCL.getResourceAsStream(jarHtmlPath);
            if (is == null) {
                return null;
            } else {
                try {
                    return templateString = IOUtils.toString(is, DEFAULT_ENCODING);
                } catch (IOException e) {
                    e.printStackTrace();
                    return null;
                }
            }
        }
    }

    運(yùn)行效果如圖:
    something
    注意在Eclipse下,可在Web Fragment項(xiàng)目上點(diǎn)擊運(yùn)行,即可正常運(yùn)行主項(xiàng)目,見下圖:
    web fragment startup
    當(dāng)然也可以在主項(xiàng)目上點(diǎn)擊運(yùn)行,依然可以運(yùn)行。
    關(guān)于多個(gè)Web Fragment之間順序加載問題,可以參閱如下文章:
    http://blogs.sun.com/swchan/entry/servlet_3_0_web_fragment
    獲得更多認(rèn)知。
    小結(jié)一下Servlet Web Fragment 可能在以下情況下很受用:
    1. 作為用戶攔截、日志記錄,實(shí)現(xiàn)項(xiàng)目之間的解耦。
    2. 提供RSS訂閱模塊
    3. 后臺管理
    4. 項(xiàng)目檢測等
    5. 不需要頁面的模塊
    ......
    最后附加上一個(gè)JAR文件,里面包含了源代碼和要發(fā)布的文件:
    本次項(xiàng)目演示,依賴JAR:
    commons-io-1.4.jar
    freemarker-2.3.13.jar
    commons-lang-2.3.jar
    本次項(xiàng)目JAR文件:
    下載
    下次寫些什么呢,不如實(shí)現(xiàn)更加友好的URL,也來一把REST,讓URL簡單一些。

    posted on 2010-07-05 22:08 nieyong 閱讀(571) 評論(0)  編輯  收藏 所屬分類: Servlet3

    公告

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

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

    導(dǎo)航

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

    統(tǒng)計(jì)

    常用鏈接

    留言簿(58)

    隨筆分類(130)

    隨筆檔案(151)

    個(gè)人收藏

    最新隨筆

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费大黄网站在线观看| 国产精品亚洲аv无码播放| 成年性生交大片免费看| 四虎影视永久免费视频观看| 久热综合在线亚洲精品| 亚洲av乱码中文一区二区三区| 一个人免费视频在线观看www| 午夜免费啪视频在线观看 | 免费又黄又硬又爽大片| 亚洲国产精品网站在线播放| 国产成人免费视频| 亚洲精品专区在线观看| 亚洲一级特黄特黄的大片| 国产精品免费一区二区三区四区| 亚洲不卡av不卡一区二区| 免费一区二区三区在线视频| 97在线线免费观看视频在线观看| 亚洲AV无码一区二区乱子伦| 中文字幕免费高清视频| 亚洲AV午夜福利精品一区二区| 久久精品一区二区免费看| 亚洲日本乱码一区二区在线二产线| 你懂的网址免费国产| 国产精品亚洲综合专区片高清久久久 | 最近2019中文字幕免费直播 | 人妻巨大乳hd免费看| 日本一道高清不卡免费| 亚洲xxxx视频| 毛片免费观看网站| 男男gvh肉在线观看免费| 日本二区免费一片黄2019| 免费无码国产V片在线观看| 久热综合在线亚洲精品| 午夜老司机免费视频| 亚洲乱码在线观看| 亚洲精品无码成人片在线观看| 67194成手机免费观看| 亚洲毛片无码专区亚洲乱| 四虎在线成人免费网站| 精品丝袜国产自在线拍亚洲| 亚洲av日韩av欧v在线天堂|