javascript
SpringMVC_2.搭建SpringMVC
第1步: 添加jar包
????????Spring開發 需要的基本包
- Spring-beans-版本號.jar
- Spring-context-版本號.jar
- Spring-core-版本號.jar
- Spring-expression-版本號.jar
- commons.logging-版本號.jar(單獨下載)
- log4j-版本號.jar(單獨下載)
????????SpringMVC開發 需要包
- spring-web-5.1.2.RELEASE.jar
- spring-webmvc-5.1.2.RELEASE.jar
第2步: 配置web.xml,引入SpringMVC框架(注冊前端控制器)
????????SpringMVC是基于請求驅動,圍繞Servlet設計.通過在web.xml中配置SpringMVC的核心Servlet程序--DispatcherServlet,實現將請求分派給控制器.
說明:
?`問題:
????????1.為什么要注冊前端控制器?
????????原因: 之前使用Servlet進行頁面的跳轉控制,現在要用SpringMVC取代Servlet的功能,所以要注冊SpringMVC,告訴服務器(Tomcat)誰來管理轉向問題,按照注冊Servlet頁面的方式注冊即可
? ? ? ? 2.為什么不攔截JSP的請求
????????理解一(本人):
????????原因:
????????1.設置攔截主要攔截靜態資源請求,除了jsp和Servlet外都是靜態資源,就算 /list,/add,/delete 也算是靜態請求,攔截靜態請求后action類進行匹配執行,然后由后臺的action方法進行控制跳轉JSP或其他動態資源
? ? ? ? 補充: 因為只攔截控制靜態請求,不攔截控制動態請求,安全問題,用戶可能直接就訪問JSP頁面,而這些頁面我們是不想讓用戶看到的,用戶看到的都是JSP動態生成的HTML頁面,所以就把JSP文件全部放在WEB-INF文件夾下了,放在那里用戶不能直接訪問只能跳轉)
關于這個問題留言 : 2021/6/28 直到今天,其實我還是感覺 /* 和 / 都沒區別,因為攔截部分和攔截全部都可以交給action類進行處理,搭配上注冊的Tomcat默認Servlet就可以防止攔截后的部分請求訪問不到,如: .png , .jgp ...這些結尾的文件,所以無法理解一定要用 / 來攔截
? ? ? ? 理解二(來自網絡):
????????處理*.jsp是tomcat做的事;所有項目的小web.xml都是繼承于大web.xml
DefaultServlet是Tomcat中處理靜態資源的,除jsp和servlet外的所有都是靜態資源。
Index.html:靜態資源,tomcat就會在服務器下找到這個資源并返回;我們前端控制器的/禁用了tomcat服務器中的DefaultServlet
?延伸:
- SpringMVC配置文件默認名稱: -servlet.xml.
- SpringMVC配置文件默認位置:? / WEB-INF / *-servlet.xml? (和web.xml屬于同一位置)
- SpringMVC配置文件默認名規則:注冊前段控制器時的?的值?拼上-servlet.xml.
自定義配置文件名稱:
????????若自定義SpringMVC配置文件的文件名和位置 ( 位置這里以src下為例 ) ,必須在注冊前端控制器時,(servlet標簽里面)指出文件和位置,示例:
<!--指出SpringMVC配置文件的位置和名字--> <init-param><param-name>contextConfigLocation</param-name>(固定名字)<param-value>classpath:springmvc.xml</param-value>(classpath:src下直接寫相對路徑) </init-param>?示圖?( 注意有順序要求標簽要寫在和標簽后面 )?
第3步: 編寫SpringMVC配置文件
????????備注: SpringMVC配置文件 與 Spring配置文件相同,區別在于配置的內容
編寫SpringMVC配置文件 思路 :
????????1.? 注冊Action,指出哪些類可以處理請求和響應: 控制反轉的任意一種實現方式都可以完成注冊(這里用自動掃描)
? ? ? ? 2.? 注冊視圖解析器,在注冊解析器中聲明要拼接的內容,前綴內容和后綴內容,然后自動完成拼接,拼接規則:?http:localhost:8080/項目名稱 +?前綴 + 邏輯視圖名稱 + 后綴
說明:
????????附加: 了解Action 和 Servlet 的區別請點擊
<!--注冊Action,指出哪些類可以處理請求和響應: 控制反轉的任意一種實現方式都可以完成注冊--> <context:component-scan base-package="action" /> <!--注冊視圖解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="viewResolver"><property name="prefix" value="/WEB-INF/jsp/" />(name固定名字,prefix表示拼接文件的前綴)<property name="suffix" value=".jsp" />(name固定名字,suffix表示拼接路徑的后綴)<!-- 前綴+邏輯視圖名稱+后綴: /WEB-INF/jsp/index.jsp --><!-- http:localhost:8080/項目名稱+/WEB-INF/jsp/index.jsp --> </bean>????????提示: 基本的安全問題,為了防止用戶可以任意直接訪問JSP頁面(因為JSP頁面屬于后臺頁面),所以把JSP頁面放入WEB-INF文件夾中,WEB-INF文件夾中的所有東西用戶都是無法訪問的,只有進行后臺跳轉才可以訪問
| name屬性名 | 作用 |
| prefix | 設置前綴字符用 |
| suffix | 設置后綴字符用 |
第4步: 編寫Action方法
請求映射思路:
????????SpringMVC將請求轉到Action類中,然后根據請求的方式和資源,直接映射到具備相關資源和方式的Action方法上
@Controller //聲明當前類作為控制器使用,具備處理請求和相應的功能 public class TestAction {@RequestMapping("/映射路徑A") //http://localhost:8080/項目名/映射路徑A ?GET請求public String Action方法(){/*任務處理過程略*/return "邏輯視圖名"; //要返回時的視圖頁面} }| 注解名 | 作用 |
| Controller? | (使自動掃描器掃描到本類)聲明當前類作為控制器使用,具備處理請求和相應的功能 |
| RequestMapping("/映射路徑") | 默認攔截GET方式的請求,截取 http:localhost:8080/項目名稱 后面的內容進行判斷(也就是解決項目名后的內容) 如果請求內容和請求方式一致進行攔截處理 |
提示:地址欄中直接訪問屬于GET請求
問題:
????????1.為什么要注解控制類?
????????原因: 讓SpringMVC配置文件掃描的時候可以發現有這么一個可以處理客戶端請求的類,方便接收到請求后轉給這個類進行處理
? ? ? ? 2.為什么Action中的處理請求的方法一定要注解?
????????原因:?控制類接收了請求,根據對有注解的方法的條件進行判斷,判斷請求方式,請求內容,找到滿足要求的,執行該方法
? ? ? ? 3.Action方法一般返回的是什么?
????????原因: 一般返回邏輯視圖名,即需要SpringMVC試圖解析其,解析出真實的文件,才能進行顯示(就像S額錄入Servlet文件中處理完成請求后要重定向或者轉向一個頁面給用戶顯示一樣)
? ? ? ? 2.Action方法返回邏輯視圖名后怎么處理的?
????????原因: 在SpringMVC配置文件中注冊了視圖解析器之后,視圖解析器就會根據Action方法返回的邏輯視圖名進行拼接,拼接成一個完整的請求,然后執行,進行正確的頁面訪問
(建議使用視圖解析器,那樣我們就不需要在Servlet中一樣為了路徑的問題而發愁,每次執行單都要單寫返回路徑害怕寫錯,Action方法應該也是可以像Servlet中那樣返回一個你自己寫的完整的路徑的,我沒有試過,不過應該可以,原理如此)
第5步: 測試請求
在瀏覽器上輸入http://localhost:8080/項a目名/映射路徑A,查看是否顯示相關頁面
請求流程
第一步: 地址欄中輸入了GET方式的請求,發送給服務器
第二步: 被注冊好的前段控制器的條件所攔截請求
第三步: 轉給DispatcherServlet類進行處理
第四部: DispatcherServlet將請求轉給springMvc配置文件
第五步: springMvc配置文件掃描了action,發現了控制類,轉給控制類進行匹配
第六步: 控制類接收了請求,根據對有注解的方法的條件進行判斷,判斷請求方式,請求內容,找到滿足要求的,執行該方法(到這應該就可以理解為什么Action中的處理請求的方法一定要注解了)
響應流程
第一步:Action方法執行完后返回邏輯視圖名
第二步:視圖解析器收到返回的邏輯視圖名,進行拼接處理
第三步:執行拼接好的路徑請求
總結
以上是生活随笔為你收集整理的SpringMVC_2.搭建SpringMVC的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: org.springframework.
- 下一篇: SpringMVC_3.请求映射与静态资