<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筆記之體驗可插拔特性,以及在實際中可能的應(yīng)用范圍

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

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



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


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

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

    posted on 2010-07-05 22:08 nieyong 閱讀(577) 評論(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)

    個人收藏

    最新隨筆

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲日本韩国在线| 国产网站免费观看| 亚洲国产另类久久久精品| 麻豆91免费视频| 又爽又高潮的BB视频免费看| 亚洲熟女乱色一区二区三区| 中国在线观看免费国语版| 亚洲一卡二卡三卡| 色妞WWW精品免费视频| 亚洲中文字幕乱码一区| 在线中文高清资源免费观看| 亚洲一区二区三区国产精华液| 大香人蕉免费视频75| 亚洲av成人中文无码专区| 亚洲第一页综合图片自拍| 一区二区三区免费视频网站 | 99国产精品永久免费视频| 久久精品国产亚洲AV蜜臀色欲 | 免费jjzz在在线播放国产| 日韩一区二区三区免费播放| 国产亚洲色婷婷久久99精品91| 在线观看黄片免费入口不卡| 1区1区3区4区产品亚洲| 一个人看www在线高清免费看| 亚洲第一成年免费网站| 亚洲国产成人影院播放| 在线涩涩免费观看国产精品 | 亚洲AV性色在线观看| 亚洲精品色婷婷在线影院| 三年片免费高清版 | 永久免费av无码不卡在线观看| 亚洲日韩一区二区一无码| yy6080亚洲一级理论| 日本免费A级毛一片| 亚洲AV成人无码天堂| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 国产hs免费高清在线观看| 免费人成激情视频在线观看冫| 亚洲国产精品综合久久2007| 日韩精品成人亚洲专区| 久久久久久夜精品精品免费啦|