日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

一、第一个注解的 SpringMVC 程序

發布時間:2024/7/5 javascript 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一、第一个注解的 SpringMVC 程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ch01-hello-springmvc:第一個注解的springmvc項目

所謂 SpringMVC 的注解式開發是指,在代碼中通過對類與方法的注解,便可完成處理器

在 springmvc 容器的注冊。注解式開發是重點

需求:用戶再頁面發起一個請求,請求交給springmvc的控制器對象
并顯示請求的處理結果(在結果頁面顯示一個歡迎語句)

實現步驟:

  • 新建web maven工程
  • 加入依賴
    spring-webmvc依賴,間接把spring的依賴都加入到項目
    jsp,servlet依賴
  • <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>
  • 重點:在web.xml中注冊springmvc框架的核心對象DispatcherServlet
    1)DispatcherServlet叫做中央調度器,是一個servlet,它的父類是繼承HttpServlet
    2)DispatcherServlet也叫做前端控制器(front controller)
    3)DispatcherServlet負責接收用戶提交的請求,調用其他的控制器對象,并把請求的處理結果顯示給用戶
  • 創建一個發起請求的頁面index.jsp
  • 創建控制器類
    1)在類的上面加入@Controller注解,創建對象,并放入到springmvc容器中
    2)在類中的方法上面加入@RequestMapping注解
  • 創建一個作為結果的jsp,顯示請求的處理結果。
  • 創建springmvc的配置文件(和spring的配置文件一樣)
    1)聲明組件掃描器,指定@Controller注解所在的包名
    2)聲明視圖解析器,幫助處理視圖的
  • <!--聲明 springmvc框架中的視圖解析器,幫助開發人員設置視圖文件的路徑--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!--前綴:視圖文件的路徑--><property name="prefix" value="/WEB-INF/view/"/><!--后綴:視圖文件的擴展名--><property name="suffix" value=".jsp"/></bean>

    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 默認采用轉發的方式跳轉到視圖,本次請求結束,模型中的數據被銷毀。

    package com.zep.controller;import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView;/*** @Controller 創建處理起對象,對象放在springmvc容器中* 使用位置:在類的上面* 和Spring中講的@Service、@Component一樣* 能處理請求的都是控制器(處理器):MyController能夠處理請求,* 叫做后端控制器(back controller)*/ @Controller public class MyController {/*** 處理用戶提交的請求:springmvc中是使用方法來處理的。* 方法是自定義的,可以有多種返回值,多種參數,方法名稱自定義* 準備使用doSome方法處理some.do請求* @RequestMapping:請求映射,作用時把一個請求地址和一個方法綁定在一起,一個請求指定一個方法處理* 屬性:* 1.value是一個String,表示請求的uri地址的(some.do),value的值必須是唯一的,不能重復。在使用時推薦地址以“/”開頭* 使用的位置:* 1.在方法的上面,常用的* 2.在類的上面* 說明:使用@RequestMapping修飾的方法叫做處理器方法或者控制器方法* 使用@RequestMapping修飾的方法是可以處理請求的,類似Servlet中的doGet()、doPost()* 返回值:ModelAndView* Model:數據,請求處理完成后,要顯示給用戶的數據* View:視圖,比如jsp等待*/@RequestMapping(value = "/some.do")public ModelAndView doSome() { // doGet()--service請求處理// 可以處理some.do請求了,相當于service調用處理完成了ModelAndView mv = new ModelAndView();// 添加數據,框架在請求的最后部分把數據放入到request作用域// 相當于是執行了request.setAttribute("msg","歡迎使用springmvc做web開發")mv.addObject("msg","歡迎使用springmvc做web開發");mv.addObject("fun","執行的是doSome方法");// 指定視圖,指定視圖的完整路徑// 框架對視圖執行的是forward操作,類似于request.getRequestDispatcher("/show.jsp").forward(request,response); // mv.setViewName("/show.jsp"); // mv.setViewName("/WEB-INF/view/show.jsp"); // mv.setViewName("/WEB-INF/view/other.jsp");// 當配置了視圖解析器后,可以使用邏輯名稱(文件名),指定視圖// 框架會使用視圖解析器的前綴 + 邏輯名稱 + 后綴 組成完整路徑,這里就是字符串拼接操作// /WEB-INF/view/ + show + .jspmv.setViewName("show");// 返回mvreturn mv;} }

    3. spring-mvc.xml文件:
    聲明組件掃描器

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"><!--聲明組件掃描器--><context:component-scan base-package="com.zep.controller"/> </beans>

    4. 修改視圖解析器的注冊
    SpringMVC 框架為了避免對于請求資源路徑與擴展名上的冗余,在視圖解析器
    InternalResouceViewResolver 中引入了請求的前輟與后輟。而 ModelAndView 中只需給出要跳轉頁面的文件名即可,對于具體的文件路徑與文件擴展名,視圖解析器會自動完成拼接。

    index.jsp:

    <%--Created by IntelliJ IDEA.User: ZepDate: 2020/12/2Time: 0:52To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>index</title> </head> <body><p>第一個springmvc項目</p><p><a href="some.do">發起some.do的請求</a></p></body> </html>

    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 程序的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。