<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筆記之包含在JAR文件中可直接訪問的資源文件特性(資源綁定)

    這次標(biāo)題夠長的,在Servlet3協(xié)議規(guī)范中,包含在JAR文件/META-INFO/resources/路徑下的資源可以直接訪問了。這么說一說,可能感覺不到到底有什么好處,以往的JSP或者HTML頁面只能存在站點(diǎn)的目錄下,或者在WEB-INF目錄下(只是不能直接訪問)。
    規(guī)范說,${jar}/META-INF/resources/被視為根目錄,假設(shè)home.jsp被放在${jar}/META-INF/resources/home.jsp,用戶可以直接通過 http://域名/home.jsp 訪問了。
    呈現(xiàn)一個(gè)常見的代碼片段:
    /**
    * 簡單示范
    * @author yongboy
    * @date 2011-1-16
    * @version 1.0
    */
    @WebServlet("/jarHome")
    public class HelloJarServlet extends HttpServlet {
    private static final long serialVersionUID = 6177346686921106540L;

    protected void doGet(HttpServletRequest request,
    HttpServletResponse response) throws ServletException, IOException {
    request.setAttribute("date", new Date());
    request.getRequestDispatcher("/jarpage/jarhome.jsp").forward(request, response);
    }
    }
    而jarhome.jsp文件路徑則位于 ${jar}/META-INF/resources/jarpage/jarhome.jsp
    當(dāng)然jarhome.jsp文件則沒有什么特別之處:
    <%@ 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">
    <link rel="stylesheet" href="css/style.css" type="text/css" />
    <title>Welcome to jar home</title>
    </head>
    <body>
    <img alt="j2ee" src="img/j2ee.png" /><br/>
    <br/>
    now date : <%=((java.util.Date)request.getAttribute("date")).toString()%>
    </body>
    </html>
    jarhome.jsp文件所引用css/style.css和img/j2ee.png等文件分別位于 ${jar}/META-INF/resources/css/style.css${jar}/META-INF/resources/img/j2ee.png目錄下。
    把生成的jar文件存放在 WEB-INF/lib/ 中,下面為一個(gè)運(yùn)行示范圖:

    樣式和圖片等都可以正常訪問。
    有時(shí)候可能需要使用路徑信息等,再看一個(gè)示范吧:
    /**
    * 演示jarDemo
    *
    * @author yongboy
    * @date 2011-1-16
    * @version 1.0
    */
    @WebServlet("/jarDemo")
    public class DemoWebINFPagesServlet extends HttpServlet {
    private static final long serialVersionUID = -1040850432869481349L;
    private static final Log log = LogFactory
    .getLog(DemoWebINFPagesServlet.class);

    @SuppressWarnings("deprecation")
    @Override
    protected void doGet(HttpServletRequest request,
    HttpServletResponse response) throws ServletException, IOException {
    log.info("the /jarDemo is accessed now!");

    log.info("getRealPath : " + request.getRealPath("/"));
    log.info("ServletContext : getRealPath : "
    + getServletContext().getRealPath("/"));
    log.info("getPathTranslated : " + request.getPathTranslated());

    log.info("get jar's resource:");

    InputStream is = getServletContext().getResourceAsStream(
    "/jarfile/demo.txt");
    log.info("the JAR/META-INF/resources/jarfile/demo.txt's content is :\n"
    + IOUtils.toString(is));

    request.getRequestDispatcher("/WEB-INF/pages/notaccess.jsp");
    }
    }
    輸入命令行信息為:
    [framework] 2011-01-03 11:45:16,664 - com.learn.servlet3.jardync.DemoWebINFPagesServlet -798292 [http-8080-exec-6] INFO  com.learn.servlet3.jardync.DemoWebINFPagesServlet  - the /jarDemo is accessed now!
    [framework] 2011-01-03 11:45:16,664 - com.learn.servlet3.jardync.DemoWebINFPagesServlet -798292 [http-8080-exec-6] INFO  com.learn.servlet3.jardync.DemoWebINFPagesServlet  - getRealPath : /home/yongboy/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/d/
    [framework] 2011-01-03 11:45:16,664 - com.learn.servlet3.jardync.DemoWebINFPagesServlet -798292 [http-8080-exec-6] INFO  com.learn.servlet3.jardync.DemoWebINFPagesServlet  - ServletContext : getRealPath : /home/yongboy/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/d/
    [framework] 2011-01-03 11:45:16,665 - com.learn.servlet3.jardync.DemoWebINFPagesServlet -798293 [http-8080-exec-6] INFO  com.learn.servlet3.jardync.DemoWebINFPagesServlet  - getPathTranslated : null
    [framework] 2011-01-03 11:45:16,665 - com.learn.servlet3.jardync.DemoWebINFPagesServlet -798293 [http-8080-exec-6] INFO  com.learn.servlet3.jardync.DemoWebINFPagesServlet  - get jar's resource:
    [framework] 2011-01-03 11:45:16,665 - com.learn.servlet3.jardync.DemoWebINFPagesServlet -798293 [http-8080-exec-6] INFO  com.learn.servlet3.jardync.DemoWebINFPagesServlet  - the ${JAR}/META-INF/resources/jarfile/demo.txt's content is :
    haha,the demo.s's content!
    haha,haha,haha!
    可以看到getRealPath("/")得到的是項(xiàng)目的根路徑(可以參照J(rèn)AR解壓后的路徑)。而request.getPathTranslated則因?yàn)槭前趈ar文件中(規(guī)范中說包含在遠(yuǎn)程主機(jī)、數(shù)據(jù)庫、JAR存檔文件中,getPathTranslated都會(huì)返回null),則返回null。
    包含在jar中的資源文件,一樣可以使用getResourceAsStream獲取到。
    再來看看jar文件META-INF/resources目錄下文件結(jié)構(gòu):
    • css/style.css
    • img/j2ee.png
    • jarfile/demo.txt
    • jarpage/jarhome.jsp
    • jsp/h.jsp
    • jsp/helloWorld.jsp
    很顯然,就是一個(gè)小型站點(diǎn)目錄結(jié)構(gòu)。
    每一個(gè)模塊,建立一個(gè)WEB站點(diǎn)應(yīng)用,使用ANT腳本自動(dòng)打包成jar文件,拷貝到真正站點(diǎn)WEB-INF/lib下。
    假設(shè)一個(gè)JAR文件包含一個(gè)具體的模塊,那么模塊的部署與裝載將是十分方便的。

    posted on 2011-01-03 12:20 nieyong 閱讀(7034) 評(píng)論(2)  編輯  收藏 所屬分類: Servlet3

    評(píng)論

    # re: Servlet 3.0筆記之包含在JAR文件中可直接訪問的資源文件特性(資源綁定)[未登錄] 2012-08-01 11:24 lixor

    這樣做最大的好處就是可以做產(chǎn)品定制化項(xiàng)目。
    例如有一個(gè)產(chǎn)品P,此產(chǎn)品的絕大多數(shù)功能都是不需要做客戶化的,只有個(gè)別模塊需要客戶化定制。
    如果按照以前的做法需要為每個(gè)客戶創(chuàng)建一個(gè)項(xiàng)目并進(jìn)行一些修改,這樣源碼管理的控制就比會(huì)較混亂。
    如果采用jar包封裝那個(gè)需要客戶化的模塊的話,這樣就不需要修改產(chǎn)品主體,每次只要在實(shí)施時(shí)把客戶化的jar放進(jìn)去就行了。  回復(fù)  更多評(píng)論   

    # re: Servlet 3.0筆記之包含在JAR文件中可直接訪問的資源文件特性(資源綁定)[未登錄] 2015-06-19 22:41 tom

    @lixor
    的確是這樣,做過客戶化開發(fā)的深有體會(huì),這樣做有兩點(diǎn)好處  回復(fù)  更多評(píng)論   

    公告

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

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

    導(dǎo)航

    <2011年1月>
    2627282930311
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    統(tǒng)計(jì)

    常用鏈接

    留言簿(58)

    隨筆分類(130)

    隨筆檔案(151)

    個(gè)人收藏

    最新隨筆

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 999在线视频精品免费播放观看| 免费a级毛片视频| 亚洲国产精品成人午夜在线观看| 国产乱子伦精品免费无码专区| xxxx日本在线播放免费不卡| 777亚洲精品乱码久久久久久 | 成全视频免费观看在线看| 亚洲国产高清在线精品一区| 亚洲国产成人VA在线观看| 91av视频免费在线观看| 亚洲av无码成人精品国产| 图图资源网亚洲综合网站| 国产成人在线观看免费网站| 日本免费一区二区三区四区五六区| 亚洲中文无码亚洲人成影院| 中文字幕亚洲专区| 免费看成人AA片无码视频羞羞网| fc2成年免费共享视频18| 一区二区亚洲精品精华液| 亚洲性猛交XXXX| 国产国产人免费人成免费视频| 日韩精品无码专区免费播放| 色婷婷综合缴情综免费观看| 久久亚洲私人国产精品| 免费国产成人高清视频网站| 精品香蕉在线观看免费| 99视频免费在线观看| 亚洲AV永久无码天堂影院| 亚洲网站免费观看| 亚洲欭美日韩颜射在线二| 免费无码黄网站在线观看| 美丽的姑娘免费观看在线播放| h片在线播放免费高清| 亚洲欧美成人综合久久久| 亚洲欧洲日韩综合| 久久精品国产精品亚洲精品| 亚洲国产精品狼友中文久久久| 成人毛片免费在线观看| 免费福利在线播放| 最近中文字幕免费完整| 黄色片免费在线观看|