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
         .....
  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
    publicclass 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請求的Controller2
    @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
不用@Controllers則需要實現Controller接口
 1
publicclass 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
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
指定viewResolver
1
<bean id="viewResolver" class="org.springframework
InternalResourceViewResolver">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

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

Spring Authorization Server課程_spring

 

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

controller:
 1
publicclass 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
 }
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

Spring Authorization Server課程_spring

        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 versinotallow="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" singletnotallow="false"/>18
   </beans>19
20

Spring Authorization Server課程_spring

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

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>