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;
           <servlet>
                 <servlet-name>hello</servlet-name>
                 <servlet-class>
              org.springframework.web.servlet.DispatcherServlet
            </servlet-class>
            <init-param>
               <param-name>contextConfigLocation</param-name>
                          <param-value>
              /WEB-INF/mvc-config.xml,
              /WEB-INF/spring-config.xml
            <param-value>
                          <init-param>
                  </servlet>
                   .....
            可以加上contextConfigLocation的初始參數,用來設置Bean定義文件的位置和名稱,默認使用“Servlet名-servlet.xml";可以加上多個bean文件的來源;如果一個都沒加則找默認的;hello-servlet.xml

            spring-servlet.xml-
            <context:component-scan base-package="cn.spring.demo" />
           <bean
           class="org.springframework.web.servlet.view.InternalResourceView-Resolver"
           p:prefix="" p:suffix=".jsp" />
            base-package為注入bean時要spring要查找的包;
            Controller回傳ModleAndView,DispatcherServlet會交給ViewResolver解析。如:回傳一個字符串“index”,解析后找到/WEB-INF/index.jsp
          4.Controller-

              @Controller//將類聲明為Spring容器里的Bean,Spring調用時實例化
              @RequestMapping("index.htm")//聲明這個Controller處理的請求是什么
              public class IndexController 
              {
               @RequestMapping(method = RequestMethod.GET)
               public String doGet() 
               {
                return "index";
               }
              }
          返回“index”,交由ViewResolver解析,返回調用“/WEB-INF/index.jsp”

              //處理post請求的Controller
              @Controller
              @RequestMapping(value="index.htm",method = RequestMethod.POST)
              public String doPost(String username, String password, ModelMap modelMap) throws Exception 
              {
               modelMap.addAttribute("name",username);
               return "index";
              }
          把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-
             <servlet>
              <servlet-name>buzzwords</servlet-name>
              <servlet-class>
                 org.springframework.web.servlet.DispatcherServlet
              </servlet-class>
             <load-on-startup>1</load-on-startup>
             </servlet>
              
            <context-param>
             <param-name>contextConfigLocation</param-name>
             <param-value>/WEB-INF/buzzwords-service.xml</param-value>
             </context-param>
             <load-on-startup>標記容器是否在啟動的時候就加載這個servlet,數字越小,當是一個負數時或者沒有指定時,則指示容器在該servlet被選擇時才加載;正數的值越小,啟動該servlet的優先級越高
           2.BuzzwordsController-不用@Controllers則需要實現Controller接口
            public class BuzzwordsController implements Controller
            {
             private BuzzwordService facade;   
             public void setFacade(BuzzwordService facade)
             {       
               this.facade = facade;
             }   
             public ModelAndView handleRequest(HttpServletRequest request,  HttpServletResponse response) throws Exception
             {       
              return new ModelAndView("buzzwords", "buzzwordService", facade);   
             }
            }
           3.buzzwords-servlet.xml-指定servlet controller和urlmapping的映射關系
            <bean id="buzzwordsController“
             class="BuzzwordsController">
              <property name="facade"><ref bean="buzzwordService"/></property>
            </bean>

            <bean id="urlMapping" class="SimpleUrlHandlerMapping">
             <property name="mappings">
              <props>
              <prop key="/buzzwords.htm">
               buzzwordsController
              </prop>
           4.指定viewResolver
            <bean id="viewResolver" class="org.springframework...InternalResourceViewResolver">
              <property name="viewClass">
             <value>org.springframework... ...View</value>
             </property>
              <property name="prefix"><value>/WEB-INF/jsp/</value></property>
               <property name="suffix"><value>.jsp</value></property>
            </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:
            <servlet>
            <servlet-name>dispatcherServlet</servlet-name>
            <servlet-class>
                org.springframework.web.servlet.DispatcherServlet
            </servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>/WEB-INF/mvc-config.xml</param-value>
            </init-param>       
            <load-on-startup>1</load-on-startup>
               </servlet>

               <servlet-mapping>
            <servlet-name>dispatcherServlet</servlet-name>
            <url-pattern>*.do</url-pattern>
               </servlet-mapping>

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

              2.controller:
            public class HelloController implements Controller
            {
               private String viewPage;   
               public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse res)  throws Exception
               {
            String user = req.getParameter("user");
            //viewPage與mvc-config.xml中的<property name="viewPage">對應,<value>對應返回的jsp頁面
            return new ModelAndView(viewPage, "user", user);
               }   
               public void setViewPage(String viewPage)
               {
            this.viewPage = viewPage;
               }
           }


             3.mvc-config.xml:
             <beans>  
               <bean id="viewResolver"
              class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix">
                <value>/WEB-INF/jsp/</value>
            </property>
            <property name="suffix">
                <value>.jsp</value>
            </property>
               </bean>
              
               <bean name="/hello.do"
              class="onlyfun.caterpillar.HelloController">
            <property name="viewPage">
                <value>hello</value>
            </property>
               </bean>
           </beans>

               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中-
             <context-param>
              <param-name>contextConfigLocation</param-name>
              <param-value>/WEB-INF/beans-config.xml</param-value>
             </context-param>     
              <listener>
              <listener-class>
               org.springframework.web.context.ContextLoaderListener
             </listener-class>
             </listener>
            beans-config.xml-
             <?xml version="1.0" encoding="UTF-8"?>
             <!DOCTYPE beans PUBLIC
              "-//SPRING/DTD BEAN/EN"
              "

             <beans>  
               <bean id="dateBean" class="java.util.Date" singleton="false"/>
             </beans>
               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-
              <bean id="paraMethodResolver"          
              class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
              <property name="paramName">
               <value>action</value>
              </property>
              <property name="defaultMethodName">
               <value>list</value>
              </property>
              </bean>

             <bean id="bookController" class="onlyfun.caterpillar.BookController">
             <property name="methodNameResolver">  <ref bean="paraMethodResolver"/>  </property>

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

            或者->PropertiesMethodNameResolver
            <bean id="propMethodResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
             <property name="mappings">
              <props>
               <prop key="/listbook.do">list</prop>
               <prop key="/addbook.do">add</prop>
               <prop key="/deletebook.do">delete</prop>
              </props>
             </property>
            </bean>


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
           
          主站蜘蛛池模板: 康定县| 玉屏| 广河县| 刚察县| 固阳县| 故城县| 册亨县| 泾源县| 中阳县| 惠安县| 方正县| 临汾市| 即墨市| 临海市| 巴彦淖尔市| 甘德县| 许昌市| 绍兴县| 厦门市| 绍兴市| 景泰县| 华蓥市| 苍溪县| 温州市| 西城区| 乌鲁木齐市| 镇江市| 刚察县| 沈阳市| 南木林县| 信阳市| 洛扎县| 上蔡县| 兴义市| 博野县| 鹰潭市| 新化县| 兰州市| 镇康县| 拜城县| 萨迦县|