什么是Spring-MVC?
它是一種基于 Java 實現MVC設計模型的請求驅動類型的Web框架。它是封裝了Servlet。
● 入門案例,步驟分析:
一:啟動服務器,加載一些配置文件。
①:DispatcherServlet對象創建。
②:Spring-mvc.xml被加載了。
<!-- 前端控制器 -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
?
<!-- 讓這個類幫我們讀取Spring-mvc配置信息 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:Spring-mvc.xml</param-value>
</init-param>
?
<load-on-startup>1</load-on-startup> <!-- 啟動服務器就創建Servlet -->
?
</servlet>
?
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern> <!-- /表示所有請求都會經過此servlet -->
</servlet-mapping>
③:Controller對象創建。
<!-- 開啟注解掃描 -->
<context:component-scan base-package="Controller"></context:component-scan>
④:開啟Spring-mvc注解的支持。
<!-- 開啟Spring-mvc框架注解的支持 -->
<mvc:annotation-driven/>
二:發送請求,后臺處理請求。
① :客戶端發送請求。
<h3>入門程序</h3>
<a href="hello">入門程序</a>
②:DispatcherServlet 前端控制器,起控制作用。
③:讀取配置類。
/**
* 控制器的類
*/
④:通過視圖解析器對象解析配置類(InternalResourceViewResolver)。
<!-- 視圖解析器 -->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"></property> <!-- 指找那個包 -->
<property name="suffix" value=".jsp"></property> <!-- 指文件后綴名 -->
</bean>
步驟總結:
① Request請求。
② 前端控制器(DispatcherServlet):用于接收請求響應。
③ 請求查找Handler。處理映射器(HandlerMapping)。返回一個執行鏈,此執行鏈就是某個類某個與請求路徑一致的方法。
④ 請求適配器執行(HandlerAdapter),去執行Handler(去執行處理器返回的方法),返回 ModelAndView(xxx.jsp)。
⑤ 通過視圖解析器(ViewResolver)根據返回結果最終跳轉到xxx.jsp頁面。
⑥ 前端控制器(DispatcherServlet)返回響應。
在SpringMvc的各個組件中,處理器映射器,處理器適配器,視圖解析器稱為SpringMvc三大組件。
<!-- 開啟SpringMvc注解支持-->
<mvc:annotation-driven/>
使用以上注解,自動加載RequestMappingHandlerMapping(處理映射器) 和 RequestMappingHandlerAdapter(處理適配器)。
● 配置解決中文亂碼:
<!-- 配置過濾器 -->
<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>
● 常用注解:
○ RequestParam注解。
○ RequestBody注解:用于獲取請求體的內容,get請求不適應,因為它把請求的參數放在url上的。
○ PathVaribale注解:用于綁定url中的占位符。
● restful編程風格:請求地址都一樣,根據不同的請求方式,讓不同的方法去執行。
● 攔截器:
攔截器封裝的是Aop,實現的功能與過濾器相似。
有了過濾器為什么還要用攔截器:過濾器是建立在請求與servlet之間的。而攔截器是建立在servlet與controller之間的。
執行過程:
1、spring開放一個接口(HandlerInterceptor)給我們去實現。
2、在實現方法中輸入用戶指令
3、交回給框架執行
自定義有三個方法:預處理(只有返回ture才執行controller)、數據返回但視圖沒有渲染、數據返回視圖渲染。
<bean id="interceptor" class="com.djl.project.util.Interceptor"></bean>
<!--攔截器-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="b.djl"/> <!-- 放行 -->
<ref bean="interceptor"></ref>
</mvc:interceptor>
</mvc:interceptors>
public class Interceptor implements HandlerInterceptor {
?
7:異常處理
系統所有異常都往外拋,我們自定義一個異常類來做同統一處理。
1),自定義異常。
public class MyException implements HandlerExceptionResolver {
<!-- 異常處理 -->
<bean class="com.djl.project.util.MyException"></bean>
浙公網安備 33010602011771號