javascript
一、第一个注解的 SpringMVC 程序
ch01-hello-springmvc:第一個注解的springmvc項目
所謂 SpringMVC 的注解式開發是指,在代碼中通過對類與方法的注解,便可完成處理器
在 springmvc 容器的注冊。注解式開發是重點。
需求:用戶再頁面發起一個請求,請求交給springmvc的控制器對象
并顯示請求的處理結果(在結果頁面顯示一個歡迎語句)
實現步驟:
spring-webmvc依賴,間接把spring的依賴都加入到項目
jsp,servlet依賴
1)DispatcherServlet叫做中央調度器,是一個servlet,它的父類是繼承HttpServlet
2)DispatcherServlet也叫做前端控制器(front controller)
3)DispatcherServlet負責接收用戶提交的請求,調用其他的控制器對象,并把請求的處理結果顯示給用戶
1)在類的上面加入@Controller注解,創建對象,并放入到springmvc容器中
2)在類中的方法上面加入@RequestMapping注解
1)聲明組件掃描器,指定@Controller注解所在的包名
2)聲明視圖解析器,幫助處理視圖的
pom.xml文件:
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>ch01-hello-springmvc</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><!--servlet依賴--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><!--springmvc依賴--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.5.RELEASE</version></dependency></dependencies><build><plugins><!-- 編碼和編譯和JDK版本 --><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build> </project>0. 項目結構:
1. 配置web.xml文件:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!-- 聲明,注冊springmvc的核心對象DispatcherServlet需要在tomcat服務器啟動后,創建DispatcherServlet對象的實例為什么要創建DispatcherServlet對象的實例呢?因為DispatcherServlet在他的創建過程中,會同時創建springmvc容器對象讀取springmvc的配置文件,把這個配置文件中的對象都創建好,當用戶發起請求時,就可以直接使用對象了。servlet的初始化會執行init()方法。DispatcherServlet在init()中{// 創建容器,讀取配置文件WebApplicationContext ctx = new ClassPathXmlApplicationContext("springmvc.xml");// 把容器對象放入到ServletContext中getServletContext().setAttribute(key,ctx);} 注冊中央處理器--><!--啟動tomcat報錯讀取這個文件/WEB-INF/springmvc-servlet.xml失敗springmvc創建容器對象時,讀取的配置文件默認是/WEB-INF/《servlet-name》-servlet.xml我們可以不使用這種默認的讀取文件的方式,自定義springmvc讀取的配置文件所在的位置--><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--自定義springmvc讀取的配置文件的位置--><init-param><!--springmvc的配置文件的位置的屬性--><param-name>contextConfigLocation</param-name><!--指定自定義文件的位置--><param-value>classpath:springmvc.xml</param-value></init-param><!--在tomcat啟動后,創建Servlet對象load-on-startup:表示tomcat啟動后創建對象的順序。它的值是整數,數值越小,tomcat創建對象的時間越早。大于等于0的整數--><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><!--使用框架的時候,url-pattern可以使用兩種值1. 使用擴展名方式,語法:*.xxx, xxx是自定義的擴展名。常用的方式 *.do、*.action、*.mvc等等http://localhost:8080/springmvc/some.dohttp://localhost:8080/springmvc/other.do2. 使用斜杠“/”--><url-pattern>*.do</url-pattern></servlet-mapping> </web-app> 1. 全限定性類名 該中央調度器為一個 Servlet,名稱為 DispatcherServlet。中央調度器的全限定性類名在 導入的 Jar 文件 spring-webmvc-5.2.5.RELEASE.jar 的第一個包 org.springframework.web.servlet 下可找到。2. <load-on-startup/>: 在<servlet/>中添加<load-on-startup/>的作用是,標記是否在Web服務器(這里是Tomcat) 啟動時會創建這個 Servlet 實例,即是否在 Web 服務器啟動時調用執行該 Servlet 的 init()方 法,而不是在真正訪問時才創建。 它的值必須是一個整數。 ? 當值大于等于 0 時,表示容器在啟動時就加載并初始化這個 servlet,數值越小,該 Servlet 的優先級就越高,其被創建的也就越早; ? 當值小于 0 或者沒有指定時,則表示該 Servlet 在真正被使用時才會去創建。 ? 當值相同時,容器會自己選擇創建順序。3. <url-pattern/> 對于<url-pattern/>,可以寫為 / ,建議寫為*.do 的形式。4. 配置文件位置與名稱 注冊完畢后,可直接在服務器上發布運行。此時,訪問瀏覽器頁面,控制臺均會拋出 FileNotFoundException 異常。即默認要從項目根下的 WEB-INF 目錄下找名稱為 Servlet 名稱 -servlet.xml 的配置文件。這里的“Servlet 名稱”指的是注冊中央調度器<servlet-name/>標簽 中指定的 Servlet 的 name 值。本例配置文件名為 springmvc-servlet.xml。而一般情況下,配置文件是放在類路徑下,即 resources 目錄下。所以,在注冊中央調 度器時,還需要為中央調度器設置查找 SpringMVC 配置文件路徑,及文件名。
2. MyController.java文件:
@Controller創建處理器對象,對象放在springmvc容器中使用位置:在類的上面 和Spring中講的@Service、@Component一樣能處理請求的都是控制器(處理器): MyController能夠處理請求,叫做后端控制器(back controller)@RequestMapping:請求映射,作用時把一個請求地址和一個方法綁定在一起一個請求指定一個方法處理屬性:1.value是一個String,表示請求的uri地址的(some.do),value的值必須是唯一的,不能重復。在使用時推薦地址以“/”開頭使用的位置:1.在方法的上面,常用的2.在類的上面說明:使用@RequestMapping修飾的方法叫做處理器方法或者控制器方法使用@RequestMapping修飾的方法是可以處理請求的,類似Servlet中的doGet()、doPost()。若有多個請求路徑均可匹配該處理器方法的執行,則@RequestMapping 的 value 屬性中可以寫上一個數組。ModelAndView 類中的 addObject()方法用于向其 Model 中添加數據。Model 的底層為一個 HashMap。
Model 中的數據存儲在 request 作用域中,SringMVC 默認采用轉發的方式跳轉到視圖,本次請求結束,模型中的數據被銷毀。
3. spring-mvc.xml文件:
聲明組件掃描器
4. 修改視圖解析器的注冊
SpringMVC 框架為了避免對于請求資源路徑與擴展名上的冗余,在視圖解析器
InternalResouceViewResolver 中引入了請求的前輟與后輟。而 ModelAndView 中只需給出要跳轉頁面的文件名即可,對于具體的文件路徑與文件擴展名,視圖解析器會自動完成拼接。
index.jsp:
show.jsp:
<%--Created by IntelliJ IDEA.User: ZepDate: 2020/12/2Time: 1:14To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>show</title> </head> <body><h3>show.jsp從request作用域獲取數據</h3><h3>msg數據:${msg}</h3><h3>fun數據:${fun}</h3></body> </html>運行結果:
點擊 發起some.do的請求
總結:
*SpringMVC請求的處理流程:
1)訪問index.jsp頁面,點擊超鏈接,發起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 程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一维条形码识别c语言_条形码的优点
- 下一篇: 升级 ubuntu_Ubuntu 19.