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

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

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

    隨筆-67  評論-522  文章-0  trackbacks-0

        這一章大象將詳細分析web層代碼,以及使用Spring MVC的注解及其用法和其它相關知識來實現控制器功能。
        之前在使用Struts2實現MVC的注解時,是借助struts2-convention這個插件,如今我們使用Spring自帶的spring-webmvc組件來實現同樣的功能,而且比之以前更簡單。另外,還省掉了整合兩個框架帶來的不穩定因素。
        對于Spring MVC框架,我主要講一下它的常用注解,再結合一些示例進行說明,方便大家能夠快速理解。
        一、Spring MVC常用注解說明
        @Controller
        在類上面定義,表明該類為控制器,返回字符串與redirect:xxx
        @RequestMapping
        類或方法上面使用此注解,設置URL訪問地址。它有兩個屬性,value指定訪問路徑,method指定指定請求方式,請求方式在RequestMethod這個類中,全部以常量形式定義,它默認使用GET請求。
        @RequestParam
        指定Request請求參數,在方法參數中定義,相當于傳統的request.getParameter()
        @PathVariable
        獲取URL訪問路徑變量,這是Spring MVC 3.0框架才加入的特性,基于RESTful風格的URL訪問路徑。
        @ModelAttribute
    全局式的方法,在一組URL訪問路徑中,每次都會執行,方法返回結果保存在module會話中。
        @Service
        在類上面定義,指定被注解的類是業務邏輯組件,如果不指定具體的Bean ID,則采用默認命名方式,即類名的首字母小寫。之前在SSH2中,大象曾對Dao組件使用@Repository,本例只有業務層,所以就只用@Service注解。
        @Autowired
        IoC自動注入功能,替換以前的set寫法,在SSH2中就已經開始使用了。
        @Qualifier
        對同一接口類有不同實現指定具體的實現類。
        @ResponseBody
        同樣定義在方法上,Ajax調用聲明,指定方法返回結果為Ajax回調函數結果。這是Spring MVC 3.0框架中增加的一個新特性。
        @InitBinder
        初始化數據綁定與類型轉換,將傳入的參數轉換為自定義類型,或者對參數進行自定義處理。
        二、示例
        
        @RequestMapping在類名上面定義,相當于指定的URL是此控制器內的所有其它訪問路徑的父路徑。如果在某個方法上面定義@RequestMapping注解,則相對于父路徑來說,是其子路徑。如果不定義value值,那么按父路徑訪問就會被默認執行。但請注意,默認的訪問方式只能有一個。
        對于UserControllerlist方法REST訪問URLhttp://localhost:8080/ssm3/user,而且它同時接收GETPOST兩種請求。另外,Spring MVC 3.0有一個很靈活的特性,可以自定義方法參數。看看list方法,我設定了兩個參數,一個Model,一個User對象。Model是用來渲染數據,生成頁面用的。相當于request.setAttribute,你可以這樣理解,但不能就這樣認為,Model以及另一個ModelMap,都是作為視圖模型傳遞參數的,它們的作用域為request。除此之外,你還可以定義HttpServletRequestHttpServletResponse等等各種各樣的參數。
    如果一個類還要定義其它資源訪問怎么辦呢?請看下面的RoleController
        
        RoleController上定義了全局路徑/role,這樣一來,對于和角色相關的資源都會以/role開頭,比如創建角色/role/new;編輯角色/role/edit/{id}等等。
        上圖edit方法中的{id}寫法,就是RESTful URL風格,與@PathVariable搭配來一起實現該功能。它表示所請求的URL中,可以將變量值作為參數進行動態的傳遞。例如:http://localhost:8080/ssm3/role/edit/1,另外,除了可以用數字,還可以用字符串,還可以多定義幾個變量:/role/edit/{id}/{type}等等。
        每個方法的返回值,其實都對應著一個結果頁面,這一點和struts2-convention這個插件很相像。本例使用FreeMarker模板引擎作為展示層,頁面的后綴為.html,頁面中除了標準的HTML之外,其余的數據填充,條件判斷之類,都要用到FreeMarker指令。
        對于save方法返回值寫法表示的是重定向,相當于執行http://localhost:8080/ssm3/role,而這個URL對應的其實就是RoleController這個類里面list方法。如果要帶上參數之類的,一定要符合所定義的REST資源路徑才可以。
        

        @ResponseBody用來標識Ajax方法調用,在上面這個方法中,用到了@RequestParam注解,它的作用就和request.getParameter("name")一樣。Spring MVC框架支持好幾種返回格式,例如:String/JSON/XML等等。不過以這種格式的字符串值形式返回是最簡便的一種方式,而且利用JavaScript解析也十分方便。頁面調用的時候請用jQuery$.ajax()這種原生方式來定義,這種寫法不會出問題,也很靈活,而且其它幾種方式最終也是調用它來完成請求。
        

        對于擁有相同的一組訪問規則的URL,如果都需要獲得相同的數據,則使用@ModelAttribute注解。以RoleController為例,上面這個注解與方法的含義,相當于是在它里面所有的訪問路徑方法中都調用這個寫法:module.addAttribute(“allRoles”,roleService.getRoles())。也即,不管是訪問create還是edit,都會執行preperList,都會獲得allRoles這個List
        
        注冊自定義類型編輯器,在
    Spring MVC中,對于時間類型,框架不會自動幫你轉換綁定,需要你自己來定義屬性編輯器。除此之外,還可以對某些特殊字符進行轉義符處理,都可以放在@InitBinder注解的方法中進行。如果所有的Controller都需要注冊相同的屬性編輯器,則可以實現WebBindingInitializer接口,定義一個全局的屬性編輯器。
        三、在web容器中部署
        想要讓Spring MVC框架幫助我們完成工作,就需要在Web容器中配置好它
        
        DispatcherServletSpring MVC的核心,是處理一切請求轉發的核心控制器。大象曾在本系列的第二篇文章中就詳細描述了Spring MVC的流程結構,如果沒什么印象的話請再去看看。
        Spring MVC有一個默認規則,Web容器啟動之后,會自動查找/WEB-INF/<servlet-name>.xml這個Spring類型的配置文件。如果想自定義配置文件路徑,就按上面的寫法,指定contextConfiglocation這個屬性,大象采用maven構建項目,所以servlet-context.xml這個配置文件放在resource目錄下。
        四、MVC配置
        Spring MVC 3.0對使用和配置作了較大的改進,除了提供注解來簡化控制器的開發之外,在配置文件上面也進行了簡化。
        
        基于Spring MVC注解的配置就是上面這兩行,還有一種更簡化的配置寫法是只寫這一句:<mvc:annotation-driven />就可以了,Spring啟動的時候會自動注冊上面這兩個bean。為什么大象要在這里顯示的注冊兩個bean呢?因為,我們在真正使用的時候,一般來說,使用默認的方式滿足不了我們的系統或業務要求。比如攔截器,比如數據驗證,比如返回消息格式轉換等等一些自定義設置。他們都需要配置在這兩個bean里面。因為本例是用來作為入門教程,所以這些東西都沒有加進來。
        DefaultAnnotationHandlerMapping這個類是將所有標注了
    @RequestMapping注解的Controller類,都放到了一個HandlerMapping對象中當有請求時,就在這個對象中進行查找是否有與之匹配的路徑,AnnotationMethodHandlerAdapter是管理所有@RequestMapping注解的方法。
        這部分的內容到這里就講完了,下一篇將對本例使用的展示層FreeMarker進行一下簡單介紹。
        本文為菠蘿大象原創,如要轉載請注明出處。http://bolo.blogjava.net/

    posted on 2012-04-22 16:21 菠蘿大象 閱讀(12557) 評論(4)  編輯  收藏 所屬分類: Spring3

    評論:
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實例詳解(四) 2012-04-22 18:01 | 菩提小滿
    這!....我記得你最后一次更新是很久之前的事情了 呵呵
    當時我等的花兒都要謝了..  回復  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實例詳解(四) 2012-04-23 08:40 | 菠蘿大象
    @菩提小滿
    我確實很長時間沒更新了,有八九個月了吧,不過我不想當太監,要把它寫完。  回復  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實例詳解(四) 2012-07-27 11:44 | osacar
    請教一個問題,像上面對于UserController的list方法REST訪問URL為http://localhost:8080/ssm3/user,如果要加上分頁和其他參數比如未激活用戶。那REST路徑該怎么規劃設計?@RequestMapping(value="/list/{page}/{param}")這樣寫的話,page與param這兩個參數是不是都必須有值(都是數值型)?如果param參數比較多的話(作篩選時常會出現)那是不是還是用回"?param1=value1&param2=value2"這種querystring方式?  回復  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實例詳解(四) 2012-07-28 13:11 | 菠蘿大象
    @osacar
    請求方式有好幾種,一般常用的是GET和POST,你如果有很多參數需要提交,就使用POST請求,然后使用一個實體對象接收這些參數,其它的,就看你想怎么處理了。  回復  更多評論
      
    主站蜘蛛池模板: 中文字幕在亚洲第一在线| 一级毛片完整版免费播放一区| 亚洲国产人成中文幕一级二级| 亚洲人成免费网站| 永久免费av无码入口国语片| 国产成人亚洲精品蜜芽影院| 亚洲成A人片在线播放器| 久久亚洲精品无码aⅴ大香| 亚洲精品国偷自产在线| 亚洲国产日韩在线观频| 国产成人在线观看免费网站 | 日韩免费a级在线观看| 99精品视频免费在线观看| 成人免费av一区二区三区| 免费无码国产在线观国内自拍中文字幕| 亚洲黄页网在线观看| 亚洲精品91在线| 色噜噜综合亚洲av中文无码| 亚洲国产一成人久久精品| 亚洲一区二区高清| 亚洲精品tv久久久久| 国产一级理论免费版| 精品无码国产污污污免费| 24小时日本在线www免费的| 成人浮力影院免费看| 18未年禁止免费观看| 1区2区3区产品乱码免费| 99久久免费精品高清特色大片| 国产偷伦视频免费观看| 黄网站免费在线观看| 在线观看人成视频免费无遮挡| 国产真人无码作爱免费视频| 中文字幕免费视频精品一| 少妇性饥渴无码A区免费| 97国免费在线视频| 免费黄网站在线看| 最近免费中文在线视频| 国产精彩免费视频| 最近中文字幕免费mv视频8| 在线播放免费播放av片| yy6080久久亚洲精品|