I want to fly higher
          programming Explorer
          posts - 114,comments - 263,trackbacks - 0
              因?yàn)樽?/span>webgame gm服務(wù)器,整體采用的是spring mvc架構(gòu),所以簡(jiǎn)單入門學(xué)習(xí)一下:

          1.spring mvc基本流程
               從URL接受請(qǐng)求及數(shù)據(jù)->DispacherServlet->根據(jù)請(qǐng)求調(diào)用具體的Controller->Controller->調(diào)用service方法處理數(shù)據(jù)->通過DAO訪問
           db->增刪改查->db->返回操作結(jié)果集->service->處理返回結(jié)果->Controller->返回具體頁面和數(shù)據(jù)->jsp頁面
          2.spring mvc注解
           @Controller,@Service,@Repository
               @Controllers聲明控制層。@Service聲明服務(wù)層。@Repository聲明持久層(數(shù)據(jù)傳輸層DAO)
               @RequestMapping把一個(gè)POJO聲明為Spring里的Controller.如果不聲明要寫Controller類就要從Spring的Controller類繼承,并重寫handleRequest方法。
               @RequestMapping(value="*.htm",method=RequestMethod.GET);屬性value聲明Controller處理的請(qǐng)求,method聲明處理請(qǐng)求的類型。可聲明在類頭上,也可聲明在方法頭上。
               @RequestParam綁定參數(shù)與請(qǐng)求參數(shù);例:public String Controller(@RequestParam("id") int topicId,User user)把參數(shù) topicld與請(qǐng)求的參數(shù)“id”綁定,id的值傳入topicld。
               @AutoWired根據(jù)類型自動(dòng)裝配,可放在屬性上,set方法上,構(gòu)造方法上。與@AutoWierd配套使用的是@Qualifier。按名字自動(dòng)裝配。
               @Resource與@AutoWired類似
          3.DispatcherServlet-org.springframework.web.servlet.Dispatc-herServlet
           負(fù)責(zé)將請(qǐng)求分配給控制對(duì)象,所以使用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的初始參數(shù),用來設(shè)置Bean定義文件的位置和名稱,默認(rèn)使用“Servlet名-servlet.xml";可以加上多個(gè)bean文件的來源;如果一個(gè)都沒加則找默認(rèn)的;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時(shí)要spring要查找的包;
            Controller回傳ModleAndView,DispatcherServlet會(huì)交給ViewResolver解析。如:回傳一個(gè)字符串“index”,解析后找到/WEB-INF/index.jsp
          4.Controller-

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

          10    }


          返回“index”,交由ViewResolver解析,返回調(diào)用“/WEB-INF/index.jsp”

              

          1//處理post請(qǐng)求的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以名值對(duì)的形式放入ModelMap,在index.jsp中用request對(duì)象接收;ModleMap,Spring提供的集合可以傳遞數(shù)據(jù)到返回的jsp頁面
          http://www.ibm.com/developerworks/cn/java/j-lo-spring25-mvc/

           以上為基于注解驅(qū)動(dòng)的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>標(biāo)記容器是否在啟動(dòng)的時(shí)候就加載這個(gè)servlet,數(shù)字越小,當(dāng)是一個(gè)負(fù)數(shù)時(shí)或者沒有指定時(shí),則指示容器在該servlet被選擇時(shí)才加載;正數(shù)的值越小,啟動(dòng)該servlet的優(yōu)先級(jí)越高
           2.BuzzwordsController-不用@Controllers則需要實(shí)現(xiàn)Controller接口

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

          12  }

          13


             3.buzzwords-servlet.xml-指定servlet controller和urlmapping的映射關(guān)系

           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 技術(shù)交流.ppt
               1. DispatchServlet在Web容器初始化的時(shí)候完成初始化——initStrategy() 
               2.ViewResolver-從一個(gè)String邏輯視圖名映射到一個(gè)視圖對(duì)象;對(duì)JSP用戶, 通常實(shí)現(xiàn) InternalResourceViewResolver
               3.Controller負(fù)責(zé)接收從DispatchServlet轉(zhuǎn)發(fā)的URL請(qǐng)求

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

           Controller
               -AbstractController
                    -MultiActionController 將多個(gè)請(qǐng)求行為合并在一個(gè)控制器里
                    -BaseCommandController
                          -AbstractCommandController 能將請(qǐng)求參數(shù)綁定到命令對(duì)象
                          -AbstractFormController 支持表單提交的抽象控制器類
                                 -SimpleFormController 簡(jiǎn)單表單處理控制器
                                 -AbstractWizardFormController 向?qū)捅韱翁幚砜刂破?/span>

               ViewResolver接口:Controller傳回ModelAndView對(duì)象,DispatcherServlet將其交由ViewResolver來作View層的相關(guān)解析。要在Spring MVC配置文件中定義一個(gè)ViewResolver實(shí)例

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

          7. 參考\spring mvc\Spring_Web_MVC_架構(gòu).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 文件中設(shè)定 Controller 請(qǐng)求處理完畢之后,所要呈現(xiàn)數(shù)據(jù)的網(wǎng)頁路徑,見mvc -config . xml

              2.controller:
            

           1public 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">對(duì)應(yīng),<value>對(duì)應(yīng)返回的jsp頁面
           8  return new ModelAndView(viewPage, "user", user);
           9     }
              
          10     public void 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 必須根據(jù)一個(gè) HandlerMaPping 對(duì)象,決定請(qǐng)求由哪一個(gè) Controller 來處理, DispatcherServlet 默認(rèn)使用 org.spring-
           framwork .web.servlet.handler . BeanNameUrlHandlerMapping ,也就是根據(jù) Bean 在定義時(shí)的”name”屬性及使用者請(qǐng)求的 URL ,決定使 用哪一個(gè) controller 實(shí)例,例如在這個(gè)例子中,請(qǐng)求 / FirstSpringMVC / hello.do 時(shí), DispatcherServlet 根據(jù)” hello.do ”名稱,決定要 使用 “name”為”hello.do”的 Bean 實(shí)例,所以就是將請(qǐng)求交由 HelloController 的實(shí)例來處理。

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

           WebApplicationContext 實(shí)現(xiàn)了 ApplicationContext 接口,是 Spring 專為 Servlet 的 Web 應(yīng)用程序設(shè)計(jì)的ApplicationContext 實(shí)現(xiàn)類,在取得 WebApplicationContext 之后,可以利用它來取得 Bean 定義文件中定義的 Bean 實(shí)例;
               即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 -如果為每一個(gè)請(qǐng)求編寫一個(gè) Controller 類,在程序規(guī)模增大時(shí),您的 Controller 類將會(huì)迅速增加,可以繼承 或直接使用MultiActionController類,將數(shù)個(gè)相關(guān)的請(qǐng)求處理集中于同一個(gè)對(duì)象,而不用每一個(gè)請(qǐng)求編寫一個(gè)控制對(duì)象。
               使用MultiActionController,您要配合一個(gè) MethodNameResolver 的實(shí)例, MultiActioncontroller 默認(rèn)使用的 MethodNameResolver 類是
           org . springframework . web . servlet . mvc . multiaction . InternalPathMethodNameResolver ,這個(gè)類可以根據(jù)所給的網(wǎng)址中,最后請(qǐng)求的
           文件名稱來判斷執(zhí)行 Controller中的哪一個(gè)方法,例如/test . do 的請(qǐng)求會(huì)執(zhí)行 test ( HttpservletRequest , HttpservletResponse )方法
           。但通常不會(huì)使用 InternalPathMethodNameResolver ,因?yàn)檫@就失去了使用 MultiActionController 的一些優(yōu)點(diǎn),像是依使用者的請(qǐng)求
           參數(shù)來決定所要執(zhí)行的方法。
            改用->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

           

            也可以將所有相對(duì)應(yīng)的方法專門組織在一個(gè)委托(delegate)物件中,而不是撰寫在 Controller 類別中,當(dāng)請(qǐng)求來到時(shí),將
            委托給這個(gè)物件來執(zhí) 行指定的方法,您只要設(shè)定 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>
          posted on 2011-12-26 22:53 landon 閱讀(3113) 評(píng)論(1)  編輯  收藏 所屬分類: Program

          FeedBack:
          # re: Spring MVC入門學(xué)習(xí)
          2014-05-25 21:26 | zuidaima
          主站蜘蛛池模板: 佳木斯市| 饶平县| 湄潭县| 房产| 铁岭市| 奉化市| 丰镇市| 西藏| 泰安市| 孟连| 拜泉县| 夏邑县| 甘孜县| 丹棱县| 虎林市| 章丘市| 广丰县| 旌德县| 阿克| 崇阳县| 永嘉县| 澄城县| 平果县| 全椒县| 措勤县| 黄浦区| 白银市| 玛沁县| 清镇市| 沁源县| 南澳县| 孙吴县| 郁南县| 隆林| 营口市| 神农架林区| 平邑县| 镇坪县| 大荔县| 无极县| 宜州市|