国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 后端必會的 Spring MVC 核心類和注解

后端必會的 Spring MVC 核心類和注解

2021-11-01 22:22程序員千羽 Java教程

DispatcherServlet的全名是org.springframework.web.servlet.DispatcherServlet,它在程序中充當著前端控制器的角色。在使用時,只需將其配置在項目的web.xml文件中。

后端必會的 Spring MVC 核心類和注解

GitHub:https://github.com/nateshao/ssm/tree/master/107-springmvc-demo

后端必會的 Spring MVC 核心類和注解

1. DispatcherServlet

“DispatcherServlet的全名是org.springframework.web.servlet.DispatcherServlet,它在程序中充當著前端控制器的角色。在使用時,只需將其配置在項目的web.xml文件中,其配置代碼如下:

  1. <servlet> 
  2.     <!-- 如果沒有通過< init-param >元素配置,則應用程序會默認去WEB-INF目錄下尋找以servletName-servlet.xml方式命名的配置文件,這里的servletName指下面的springmvc --> 
  3.     <servlet-name>springmvc</servlet-name
  4.     <servlet-class> 
  5.           org.springframework.web.servlet.DispatcherServlet 
  6.     </servlet-class> 
  7. <!-- 如果< init-param >元素存在并且通過其子元素配置了Spring MVC配置文件的路徑,則應用程序在啟動時會加載配置路徑下的配置文件 --> 
  8.     <init-param> 
  9.         <param-name>contextConfigLocation</param-name
  10.         <param-value>classpath:springmvc-config.xml</param-value> 
  11.     </init-param> 
  12.     <load-on-startup>1</load-on-startup> 
  13. </servlet> 
  14. <servlet-mapping> 
  15.     <servlet-name>springmvc</servlet-name
  16.     <url-pattern>/</url-pattern> 
  17. </servlet-mapping> 

2. @Controller注解類型

“org.springframework.stereotype.Controller注解類型用于指示Spring類的實例是一個控制器,其注解形式為@Controller。該注解在使用時不需要再實現Controller接口,只需要將@Controller注解加入到控制器類上,然后通過Spring的掃描機制找到標注了該注解的控制器即可。

@Controller注解在控制器類中的使用示例如下:

  1. @Controller 
  2. public class HelloController { 
  3.  
  4.     @RequestMapping("hello"
  5.     public String hello(){ 
  6.         return "hello"
  7.     } 

為了保證Spring能夠找到控制器類,還需要在Spring MVC的配置文件中添加相應的掃描配置信息,一個完整的配置文件示例如下:

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <beans xmlns="http://www.springframework.org/schema/beans" 
  3.             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4.            <!-- 引入context信息 --> 
  5.             xmlns:context="http://www.springframework.org/schema/context" 
  6.             xsi:schemaLocation="http://www.springframework.org/schema/beans 
  7.                                              http://www.springframework.org/schema/beans/spring-beans-4.3.xsd 
  8.                                              http://www.springframework.org/schema/context  
  9.                                              http://www.springframework.org/schema/context/spring-context-4.3.xsd"> 
  10.     <!-- 指定需要掃描的 --> 
  11.  <context:component-scan base-package="com.nateshao.controller" /> 
  12. </beans>  

注意:使用注解方式時,程序的運行需要依賴Spring的AOP包,因此需要向lib目錄中添加spring-aop-4.3.6.RELEASE.jar,否則程序運行時會報錯!

3. @RequestMapping注解類型

“Spring通過@Controller注解找到相應的控制器類后,還需要知道控制器內部對每一個請求是如何處理的,這就需要使用@RequestMapping注解類型,它用于映射一個請求或一個方法。使用時,可以標注在一個方法或一個類上。

1. 標注在方法上: 作為請求處理方法在程序接收到對應的URL請求時被調用:

  1. @Controller 
  2. public class FirstController{ 
  3.  @RequestMapping(value="/firstController"
  4.  public ModelAndView handleRequest(HttpServletRequest request, 
  5.    HttpServletResponse response) { 
  6.                            ... 
  7.   return mav; 

2. 標注在類上: 該類中的所有方法都將映射為相對于類級別的請求,表示該控制器所處理的所有請求都被映射到value屬性值所指定的路徑下。

  1. @Controller 
  2. @RequestMapping(value="/hello"
  3. public class FirstController{ 
  4.  @RequestMapping(value="/firstController"
  5.  public ModelAndView handleRequest(HttpServletRequest request, 
  6.    HttpServletResponse response) { 
  7.                            ... 
  8.   return mav; 
  9.  } 

由于在類上添加了@RequestMapping注解,并且其value屬性值為“/hello”,所以上述代碼方法的請求路徑將變為:http://localhost:8080/106-springmvc-hello/hello

@RequestMapping注解除了可以指定value屬性外,還可以指定其他一些屬性,如下表所示。

后端必會的 Spring MVC 核心類和注解

表中所有屬性都是可選的,但其默認屬性是value。當value是其唯一屬性時,可以省略屬性名。例如,下面兩種標注的含義相同:

@RequestMapping(value="/firstController")

@RequestMapping("/firstController")

組合注解

“Spring框架的4.3版本中,引入了新的組合注解,來幫助簡化常用的HTTP方法的映射,并更好的表達被注解方法的語義。

Spring的4.3版本中的組合注解及其描述如下所示:

  • @GetMapping:匹配GET方式的請求;
  • @PostMapping:匹配POST方式的請求;
  • @PutMapping:匹配PUT方式的請求;
  • @DeleteMapping:匹配DELETE方式的請求;
  • @PatchMapping:匹配PATCH方式的請求。

以@GetMapping為例,該組合注解是@RequestMapping(method = RequestMethod.GET)的縮寫,它會將HTTP GET請求映射到特定的處理方法上。

在實際開發中,傳統的@RequestMapping注解使用方式如下:

  1. @RequestMapping(value="/user/{id}",method=RequestMethod.GET) 
  2. public String selectUserById(String id){ 
  3.     ... 

使用@GetMapping注解后的簡化代碼如下:

  1. @GetMapping(value="/user/{id}"
  2. public String selectUserById(String id){ 
  3.     ... 

請求處理方法的參數和返回類型

在控制器類中,每一個請求處理方法都可以有多個不同類型的參數,以及一個多種類型的返回結果。在請求處理方法中,可以出現的參數類型如下:

  1. javax.servlet.ServletRequest / javax.servlet.http.HttpServletRequest 
  2. javax.servlet.ServletResponse / javax.servlet.http.HttpServletResponse 
  3. javax.servlet.http.HttpSession 
  4. org.springframework.web.context.request.WebRequest或 
  5. org.springframework.web.context.request.NativeWebRequest 
  6. java.util.Locale 
  7. java.util.TimeZone (Java 6+) / java.time.ZoneId (on Java 8) 
  8. java.io.InputStream / java.io.Reader 
  9. java.io.OutputStream / java.io.Writer 
  10. org.springframework.http.HttpMethod 
  11. java.security.Principal 
  12. @PathVariable、@MatrixVariable、@RequestParam、@RequestHeader、@RequestBody、@RequestPart、@SessionAttribute、@RequestAttribute注解 
  13. HttpEntity<?> 
  14. java.util.Map / org.springframework.ui.Model /org.springframework.ui.ModelMap 
  15. org.springframework.web.servlet.mvc.support.RedirectAttributes 
  16. org.springframework.validation.Errors /org.springframework.validation.BindingResult 
  17. org.springframework.web.bind.support.SessionStatus 
  18. org.springframework.web.util.UriComponentsBuilder 

該類型不是一個Servlet API類型,而是一個包含了Map對象的Spring MVC類型。如果方法中添加了Model參數,則每次調用該請求處理方法時,Spring MVC都會創建Model對象,并將其作為參數傳遞給方法

請求處理方法的返回類型

Spring MVC所支持的常見方法返回類型如下:

后端必會的 Spring MVC 核心類和注解

由于ModelAndView類型未能實現數據與視圖之間的解耦,所以在企業開發時,方法的返回類型通常都會使用String。

既然String類型的返回值不能攜帶數據,那么在方法中是如何將數據帶入視圖頁面的呢?

通過Model參數類型,即可添加需要在視圖中顯示的屬性,其示例代碼如下:

  1. @RequestMapping(value="/firstController"
  2. public String handleRequest(HttpServletRequest request, 
  3.                                                HttpServletResponse response, Model model) { 
  4.         model.addAttribute("msg""這是我的第一個Spring MVC程序"); 
  5.         return "/WEB-INF/jsp/first.jsp"

String類型除了可以返回上述代碼中的視圖頁面外,還可以進行重定向與請求轉發,具體方式如下:

1. redirect 重定向。例如,在修改用戶信息操作后,將請求重定向到用戶查詢方法的實現代碼如下:

  1. @RequestMapping(value="/update"
  2. public String update(HttpServletRequest request,HttpServletResponse response, Model model){ 
  3.        ...  
  4.        return "redirect:queryUser"

2. forward 請求轉發。例如,用戶執行修改操作時,轉發到用戶修改頁面的實現代碼如下:

  1. @RequestMapping(value="/toEdit"
  2. public String update(HttpServletRequest request,HttpServletResponse response, Model model){ 
  3.        ...  
  4.        return "forward:editUser"

4. ViewResolver(視圖解析器)

Spring MVC中的視圖解析器負責解析視圖??梢酝ㄟ^在配置文件中定義一個ViewResolver來配置視圖解析器,其配置示例如下:

  1. <bean id="viewResolver"    class="org.springframework.web.servlet.view.InternalResourceViewResolver"
  2.         <property name="prefix" value="/WEB-INF/jsp/" /> 
  3.         <property name="suffix" value=".jsp" /> 
  4. </bean> 

在上述代碼中,定義了一個視圖解析器,并設置了視圖的前綴和后綴屬性。這樣設置后,方法中所定義的view路徑將可以簡化。例如,入門案例中的邏輯視圖名只需設置為“first”,而不再需要設置為“/WEB-INF/jsp/first.jsp”,在訪問時視圖解析器會自動的增加前綴和后綴。

5. 基于注解的Spring MVC應用

代碼附上!!

web.xml

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4.          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" 
  5.          version="4.0"
  6.     <context-param> 
  7.         <param-name>contextConfigLocation</param-name
  8.         <param-value>/WEB-INF/applicationContext.xml</param-value> 
  9.     </context-param> 
  10.     <listener> 
  11.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
  12.     </listener> 
  13.     <servlet> 
  14.         <servlet-name>dispatcher</servlet-name
  15.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
  16.         <load-on-startup>1</load-on-startup> 
  17.     </servlet> 
  18.     <servlet-mapping> 
  19.         <servlet-name>dispatcher</servlet-name
  20.         <!--        <url-pattern>*.form</url-pattern>--> 
  21.         <url-pattern>/</url-pattern> 
  22.     </servlet-mapping> 
  23. </web-app> 

dispatcher-servlet.xml

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <beans xmlns="http://www.springframework.org/schema/beans" 
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4.        xmlns:context="http://www.springframework.org/schema/context" 
  5.        xmlns:mvc="http://www.springframework.org/schema/mvc" 
  6.        xsi:schemaLocation="http://www.springframework.org/schema/beans 
  7.        http://www.springframework.org/schema/beans/spring-beans.xsd 
  8.        http://www.springframework.org/schema/context 
  9.        https://www.springframework.org/schema/context/spring-context.xsd 
  10.        http://www.springframework.org/schema/mvc 
  11.        https://www.springframework.org/schema/mvc/spring-mvc.xsd"> 
  12.      
  13.     <context:component-scan base-package="com.nateshao.controller"/> 
  14.     <mvc:default-servlet-handler/> 
  15.     <mvc:annotation-driven/> 
  16.     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"
  17.         <property name="prefix" value="/WEB-INF/jsp/"/> 
  18.         <property name="suffix" value=".jsp"/> 
  19.     </bean> 
  20. </beans> 

 

 

hello.jsp

  1. <%-- 
  2.   Created by IntelliJ IDEA. 
  3.   User: 邵桐杰 
  4.   Date: 2021/10/16 
  5.   Time: 21:34 
  6.   To change this template use File | Settings | File Templates. 
  7. --%> 
  8. <%@ page contentType="text/html;charset=UTF-8" language="java" %> 
  9. <html> 
  10. <head> 
  11.     <title>Title</title> 
  12. </head> 
  13. <body> 
  14. ${msg} 
  15. </body> 
  16. </html> 

HelloController.java

  1. package com.nateshao.controller; 
  2.  
  3. import org.springframework.stereotype.Controller; 
  4. import org.springframework.ui.Model; 
  5. import org.springframework.web.bind.annotation.RequestMapping; 
  6. import javax.servlet.http.HttpServletRequest; 
  7. import javax.servlet.http.HttpServletResponse; 
  8. /** 
  9.  * @date Created by 邵桐杰 on 2021/10/16 21:37 
  10.  * @微信公眾號 程序員千羽 
  11.  * @個人網站 www.nateshao.cn 
  12.  * @博客 https://nateshao.gitee.io 
  13.  * @GitHub https://github.com/nateshao 
  14.  * @Gitee https://gitee.com/nateshao 
  15.  * Description: 
  16.  */ 
  17. @Controller 
  18. public class HelloController { 
  19.     @RequestMapping("/hello"
  20.     public String handleRequest(HttpServletRequest request, 
  21.                                 HttpServletResponse response, Model model) throws Exception { 
  22.         // 向模型對象中添加數據 
  23.         model.addAttribute("msg""這是我的第一個Spring MVC程序"); 
  24.         // 返回視圖頁面 
  25.         return "hello"
  26.     } 

后端必會的 Spring MVC 核心類和注解

總結

這一篇文章主要對Spring MVC的核心類及其相關注解的使用進行了詳細的講解。

  • 首先介紹了DispatcherServlet的作用和配置;
  • 然后介紹了@Controller以及@RequestMapping注解類型的相關知識;
  • 最后講解了視圖解析器的定義和配置,并通過一個應用案例,將所講解的內容進行了一個全面總結。

通過本章的學習,我相信我們能夠了解Spring MVC核心類的作用,并掌握Spring MVC常用注解的使用。

原文鏈接:https://mp.weixin.qq.com/s/3vV5i-5DLlKCP4TWioyzwA

延伸 · 閱讀

精彩推薦
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
主站蜘蛛池模板: 成人精品一区二区 | 一区二区三区av | 成人毛片在线 | 日韩精品在线播放 | 吴梦梦到粉丝家实战华中在线观看 | 中文字幕综合在线 | 午夜精品一区二区三区在线观看 | 欧美日韩电影 | 先锋影音av中文字幕 | 欧美成人h版在线观看 | 久草新在线 | 精品国产黄a∨片高清在线 久草.com | 久久人体视频 | 亚洲日本国产 | 一区二区三区精品视频 | 亚洲国产精品视频一区 | 国产一区二区精品久久岳 | 99草在线视频 | 成人超碰 | 免费在线亚洲 | 国产精品爱久久久久久久 | 91在线日韩 | 国产免费一区二区三区最新6 | 一区二区三区在线免费视频 | 欧美在线综合 | 国产97人人超碰caoprom | 99免费在线视频 | 精品久久一区二区三区 | |级毛片| 亚洲高清第一页 | 欧美国产日韩一区 | 午夜网| 超黄毛片| 欧美精品成人 | 黄p在线看 | 中文字幕一区在线观看视频 | 欧美午夜影院 | 亚洲精品一区二区三区在线观看 | 一区二区三区在线 | 国产一区二区三区不卡在线观看 | 欧美精品99 |