1. 程式人生 > >SpringMVC理解

SpringMVC理解

SpringMVC 的簡介與執行原理如下:

Spring MVC 中的MVC (modal、view、controller)分別是 模型、檢視、控制器

Spring的模型-檢視-控制器(MVC),該框架是圍繞一個DispatcherServlet來設計的,這個DispatcherServlet會把請求分發給各個處理器,並支援可配置的處理器對映、檢視渲染、等,甚至還能支援檔案上傳等功能。

springMVC的執行流程如下:

1. 客戶端發起請求到前端控制器(DispatcherServlet)

2. 前端控制器請求處理器對映器(HandlerMapping)查詢Handler。(可以根據xml配置、註解的方式進行查詢)

3. 處理器對映器向前端控制器返回Handler

4. 前端控制器呼叫處理器介面卡(HandlerAdapter)去執行Handler

5. 處理器介面卡執行Handler

6. Handler執行完成後給介面卡返回ModelAndView

7. 處理器介面卡向前端控制器返回ModelAndView

8. 前端控制器請求檢視解析器(ViewResolver)進行檢視解析

9. 檢視解析器向前端控制器返回view

10. 前端控制器進行檢視渲染

11. 前端控制器向用戶響應結果

(總之,dispatcherServlet就相當於中央處理器,大腦一樣,接收請求,做發出請求什麼的)

MVC元件:

前端控制器DispacherServlet:

      接收請求,相應結果,相當於轉發器,中央處理器,減少其他元件的耦合度

處理器對映器HandlerMapping:

      根據請求的url查詢相應的Handler

Handler處理器:

      是專案的controller,開發的時候,要按照HandlerAdapter開發,這樣介面卡才會去執行

處理器介面卡HandlerAdapter:

      按照特定的規則執行Handler

檢視解析器ViewResolver:

      根據檢視的名稱,解析成view

檢視View:

      一個介面,實現類可以去支援不同型別(jsp...freemarker)

springMVC也有兩種形式來實現。xml配置實現,或者通過註解的形式實現

web.xml

<!-- 配置前端控制器 -->
  <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <init-param>
           <param-name>contextConfigLocation</param-name>
           <param-value>/WEB-INF/classes/config/springmvc_anno.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.action</url-pattern>
    </servlet-mapping>

預設去填寫的路徑去找Springmvc的配置檔案,如果和web.xml同級,則直接寫/web-inf/springmvc.xml。

<init-param>配置contextConfigLocation,配置對映器和處理器,如果不配置的話,預設載入的是web-inf下的名為:servlet名字-servlet.xml

 <!-- post請求亂碼 -->
    <filter> 
        <filter-name>CharacterEncodingFilter</filter-name> 
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
        <init-param> 
            <param-name>encoding</param-name> 
            <param-value>utf-8</param-value> 
        </init-param> 
    </filter> 
    <filter-mapping> 
        <filter-name>CharacterEncodingFilter</filter-name> 
        <url-pattern>/*</url-pattern> 
    </filter-mapping>
<error-page>
      <error-code>404</error-code>
      <location>/404.jsp</location>
    </error-page>

springMVC.xml

<!-- 開啟註解掃描 -->
    <context:component-scan base-package="cn.com.mvc" />
    <!-- 處理器解析器和介面卡 -->
    <mvc:annotation-driven />
    <!-- 檢視解析器 -->
    <!-- 動態返回jsp路徑(字首+名稱+字尾): /jsp/index+.jsp -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

然後在controller上加上註解標籤@RequestMapping。定義了controller的方法對應的url。限制getpost請求的方法@RequestMapping(value="/queryUser",method={RequestMethod.POST,RequestMethod.GET,})Method預設不寫的話,get和post都支援。@Controller方法的返回值作為方法引數的常見型別:基本型別,類型別,集合型別,request,response,session,Model

返回modelandView:addObject相當於setAttribute。setViewName設定jsp的名字,然後在檢視解析器動態拼接。


返回String

  

通過形參中的model,將資料回傳給頁面。

返回void

Return “ forward:update.action”

Return “ redirect:update.action”

Request.getRequestDispatcher(“/WEB-INF/jsp/update.jsp”).forward(request,respons)

如果引數為javabean,則需要控制元件的name和javabean中的name一致。

多刪除的話,可以直接通過表單跳轉,後臺會自動用int[] userid 陣列接收。

queryPojo 接收批量提交的資訊,儲存在itemList集合裡。

後臺可以用pojo的類去接收。條件:表單;控制元件name一致。