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

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

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

    聶永的博客

    記錄工作/學習的點點滴滴。

    Servlet 3.0筆記之體驗可插拔特性,以及在實際中可能的應用范圍

    我預先建立一個WEB項目Hiservlet3,作為主項目。下面再建立一個Web Fragment項目作為主項目的從屬:
    webfragment
    建立Servlet,Filter,Listener等,沒有什么區別。
    使用Web Fragment,較為麻煩的是頁面文件的存放,其它到沒有多大區別。但有以下兩個方法解決:

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



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


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

    /**
    * 這次,我們把模板文件放在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 {
            // 構造要傳遞到模板的屬性值
            Map<String, Object> map = new HashMap<String, Object>();       
            map.put("userName", "小敏");
            response.setContentType("text/html; charset=" + DEFAULT_ENCODING);
            printResponsesString(response, map);
        }
        /**
         * 輸出請求內容
         * @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包內的HTML模板文件內容
         * @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
    當然也可以在主項目上點擊運行,依然可以運行。
    關于多個Web Fragment之間順序加載問題,可以參閱如下文章:
    http://blogs.sun.com/swchan/entry/servlet_3_0_web_fragment
    獲得更多認知。
    小結一下Servlet Web Fragment 可能在以下情況下很受用:
    1. 作為用戶攔截、日志記錄,實現項目之間的解耦。
    2. 提供RSS訂閱模塊
    3. 后臺管理
    4. 項目檢測等
    5. 不需要頁面的模塊
    ......
    最后附加上一個JAR文件,里面包含了源代碼和要發布的文件:
    本次項目演示,依賴JAR:
    commons-io-1.4.jar
    freemarker-2.3.13.jar
    commons-lang-2.3.jar
    本次項目JAR文件:
    下載
    下次寫些什么呢,不如實現更加友好的URL,也來一把REST,讓URL簡單一些。

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

    公告

    所有文章皆為原創,若轉載請標明出處,謝謝~

    新浪微博,歡迎關注:

    導航

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

    統計

    常用鏈接

    留言簿(58)

    隨筆分類(130)

    隨筆檔案(151)

    個人收藏

    最新隨筆

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 成人性生交大片免费看午夜a| 一区二区三区在线免费看| 国产h视频在线观看网站免费| 国产亚洲综合色就色| 中文在线观看免费网站| 亚洲精品乱码久久久久久自慰 | 尤物永久免费AV无码网站| 亚洲三级高清免费| 永久久久免费浮力影院| 在线观看亚洲专区| 亚洲一区二区三区无码影院| 国内精品免费久久影院| 无码乱人伦一区二区亚洲| 1000部国产成人免费视频| 亚洲欧美国产国产综合一区| 免费人成年激情视频在线观看| 人体大胆做受免费视频| 亚洲国产精品无码久久久秋霞2| 国产精品白浆在线观看免费| 亚洲美女视频一区| 成人免费看片又大又黄| 色婷婷综合缴情综免费观看| 亚洲成a人片在线观看无码专区| 在线免费中文字幕| 久久精品亚洲日本波多野结衣| 亚洲午夜激情视频| 亚洲精品免费在线视频| 中国china体内裑精亚洲日本| 四虎亚洲国产成人久久精品| 免费成人高清在线视频| jiz zz在亚洲| 亚洲日本va中文字幕久久| 动漫黄网站免费永久在线观看| 国产成人高清亚洲一区久久| 亚洲AV无码乱码国产麻豆穿越| 99在线视频免费观看视频| 日本精品久久久久久久久免费| 亚洲国产第一页www| 日韩免费视频播放| 亚洲视频免费在线观看| 鲁死你资源站亚洲av|