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

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

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

    聶永的博客

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

    介紹一個為Servlet增加REST URL支持的超小框架,一點都不侵入!

    這個框架(ServletRest)最近剛剛被提交上谷歌代碼托管,目標是為servlet增加rest風格URL支持,僅僅如此而已,目標非常明確:不做那么多,只做一點點。

    說這個很輕、很微小的框架,一點都不過分,只有10個java文件,只是用注解的話,那就可以減少為7個java文件。

    說這個小東西目標明確,一點不摻假,就是為現(xiàn)有的servlet增加rest風格的URL支持,僅此而已。

    我們表示一個具有結(jié)構(gòu)形式的URL為:

    /book/head first java/chapter/12 看圖說故事

    傳統(tǒng)的servlet在URL處怎么映射呢 ?

    /book/*

    那么chapter怎么辦 ?

    /chapter/*(這里假設(shè)/book/*排在較上位置)

    顯然上面的鏈接地址則很難到達 /chapter/*。當然會有兄弟跳出來說,這一切可以交給 /book/*進行處理,嗯,book也一并處理了chapter部分,當然是可以的,帶來了責任不單一的問題了,混雜在一起,造成代碼管理的混亂。

    那么怎么在ServletRest里面怎么做呢 ?

    @RestSupport("/book/*/chapter/*")
    其風格完全是以往的servlet映射的風格,只不過支持的參數(shù)多了些。
    更重要的是以往的Servlet編程經(jīng)驗一點都沒有舍棄,都還保留著。在ServletRest里沒有強迫人們按照新的繼承格式創(chuàng)造一個處理類,還是和以往一樣,創(chuàng)建一個需要繼承 HttpServlet 的servlet,重寫GET、POST、DELETE、PUT等方法,在類的合適位置添加上注解即可:
    @RestSupport("/book/*/chapter/*") 即可。當然這部分可以在xml文件中完成配置,下一篇文章會講到。
    這里有一個示范:
    @RestSupport("/book/*/chapter/*")
    public class ChapterServlet extends HttpServlet {
            private static final long serialVersionUID = -1534235656L;
    
            protected void doGet(HttpServletRequest request,
                            HttpServletResponse response) throws ServletException, IOException {
                    // code here ...
            }
    
            protected void doPost(HttpServletRequest request,
                            HttpServletResponse response) throws ServletException, IOException {
                    // code here ...
            }
    
            protected void doPut(HttpServletRequest request,
                            HttpServletResponse response) throws ServletException, IOException {
                    // code here ...
            }
    
            protected void doDelete(HttpServletRequest request,
                            HttpServletResponse response) throws ServletException, IOException {
                    // code here ...
            }
    }
    RestSupport同時支持多個url @RestSupport({"url1","url2"}),除此之外,沒有多余功能。

     

    那么怎么在項目中使用呢 ?

    在web.xml 中配置filter:

    <filter>
      <filter-name>RestFilter</filter-name> 
      <filter-class>com.servlet.rest.RestFilter</filter-class> 
      <init-param>
        <param-name>scanPackage</param-name> 
        <param-value>com.yong.test.servlet</param-value> 
      </init-param>
    </filter>
    <filter-mapping>
      <filter-name>RestFilter</filter-name> 
      <url-pattern>/*</url-pattern> 
    </filter-mapping>

    scanPackage需要接收一個需要掃描的包的參數(shù),若有多個包,可以包路徑之間有一個分隔符逗號“,”,eg:

    com.yong.test.servlet,com.xiaomin.bookstore

    ServletRest 注解需要JDK 1.5支持,Servlet 2.*, 3.* 版本,僅僅把ServletRest-0.8.jar (下載地址)放到項目classpath中,并且不依賴于第三方JAR包,除了servlet.jar之外。

    在運行期間可以對Servlet的進行動態(tài)裝載和卸載等操作,ServletRest已經(jīng)封裝了相應的接口(必須從全局Context中獲取,下面代碼是從示范JSP代碼中摘取):

    		ServletFactory servletFactory = (ServletFactory)application.getAttribute("servletFactory");
    		
    		// 注冊新的Servlet
    		String mappingUrl = "新的Servlet映射URL";
    		Class servletClass = Class.forName("要映射的Servlet Class路徑");
    		
    		servletFactory.register(mappingUrl, servletClass);
    		
    		// 注銷Servlet
    		//servletFactory.destory(servletClass);

     

    假如不在JSP中操作,那就需要:

    getServletContext().getAttribute("servletFactory");

    ServletRest遵循的原則和原有的servlet容器處理方式一致,一個URL對應一個Servlet實例原則。

    更多信息請閱讀ServletRest源代碼。

    posted on 2010-10-01 16:06 nieyong 閱讀(4533) 評論(1)  編輯  收藏 所屬分類: Servlet3

    評論

    # re: 介紹一個為Servlet增加REST URL支持的超小框架,一點都不侵入![未登錄] 2013-12-24 01:42 Jerry

    入侵的很嚴重!  回復  更多評論   

    公告

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

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

    導航

    <2010年10月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    統(tǒng)計

    常用鏈接

    留言簿(58)

    隨筆分類(130)

    隨筆檔案(151)

    個人收藏

    最新隨筆

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲精品女同中文字幕| 亚洲国产av一区二区三区丶| 妇女自拍偷自拍亚洲精品| 青青青国产在线观看免费网站| 久久久久亚洲AV无码专区首| 色www永久免费网站| 亚洲中文字幕无码永久在线| 国产成人1024精品免费| 自拍偷自拍亚洲精品第1页| GOGOGO免费观看国语| 亚洲色偷偷综合亚洲AVYP| a毛片全部免费播放| 亚洲成色在线影院| 24小时免费看片| 亚洲制服丝袜精品久久| 99久久综合国产精品免费| 亚洲国产成人精品激情| 好大好硬好爽免费视频| 国产午夜亚洲精品不卡免下载| 免费观看国产小粉嫩喷水| 免费看黄网站在线看| 亚洲线精品一区二区三区影音先锋 | 亚洲精品国产精品乱码不卞| 一区免费在线观看| 亚洲成AV人片天堂网无码| 亚洲高清免费在线观看| 亚洲日韩精品A∨片无码加勒比| 又大又硬又爽免费视频| 99精品免费视频| 亚洲自国产拍揄拍| 亚洲VA综合VA国产产VA中| 在线人成免费视频69国产| 亚洲国语在线视频手机在线| 免费看大美女大黄大色| 亚洲精品视频免费观看| 久久久久亚洲AV无码永不| 日韩视频免费在线| 日批视频网址免费观看| 亚洲看片无码在线视频| 亚洲中文字幕无码一区二区三区 | 自拍偷自拍亚洲精品被多人伦好爽|