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。限制get和post請求的方法@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一致。