spring mvc3 入門


   因為做webgame gm服務器,整體采用的是spring mvc架構,所以簡單入門學習一下:

1.spring mvc基本流程      從URL接受請求及數據->DispacherServlet->根據請求調用具體的Controller->Controller->調用service方法處理數據->通過DAO訪問 db->增刪改查->db->返回操作結果集->service->處理返回結果->Controller->返回具體頁面和數據->jsp頁面 2.spring mvc注解 @Controller,@Service,@Repository      @Controllers聲明控制層。@Service聲明服務層。@Repository聲明持久層(數據傳輸層DAO)      @RequestMapping把一個POJO聲明為Spring里的Controller.如果不聲明要寫Controller類就要從Spring的Controller類繼承,並重寫handleRequest方法。      @RequestMapping(value="*.htm",method=RequestMethod.GET);屬性value聲明Controller處理的請求,method聲明處理請求的類型。可聲明在類頭上,也可聲明在方法頭上。      @RequestParam綁定參數與請求參數;例:public String Controller(@RequestParam("id") int topicId,User user)把參數 topicld與請求的參數“id”綁定,id的值傳入topicld。      @AutoWired根據類型自動裝配,可放在屬性上,set方法上,構造方法上。與@AutoWierd配套使用的是@Qualifier。按名字自動裝配。      @Resource與@AutoWired類似 3.DispatcherServlet-org.springframework.web.servlet.Dispatc-herServlet 負責將請求分配給控制對象,所以使用Spring MVC的第一步是在web.xml中定義DispatcherServlet;

1 < servlet > 2        < servlet-name > hello </ servlet-name > 3        < servlet-class > 4     org.springframework.web.servlet.DispatcherServlet 5   </ servlet-class > 6   < init-param > 7      < param-name > contextConfigLocation </ param-name > 8                 < param-value > 9     /WEB-INF/mvc-config.xml, 10     /WEB-INF/spring-config.xml 11   < param-value > 12                 < init-param > 13         </ servlet > 14

         .....   可以加上contextConfigLocation的初始參數,用來設置Bean定義文件的位置和名稱,默認使用“Servlet名-servlet.xml";可以加上多個bean文件的來源;如果一個都沒加則找默認的;hello-servlet.xml

  spring-servlet.xml-

1 < context:component-scan base-package ="cn.spring.demo" /> 2 < bean 3 class ="org.springframework.web.servlet.view.InternalResourceView-Resolver" 4 p:prefix ="" p:suffix =".jsp" />

base-package為注入bean時要spring要查找的包;   Controller回傳ModleAndView,DispatcherServlet會交給ViewResolver解析。如:回傳一個字符串“index”,解析后找到/WEB-INF/index.jsp 4.Controller-

1 @Controller // 將類聲明為Spring容器里的Bean,Spring調用時實例化 2     @RequestMapping( " index.htm " ) // 聲明這個Controller處理的請求是什么 3     public class IndexController 4     { 5     @RequestMapping(method = RequestMethod.GET) 6     public String doGet() 7     { 8      return"index"; 9     }10    }

返回“index”,交由ViewResolver解析,返回調用“/WEB-INF/index.jsp”

   

1 // 處理post請求的Controller 2     @Controller 3     @RequestMapping(value = " index.htm " ,method = RequestMethod.POST) 4     public String doPost(String username, String password, ModelMap modelMap) throws Exception 5     { 6     modelMap.addAttribute("name",username); 7     return"index"; 8    }

把username以名值對的形式放入ModelMap,在index.jsp中用request對象接收;ModleMap,Spring提供的集合可以傳遞數據到返回的jsp頁面 http://www.ibm.com/developerworks/cn/java/j-lo-spring25-mvc/

以上為基於注解驅動的mvc

5.DispacherServlet-HandlerMapping-ModleAndView-Controller-ViewResolver-View 1.web.xml指定DispacherServelet和servlet的xml   web.xml-

1 < servlet > 2     < servlet-name > buzzwords </ servlet-name > 3     < servlet-class > 4        org.springframework.web.servlet.DispatcherServlet 5     </ servlet-class > 6    < load-on-startup > 1 </ load-on-startup > 7    </ servlet > 8     9   < context-param > 10    < param-name > contextConfigLocation </ param-name > 11    < param-value > /WEB-INF/buzzwords-service.xml </ param-value > 12    </ context-param > 13

     <load-on-startup>標記容器是否在啟動的時候就加載這個servlet,數字越小,當是一個負數時或者沒有指定時,則指示容器在該servlet被選擇時才加載;正數的值越小,啟動該servlet的優先級越高 2.BuzzwordsController-不用@Controllers則需要實現Controller接口

1 public class BuzzwordsController implements Controller 2   { 3   private BuzzwordService facade;    4   publicvoid setFacade(BuzzwordService facade) 5   {        6     this.facade = facade; 7   }    8   public ModelAndView handleRequest(HttpServletRequest request,  HttpServletResponse response) throws Exception 9   {        10    returnnew ModelAndView("buzzwords", "buzzwordService", facade);    11   }12  } 13

   3.buzzwords-servlet.xml-指定servlet controller和urlmapping的映射關系

1 < bean id ="buzzwordsController“ 2    class=" BuzzwordsController" > 3     < property name ="facade" >< ref bean ="buzzwordService" /></ property > 4   </ bean > 5 6   < bean id ="urlMapping" class ="SimpleUrlHandlerMapping" > 7    < property name ="mappings" > 8     < props > 9     < prop key ="/buzzwords.htm" > 10      buzzwordsController 11     </ prop > 12 13

   4.指定viewResolver

1 < bean id ="viewResolver" class ="org.springframeworkInternalResourceViewResolver" > 2     < property name ="viewClass" > 3    < value > org.springframework View </ value > 4    </ property > 5     < property name ="prefix" >< value > /WEB-INF/jsp/ </ value ></ property > 6      < property name ="suffix" >< value > .jsp </ value ></ property > 7   </ bean >

5.buzzwords.jsp 6.參考 \spring mvc\Spring MVC 詳解.ppt   \spring mvc\Spring MVC 技術交流.ppt      1. DispatchServlet在Web容器初始化的時候完成初始化——initStrategy()      2.ViewResolver-從一個String邏輯視圖名映射到一個視圖對象;對JSP用戶, 通常實現 InternalResourceViewResolver      3.Controller負責接收從DispatchServlet轉發的URL請求

     開發一個Spring MVC程序的基本步驟:      1編寫處理請求邏輯的處理器-controller;      2在DispatcherServlet上下文對應的Spring配置文件中配置處理器;      3配置一個視圖解析器,對處理器返回的ModelAndView進行解析;      4編寫一個視圖對象(jsp或ftl等),將響應展現給客戶

Controller      -AbstractController           -MultiActionController 將多個請求行為合並在一個控制器里           -BaseCommandController                 -AbstractCommandController 能將請求參數綁定到命令對象                 -AbstractFormController 支持表單提交的抽象控制器類                        -SimpleFormController 簡單表單處理控制器                        -AbstractWizardFormController 向導型表單處理控制器

     ViewResolver接口:Controller傳回ModelAndView對象,DispatcherServlet將其交由ViewResolver來作View層的相關解析。要在Spring MVC配置文件中定義一個ViewResolver實例

     ModelAndView-Mode1AndView 類代表了 Spring Web MVC 程序中,呈現畫面時所使用 Model 數據對象與 View 數據對象,由於 Java  程序的方法中一次只能回傳一個對象,所以 Modelview 的作用是封裝這兩個對象,方便您同時返回 Model 與 View SimpleUrlHandlerMapping-最常用的處理器映射,將請求的URLs 影射到handlers;由一系列的分別代表URLs 和bean 的名字的name/value 對來定義影射;在x-servlet.xml中定義

7. 參考\spring mvc\Spring_Web_MVC_架構.ppt 1.web.xml:

1 < servlet > 2   < servlet-name > dispatcherServlet </ servlet-name > 3   < servlet-class > 4       org.springframework.web.servlet.DispatcherServlet 5   </ servlet-class > 6   < init-param > 7       < param-name > contextConfigLocation </ param-name > 8       < param-value > /WEB-INF/mvc-config.xml </ param-value > 9   </ init-param >         10   < load-on-startup > 1 </ load-on-startup > 11      </ servlet > 12 13      < servlet-mapping > 14   < servlet-name > dispatcherServlet </ servlet-name > 15   < url-pattern > *.do </ url-pattern > 16      </ servlet-mapping > 17

 

     可以在 XML 文件中設定 Controller 請求處理完畢之后,所要呈現數據的網頁路徑,見mvc -config . xml

    2.controller:

1 public class HelloController implements Controller 2   { 3     private String viewPage;    4     public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse res)  throws Exception 5     { 6  String user = req.getParameter("user"); 7  //viewPage與mvc-config.xml中的<property name="viewPage">對應,<value>對應返回的jsp頁面 8  returnnew ModelAndView(viewPage, "user", user); 9     }    10     publicvoid setViewPage(String viewPage) 11     { 12  this.viewPage = viewPage; 13     }14 }

   3.mvc-config.xml:

1 < beans >    2      < bean id ="viewResolver" 3     class ="org.springframework.web.servlet.view.InternalResourceViewResolver" > 4   < property name ="prefix" > 5       < value > /WEB-INF/jsp/ </ value > 6   </ property > 7   < property name ="suffix" > 8       < value > .jsp </ value > 9   </ property > 10      </ bean > 11      12      < bean name ="/hello.do" 13     class ="onlyfun.caterpillar.HelloController" > 14   < property name ="viewPage" > 15       < value > hello </ value > 16   </ property > 17      </ bean > 18 </ beans > 19

        DisPatcherServlet 必須根據一個 HandlerMaPping 對象,決定請求由哪一個 Controller 來處理, DispatcherServlet 默認使用 org.spring- framwork .web.servlet.handler . BeanNameUrlHandlerMapping ,也就是根據 Bean 在定義時的”name”屬性及使用者請求的 URL ,決定使 用哪一個 controller 實例,例如在這個例子中,請求 / FirstSpringMVC / hello.do 時, DispatcherServlet 根據” hello.do ”名稱,決定要 使用 “name”為”hello.do”的 Bean 實例,所以就是將請求交由 HelloController 的實例來處理。

     在 controller 返回 ModelAndView 后, Dispatcherservlet 會交由 ViewResolver 對象來作 View 層的相關解析,因而您需要設置一個 ViewResolver 實例,在這個范例中將以 JSP 作為 View 層技術-InternalResourceViewResolver如果想要在自己所定義的 servlet 類中使用 spring 的容器功能,則也可以使用org·springframework·web·context·ContextLoaderListener contextLoaderListener 默認會讀取 applicationContext.xml,您可以指定自己的定義文件,只要在 <context-param>中指定”contextConfigLocation”參數;

WebApplicationContext 實現了 ApplicationContext 接口,是 Spring 專為 Servlet 的 Web 應用程序設計的ApplicationContext 實現類,在取得 WebApplicationContext 之后,可以利用它來取得 Bean 定義文件中定義的 Bean 實例;      即web.xml中-

1 < context-param > 2     < param-name > contextConfigLocation </ param-name > 3     < param-value > /WEB-INF/beans-config.xml </ param-value > 4    </ context-param >       5     < listener > 6     < listener-class > 7      org.springframework.web.context.ContextLoaderListener 8    </ listener-class > 9    </ listener > 10   beans-config.xml- 11    <? xml version="1.0" encoding="UTF-8" ?> 12    <! DOCTYPE beans PUBLIC 13     "-//SPRING/DTD BEAN/EN" 14     "http://www.springframework.org/dtd/spring-beans.dtd" > 15 16    < beans >    17      < bean id ="dateBean" class ="java.util.Date" singleton ="false" /> 18    </ beans > 19 20

        4.MultiActionController -如果為每一個請求編寫一個 Controller 類,在程序規模增大時,您的 Controller 類將會迅速增加,可以繼承 或直接使用MultiActionController類,將數個相關的請求處理集中於同一個對象,而不用每一個請求編寫一個控制對象。      使用MultiActionController,您要配合一個 MethodNameResolver 的實例, MultiActioncontroller 默認使用的 MethodNameResolver 類是
org . springframework . web . servlet . mvc . multiaction . InternalPathMethodNameResolver ,這個類可以根據所給的網址中,最后請求的 文件名稱來判斷執行 Controller中的哪一個方法,例如/test . do 的請求會執行 test ( HttpservletRequest , HttpservletResponse )方法 。但通常不會使用 InternalPathMethodNameResolver ,因為這就失去了使用 MultiActionController 的一些優點,像是依使用者的請求 參數來決定所要執行的方法。   改用->ParameterMethodNameResolver   mvc-config.xml-

1 < bean id ="paraMethodResolver"            2     class ="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver" > 3     < property name ="paramName" > 4      < value > action </ value > 5     </ property > 6     < property name ="defaultMethodName" > 7      < value > list </ value > 8     </ property > 9     </ bean > 10 11    < bean id ="bookController" class ="onlyfun.caterpillar.BookController" > 12    < property name ="methodNameResolver" >   < ref bean ="paraMethodResolver" />   </ property > 13

 

  也可以將所有相對應的方法專門組織在一個委托(delegate)物件中,而不是撰寫在 Controller 類別中,當請求來到時,將   委托給這個物件來執 行指定的方法,您只要設定 MultiActionController 的"delegate"屬性參考至委托物件即可

  或者->PropertiesMethodNameResolver

1 < bean id ="propMethodResolver" class ="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver" > 2    < property name ="mappings" > 3     < props > 4      < prop key ="/listbook.do" > list </ prop > 5      < prop key ="/addbook.do" > add </ prop > 6      < prop key ="/deletebook.do" > delete </ prop > 7     </ props > 8    </ property > 9   </ bean >


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM