<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è)人收藏

    最新隨筆

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日本亚洲欧洲免费天堂午夜看片女人员 | 国产一区二区三区免费视频| 鲁死你资源站亚洲av| 国产中文在线亚洲精品官网| 99久久99久久精品免费观看| 亚洲sm另类一区二区三区| 亚洲中文字幕无码久久精品1| 久久亚洲精品专区蓝色区| 免费a级黄色毛片| 最近免费中文字幕大全高清大全1| 中文字幕亚洲无线码a| 日本成年免费网站| 香蕉视频在线观看免费| 亚洲精品偷拍无码不卡av| 亚洲精品线路一在线观看| 国产麻豆视频免费观看| jizz日本免费| 亚洲七久久之综合七久久| 亚洲AV无码成人精品区蜜桃| 日韩免费电影在线观看| 最近新韩国日本免费观看 | 亚洲情侣偷拍精品| 59pao成国产成视频永久免费 | 亚洲春色在线观看| 不卡一卡二卡三亚洲| 成年女人免费视频播放77777 | 中文字幕乱理片免费完整的| 亚洲AV成人无码天堂| 亚洲成人免费在线| 亚洲精品视频久久久| 免费黄色小视频网站| 免费观看无遮挡www的视频| 在线观看片免费人成视频播放| 亚洲欧洲美洲无码精品VA| 日产乱码一卡二卡三免费| 久久久99精品免费观看| 四虎影视在线看免费观看| 亚洲AV无码XXX麻豆艾秋| ww亚洲ww在线观看国产| 久久亚洲精品无码aⅴ大香| 亚洲国产精品无码久久久不卡|