當前位置:網站首頁>image

image

2022-01-27 21:27:12 程序員社區

image , 你了解嗎? 本文就為大家帶來了一篇 image 一起看看吧!
另外小編還收集了很多不錯的編程資源,希望對你有幫助:點擊查看
祝您生活愉快~

SSM 整合開發

SSM 編程,即 SpringMVC + Spring + MyBatis 整合,是當前最為流行的 JavaEE 開發技術架構。其實 SSM 整合的實質,僅僅就是將 MyBatis整合入 Spring。因為 SpringMVC原本就是 Spring的一部分,不用專門整合。

SSM 整合的實現方式可分為兩種:基於 XML 配置方式,基於注解方式。

搭建 SSM 開發環境

maven pom.xml

<dependency>     <groupId>javax.servlet</groupId>     <artifactId>javax.servlet-api</artifactId>     <version>3.1.0</version>    <scope>provided</scope></dependency><!-- jsp依賴 --><dependency>      <groupId>javax.servlet.jsp</groupId>      <artifactId>jsp-api</artifactId>      <version>2.2.1-b03</version>      <scope>provided</scope></dependency><dependency>     <groupId>org.springframework</groupId>     <artifactId>spring-webmvc</artifactId>     <version>5.2.5.RELEASE</version></dependency><dependency>     <groupId>org.springframework</groupId>     <artifactId>spring-tx</artifactId>     <version>5.2.5.RELEASE</version></dependency><dependency>     <groupId>org.springframework</groupId>     <artifactId>spring-jdbc</artifactId>     <version>5.2.5.RELEASE</version></dependency><dependency>     <groupId>com.fasterxml.jackson.core</groupId>     <artifactId>jackson-core</artifactId>     <version>2.9.0</version></dependency><dependency>     <groupId>com.fasterxml.jackson.core</groupId>     <artifactId>jackson-databind</artifactId>     <version>2.9.0</version></dependency><dependency>     <groupId>org.mybatis</groupId>     <artifactId>mybatis-spring</artifactId>     <version>1.3.1</version></dependency><dependency>     <groupId>org.mybatis</groupId>     <artifactId>mybatis</artifactId>     <version>3.5.1</version></dependency><dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>5.1.9</version></dependency><dependency>     <groupId>com.alibaba</groupId>     <artifactId>druid</artifactId>     <version>1.1.12</version></dependency>

插件:

<build>     <resources>        <resource>             <directory>src/main/java</directory><!--所在的目錄-->             <includes><!--包括目錄下的.properties,.xml 文件都會掃描到-->                   <include>**/*.properties</include>                 <include>**/*.xml</include>             </includes>             <filtering>false</filtering>         </resource>     </resources>    <plugins>         <plugin>             <artifactId>maven-compiler-plugin</artifactId>             <version>3.1</version>             <configuration>                 <source>1.8</source>                 <target>1.8</target>             </configuration>         </plugin>     </plugins> </build>

配置 web.xml

(1) 注册 ContextLoaderListener 監聽器

image插圖
image.png

注册 ServletContext 監聽器的實現類 ContextLoaderListener,用於創建 Spring 容器及將創建好的 Spring 容器對象放入到 ServletContext 的作用域中。

(2) 注册字符集過濾器

image插圖1
image.png

注册字符集過濾器,用於解决請求參數中攜帶中文時產生亂碼問題。

(3) 配置中央調度器

配置中央調度器時需要注意,SpringMVC的配置文件名與其它 Spring配置文件名不相同。這樣做的目的是 Spring 容器創建管理 Spring 配置文件中的 bean, SpringMVC 容器中負責視圖層 bean 的初始。

image插圖2
image.png

SSM 整合注解開發

項目:ssm
需求:完成學生注册和信息瀏覽。

建錶 Student

使用 Student 錶

image插圖3
image.png

新建 Web 工程

工程名稱 ssm

maven 依賴

<dependencies><!--servlet--> <dependency>     <groupId>javax.servlet</groupId>     <artifactId>javax.servlet-api</artifactId>     <version>3.1.0</version>     <scope>provided</scope> </dependency><!-- jsp 依賴 --> <dependency>     <groupId>javax.servlet.jsp</groupId>     <artifactId>jsp-api</artifactId>     <version>2.2.1-b03</version>     <scope>provided</scope> </dependency> <!--springmvc--> <dependency>     <groupId>org.springframework</groupId>     <artifactId>spring-webmvc</artifactId>     <version>5.2.5.RELEASE</version> </dependency> <!--事務的--> <dependency>     <groupId>org.springframework</groupId>     <artifactId>spring-tx</artifactId>     <version>5.2.5.RELEASE</version> </dependency> <dependency>     <groupId>org.springframework</groupId>     <artifactId>spring-jdbc</artifactId>     <version>5.2.5.RELEASE</version> </dependency><!--aspectj 依賴--> <dependency>     <groupId>org.springframework</groupId>     <artifactId>spring-aspects</artifactId>     <version>5.2.5.RELEASE</version> </dependency> <!--jackson--> <dependency>     <groupId>com.fasterxml.jackson.core</groupId>     <artifactId>jackson-core</artifactId>     <version>2.9.0</version> </dependency> <dependency>     <groupId>com.fasterxml.jackson.core</groupId>     <artifactId>jackson-databind</artifactId>     <version>2.9.0</version> </dependency> <!--mybatis 和 spring 整合的--> <dependency>     <groupId>org.mybatis</groupId>     <artifactId>mybatis-spring</artifactId>     <version>1.3.1</version> </dependency> <!--mybatis--> <dependency>     <groupId>org.mybatis</groupId>     <artifactId>mybatis</artifactId>     <version>3.5.1</version> </dependency> <!--mysql 驅動--> <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>5.1.9</version> </dependency> <!--druid--> <dependency>     <groupId>com.alibaba</groupId>     <artifactId>druid</artifactId>     <version>1.1.12</version> </dependency></dependencies>

插件:

<build>     <resources>         <resource>             <directory>src/main/java</directory><!--所在的目錄-->             <includes><!--包括目錄下的.properties,.xml 文件都會掃描到-->                 <include>**/*.properties</include>                 <include>**/*.xml</include>             </includes>             <filtering>false</filtering>         </resource>     </resources>     <plugins>         <plugin>               <artifactId>maven-compiler-plugin</artifactId>             <version>3.1</version>             <configuration>                 <source>1.8</source>                 <target>1.8</target>             </configuration>         </plugin>    </plugins></build>

定義包,組織程序的結構。

image插圖4
image.png

jsp 文件:

image插圖5
image.png

編寫配置文件

Jdbc 屬性配置文件 jdbc.properties

image插圖6
image.png

Spring 配置文件 applicationContext.xml

image插圖7
image.png

Springmvc 配置文件:springmvc.xml

image插圖8
image.png

mybatis.xml

image插圖9
image.png

定義 web.xml

1)注册 ContextLoaderListener
2)注册 DisatcherServlet
3)注册字符集過濾器
4)同時創建 Spring 的配置文件和 SpringMVC 的配置文件

實體類 Student

image插圖10
image.png

Dao 接口和 sql 映射文件

image插圖11
image.png
image插圖12
image.png

Service 接口和實現類

Service 接口

image插圖13
image.png

Service 實現類

image插圖14
image.png

處理器定義

StuentController.java

image插圖15
image.png

定義視圖-首頁文件--- index.jsp

指定路徑:

<% String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/";%>

指定 base 標簽

<head>   <base href="<%=basePath%>">   <title>title</title></head>
image插圖16
image.png

注册學生頁面 --- addStudent.jsp

image插圖17
image.png

瀏覽學生頁面 --- listStudent.jsp

頁面錶格

image插圖18
image.png

js 內容:
引入 JQuery

image插圖19
image.png

js 發起 ajax

image插圖20
image.png

注册成功頁面--- success.jsp

image插圖21
image.png

注册失敗頁面--- fail.jsp

image插圖22
image.png

SpringMVC 核心技術

請求重定向和轉發

當處理器對請求處理完畢後,向其它資源進行跳轉時,有兩種跳轉方式:請求轉發與重定向。而根據所要跳轉的資源類型,又可分為兩類:跳轉到頁面與跳轉到其它處理器。

注意,對於請求轉發的頁面,可以是WEB-INF中頁面;而重定向的頁面,是不能為WEB-INF中頁的。因為重定向相當於用戶再次發出一次請求,而用戶是不能直接訪問 WEB-INF 中資源的。

image插圖23
image.png

SpringMVC 框架把原來 Servlet 中的請求轉發和重定向操作進行了封裝。現在可以使用簡單的方式實現轉發和重定向。

forward:錶示轉發,實現 request.getRequestDispatcher("xx.jsp").forward()
redirect:錶示重定向,實現 response.sendRedirect("xxx.jsp")

請求轉發

處理器方法返回 ModelAndView 時,需在 setViewName()指定的視圖前添加 forward:,且此時的視圖不再與視圖解析器一同工作,這樣可以在配置了解析器時指定不同比特置的視圖。視圖頁面必須寫出相對於項目根的路徑。forward 操作不需要視圖解析器。

處理器方法返回 String,在視圖路徑前面加入 forward: 視圖完整路徑。

image插圖24
image.png

請求重定向

在處理器方法返回的視圖字符串的前面添加 redirect:,則可實現重定向跳轉。

處理器方法定義:

image插圖25
image.png

异常處理

SpringMVC 框架處理异常的常用方式:使用@ExceptionHandler 注解處理异常。

@ExceptionHandler 注解

使用注解@ExceptionHandler 可以將一個方法指定為异常處理方法。該注解只有一個可選屬性 value,為一個 Class<?>數組,用於指定該注解的方法所要處理的异常類,即所要匹配的异常。

對於异常處理注解的用法,也可以直接將异常處理方法注解於 Controller 之中。

(1) 自定義异常類

定義三個异常類:NameException、AgeException、MyUserException。其中 MyUserException是另外兩個异常的父類。

image插圖26
image.png
image插圖27
image.png
image插圖28
image.png

(2) 修改 Controller 拋出异常

image插圖29
image.png

(3) 定義异常響應頁面

定義三個异常響應頁面。

image插圖30
image.png

不過,一般不這樣使用。而是將异常處理方法專門定義在一個類中,作為全局的异常處理類。

需要使用注解@ControllerAdvice,字面理解就是“控制器增强”,是給控制器對象增强功能的。使用@ControllerAdvice 修飾的類中可以使用@ExceptionHandler。

當使用@RequestMapping 注解修飾的方法拋出异常時,會執行@ControllerAdvice 修飾的類中的异常處理方法。

@ControllerAdvice 是使用@Component 注解修飾的,可以<context:component-scan>掃描到@ControllerAdvice 所在的類路徑(包名),創建對象。

(4) 定義全局异常處理類

image插圖31
image.png

(5) 定義 Spring 配置文件

image插圖32
image.png

攔截器

SpringMVC 中的 Interceptor 攔截器是非常重要和相當有用的,它的主要作用是攔截指定的用戶請求,並進行相應的預處理與後處理。其攔截的時間點在“處理器映射器根據用戶提交的請求映射出了所要執行的處理器類,並且也找到了要執行該處理器類的處理器適配器,在處理器適配器執行處理器之前”。當然,在處理器映射器映射出所要執行的處理器類時,已經將攔截器與處理器組合為了一個處理器執行鏈,並返回給了中央調度器。

一個攔截器的執行

項目:interceptor。
自定義攔截器

image插圖33
image.png

自定義攔截器,需要實現 HandlerInterceptor 接口。而該接口中含有三個方法:

* preHandle(request,response, Object handler):
該方法在處理器方法執行之前執行。其返回值為 boolean,若為 true,則緊接著會執行處理器方法,且會將 afterCompletion()方法放入到一個專門的方法棧中等待執行。

* postHandle(request,response, Object handler,modelAndView):
該方法在處理器方法執行之後執行。處理器方法若最終未被執行,則該方法不會執行。由於該方法是在處理器方法執行完後執行,且該方法參數中包含 ModelAndView,所以該方法可以修改處理器方法的處理結果數據,且可以修改跳轉方向。

* afterCompletion(request,response, Object handler, Exception ex):
當 preHandle()方法返回 true 時,會將該方法放到專門的方法棧中,等到對請求進行響應的所有工作完成之後才執行該方法。即該方法是在中央調度器渲染(數據填充)了響應頁面之後執行的,此時對 ModelAndView 再操作也對響應無濟於事。

afterCompletion 最後執行的方法,清除資源,例如在 Controller 方法中加入數據

image插圖34
image.png

攔截器方法:

image插圖35
image.png

攔截器中方法與處理器方法的執行順序如下圖:

image插圖36
image.png

換一種錶現方式,也可以這樣理解:

image插圖37
image.png

(1) 注册攔截器

image插圖38
image.png

<mvc:mapping/>用於指定當前所注册的攔截器可以攔截的請求路徑,而/**錶示攔截所有請求。

(2) 修改 index 頁面

image插圖39
image.png

(3) 修改處理器

image插圖40
image.png

(4) 修改 show 頁面

image插圖41
image.png

(5) 控制臺輸出結果

image插圖42
image.png

多個攔截器的執行

項目:interceptor2。在項目 interceptor 基礎上修改。

(1) 再定義一個攔截器

image插圖43
image.png

(2) 多個攔截器的注册與執行

image插圖44
image.png

(3) 控制臺執行結果

image插圖45
image.png

當有多個攔截器時,形成攔截器鏈。攔截器鏈的執行順序,與其注册順序一致。需要再次强調一點的是,當某一個攔截器的 preHandle()方法返回 true 並被執行到時,會向一個專門的方法棧中放入該攔截器的 afterCompletion()方法。

多個攔截器中方法與處理器方法的執行順序如下圖:

image插圖46
image.png

從圖中可以看出,只要有一個 preHandle()方法返回 false,則上部的執行鏈將被斷開,其後續的處理器方法與 postHandle()方法將無法執行。但,無論執行鏈執行情况怎樣,只要方法棧中有方法,即執行鏈中只要有 preHandle()方法返回 true,就會執行方法棧中的afterCompletion()方法。最終都會給出響應。

換一種錶現方式,也可以這樣理解:

image插圖47
image.png

權限攔截器舉例

只有經過登錄的用戶方可訪問處理器,否則,將返回“無權訪問”提示。

本例的登錄,由一個 JSP 頁面完成。即在該頁面裏將用戶信息放入 session 中。也就是說,只要訪問過該頁面,就說明登錄了。沒訪問過,則為未登錄用戶。

項目:interceptor_permission。在項目 interceptor1 基礎上修改。

(1) 修改 index 頁面

image插圖48
image.png

(2) 定義 Controller

image插圖49
image.png

(3) 定義 welcome 頁面

image插圖50
image.png

(4) 定義權限攔截器

當 preHandle()方法返回 false 時,需要使用 request 或 response 對請求進行響應。

image插圖51
image.png

(5) 定義 fail 頁面

image插圖52
image.png

(6) 注册權限攔截器

image插圖53
image.png

(7) 定義 login 頁面

image插圖54
image.png

(8) 定義 logout 頁面

image插圖55
image.png

(9) 項目測試

Step1:在地址欄先直接提交 system.do 請求

image插圖56
image.png

Step2:訪問 login.jsp,進行用戶登錄

image插圖57
image.png

Step3:再次提交 system.do 請求

image插圖58
image.png

Step4:訪問 logout.jsp,進行用戶退出

image插圖59
image.png

Step5:三次提交 system.do 請求

image插圖60
image.png

總結

SpringMVC:是基於spring的一個框架, 實際上就是spring的一個模塊, 專門是做web開發的。

理解是servlet的一個昇級

web開發底層是servlet , 框架是在servlet基礎上面加入一些功能,讓你做web開發方便。

SpringMVC就是一個Spring。 Spring是容器,ioc能够管理對象,使用<bean>, @Component, @Repository, @Service, @Controller

SpringMVC能够創建對象, 放入到容器中(SpringMVC容器), springmvc容器中放的是控制器對象,

我們要做的是 使用@Contorller創建控制器對象, 把對象放入到springmvc容器中, 把創建的對象作為控制器使用這個控制器對象能接收用戶的請求, 顯示處理結果,就當做是一個servlet使用。

使用@Controller注解創建的是一個普通類的對象, 不是Servlet。 springmvc賦予了控制器對象一些額外的功能。

web開發底層是servlet, springmvc中有一個對象是Servlet : DispatherServlet(中央調度器)
DispatherServlet: 負責接收用戶的所有請求, 用戶把請求給了DispatherServlet, 之後DispatherServlet把請求轉發給我們的Controller對象, 最後是Controller對象處理請求。

index.jsp-----DispatherServlet(Servlet)----轉發,分配給---Controller對象(@Controller注解創建的對象)
main.jsp---------------------MainController
addUser.jsp-----------------UserController


springmvc請求的處理流程

1)發起some.do
2)tomcat(web.xml--url-pattern知道 *.do的請求給DispatcherServlet)
3)DispatcherServlet(根據springmvc.xml配置知道 some.do---doSome())
4)DispatcherServlet把some.do轉發個MyController.doSome()方法
5)框架執行doSome()把得到ModelAndView進行處理, 轉發到show.jsp

上面的過程簡化的方式
some.do---DispatcherServlet---MyController


springmvc執行過程源代碼分析

  1. tomcat啟動,創建容器的過程
    通過load-on-start標簽指定的1,創建DisaptcherServlet對象,
    DisaptcherServlet它的父類是繼承HttpServlet的, 它是一個serlvet, 在被創建時,會執行init()方法。

在init()方法中

   //創建容器,讀取配置文件    WebApplicationContext ctx = new ClassPathXmlApplicationContext("springmvc.xml");    //把容器對象放入到ServletContext中    getServletContext().setAttribute(key, ctx);

上面創建容器作用: 創建@controller注解所在的類的對象, 創建MyController對象,這個對象放入到 springmvc的容器中, 容器是map , 類似 map.put("myController",MyController對象)

2.請求的處理過程
1)執行servlet的service()
protected void service(HttpServletRequest request, HttpServletResponse response)

   protected void doService(HttpServletRequest request, HttpServletResponse response)  DispatcherServlet.doDispatch(request, response){      調用MyController的.doSome()方法  }

doDispatch:springmvc中DispatcherServlet的核心方法, 所有的請求都在這個方法中完成的。

沒有加入注解驅動標簽時的狀態
org.springframework.http.converter.ByteArrayHttpMessageConverter
org.springframework.http.converter.StringHttpMessageConverter
org.springframework.http.converter.xml.SourceHttpMessageConverter
org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter

加入注解驅動標簽時的狀態
org.springframework.http.converter.ByteArrayHttpMessageConverter
org.springframework.http.converter.StringHttpMessageConverter
org.springframework.http.converter.ResourceHttpMessageConverter
org.springframework.http.converter.ResourceRegionHttpMessageConverter
org.springframework.http.converter.xml.SourceHttpMessageConverter
org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter
org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter
org.springframework.http.converter.json.MappingJackson2HttpMessageConverter

==========================================================================
發起的請求是由哪些服務器程序處理的。

http://localhost:8080/ch05_url_pattern/index.jsp
http://localhost:8080/ch05_url_pattern/js/jquery-3.4.1.js
http://localhost:8080/ch05_url_pattern/images/p1.jpg
http://localhost:8080/ch05_url_pattern/html/test.html
http://localhost:8080/ch05_url_pattern/some.do

tomcat本身能處理靜態資源的訪問, 像html, 圖片, js文件都是靜態資源

tomcat的web.xml文件有一個servlet 名稱是 default , 在服務器啟動時創建的。

 <servlet>        <servlet-name>default</servlet-name>        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>        <init-param>            <param-name>debug</param-name>            <param-value>0</param-value>        </init-param>        <init-param>            <param-name>listings</param-name>            <param-value>false</param-value>        </init-param>        <load-on-startup>1</load-on-startup>    </servlet>      <servlet-mapping>        <servlet-name>default</servlet-name>        <url-pattern>/</url-pattern>  錶示靜態資源和未映射的請求都這個default處理    </servlet-mapping>

default這個servlet作用:
The default servlet for all web applications, that serves static
resources. It processes all requests that are not mapped to other
servlets with servlet mappings (defined either here or in your own
web.xml file).

1.處理靜態資源
2.處理未映射到其它servlet的請求。

========================================================================
在jsp , html中使用的地址, 都是在前端頁面中的地址,都是相對地址

地址分類:
1.絕對地址 , 帶有協議名稱的是絕對地址, http://www.baidu.com
2.相對地址, 沒有協議開頭的, 例如 user/some.do , /user/some.do

相對地址不能獨立使用,必須有一個參考地址。 通過參考地址+相對地址本身才能指定資源。

3.參考地址
1) 在你的頁面中的,訪問地址不加 "/"

訪問的是: http://localhost:8080/ch06_path/index.jsp
路徑: http://localhost:8080/ch06_path/
資源: index.jsp

在index.jsp發起 user/some.dohttp://localhost:8080/ch06_path/user/some.do
當你的地址 沒有斜杠開頭,例如 user/some.do , 當你點擊鏈接時, 訪問地址是當前頁面的地址加上鏈接的地址。
http://localhost:8080/ch06_path/ + user/some.do


index.jsp 訪問 user/some.do , 返回後現在的地址: http://localhost:8080/ch06_path/user/some.do

http://localhost:8080/ch06_path/user/some.do
路徑: http://localhost:8080/ch06_path/user/
資源: some.do

在index.jsp在 user/some.do ,就變為 http://localhost:8080/ch06_path/user/user/some.do

解决方案:
1.加入${pageContext.request.contextPath}
2.加入一個base標簽, 是html語言中的標簽。 錶示當前頁面中訪問地址的基地址。
你的頁面中所有 沒有“/”開頭的地址,都是以base標簽中的地址為參考地址
使用base中的地址 + user/some.do 組成訪問地址

2)在你的頁面中的,訪問地址加 "/"
訪問的是: http://localhost:8080/ch06_path/index.jsp
路徑: http://localhost:8080/ch06_path/
資源: index.jsp

點擊 /user/some.do, 訪問地址變為 http://localhost:8080/user/some.do

參考地址是 你的服務器地址, 也就是 http://localhost:8080

    如果你的資源不能訪問: 加入${pageContext.request.contextPath}
<a href="${pageContext.request.contextPath}/user/some.do">發起user/some.do的get請求</a>

index.jsp--addStudent.jsp---student/addStudent.do( service的方法,調用dao的方法)--result.jsp

==================================================================================================

轉發和重定向

forward:錶示轉發
redirect:錶示重定向
forward和redirect都是關鍵字, 有一個共同的特點不和視圖解析器一同工作

擴展:
forward和redirect他們都可以訪問 視圖文件,比如某個jsp ,html
forward:/hello.jsp forward:/main.html

forward和redirect他們都可以訪問其它的controller
forward:/some.do , redirect:/other.do

處理器方法可以返回ModelAndView, String , void 都可以使用forward,redirect

============================================================================================
异常處理:
springmvc框架采用的是統一,全局的异常處理。
把controller中的所有异常處理都集中到一個地方。 采用的是aop的思想。把業務邏輯和异常處理代碼分開。解耦合。

使用兩個注解
[email protected]
[email protected]

攔截器:
1)攔截器是springmvc中的一種,需要實現HandlerInterceptor接口。

2)攔截器和過濾器類似,功能方向側重點不同。 過濾器是用來過濾器請求參數,設置編碼字符集等工作。
攔截器是攔截用戶的請求,做請求做判斷處理的。

3)攔截器是全局的,可以對多個Controller做攔截。
一個項目中可以有0個或多個攔截器, 他們在一起攔截用戶的請求。
攔截器常用在:用戶登錄處理,權限檢查, 記錄日志。

攔截器的使用步驟:
1.定義類實現HandlerInterceptor接口
2.在springmvc配置文件中,聲明攔截器, 讓框架知道攔截器的存在。

攔截器的執行時間:
1)在請求處理之前, 也就是controller類中的方法執行之前先被攔截。
2)在控制器方法執行之後也會執行攔截器。
3)在請求處理完成後也會執行攔截器。

攔截器:看做是多個Controller中公用的功能,集中到攔截器統一處理。使用的aop的思想

=================================================================================
多個攔截器:
第一個攔截器preHandle=true , 第二個攔截器preHandle=true

111111-攔截器的MyInterceptor的preHandle()
22222-攔截器的MyInterceptor的preHandle()
=====執行MyController中的doSome方法=====
22222-攔截器的MyInterceptor的postHandle()
111111-攔截器的MyInterceptor的postHandle()
22222-攔截器的MyInterceptor的afterCompletion()
111111-攔截器的MyInterceptor的afterCompletion()


第一個攔截器preHandle=true , 第二個攔截器preHandle=false

111111-攔截器的MyInterceptor的preHandle()
22222-攔截器的MyInterceptor的preHandle()
111111-攔截器的MyInterceptor的afterCompletion()


第一個攔截器preHandle=false , 第二個攔截器preHandle=true|false

111111-攔截器的MyInterceptor的preHandle()

====================================================================
攔截器和過濾器的區別

1.過濾器是servlet中的對象, 攔截器是框架中的對象
2.過濾器實現Filter接口的對象, 攔截器是實現HandlerInterceptor
3.過濾器是用來設置request,response的參數,屬性的,側重對數據過濾的。
攔截器是用來驗證請求的,能截斷請求。
4.過濾器是在攔截器之前先執行的。
5.過濾器是tomcat服務器創建的對象
攔截器是springmvc容器中創建的對象
6.過濾器是一個執行時間點。
攔截器有三個執行時間點
7.過濾器可以處理jsp,js,html等等
攔截器是側重攔截對Controller的對象。 如果你的請求不能被DispatcherServlet接收, 這個請求不會執行攔截器內容
8.攔截器攔截普通類方法執行,過濾器過濾servlet請求響應

===========================================================================

image插圖61
jQuery文件沒有加載成功.png
image插圖62
攔截器.png
image插圖63
多個攔截器執行.png
image插圖64
springmvc.png
image插圖65
思維導圖1.png
image插圖66
思維導圖2.png
image插圖67
思維導圖整體.png

版權聲明
本文為[程序員社區]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/01/202201272127121509.html

隨機推薦