国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

后端必會(huì)的 Spring MVC 核心類和注解

開發(fā) 架構(gòu)
DispatcherServlet的全名是org.springframework.web.servlet.DispatcherServlet,它在程序中充當(dāng)著前端控制器的角色。在使用時(shí),只需將其配置在項(xiàng)目的web.xml文件中。

[[432265]]

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

1. DispatcherServlet

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

  1. <servlet> 
  2.     <!-- 如果沒有通過< init-param >元素配置,則應(yīng)用程序會(huì)默認(rèn)去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配置文件的路徑,則應(yīng)用程序在啟動(dòng)時(shí)會(huì)加載配置路徑下的配置文件 --> 
  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類的實(shí)例是一個(gè)控制器,其注解形式為@Controller。該注解在使用時(shí)不需要再實(shí)現(xiàn)Controller接口,只需要將@Controller注解加入到控制器類上,然后通過Spring的掃描機(jī)制找到標(biāo)注了該注解的控制器即可。

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

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

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

  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>  

 

注意:使用注解方式時(shí),程序的運(yùn)行需要依賴Spring的AOP包,因此需要向lib目錄中添加spring-aop-4.3.6.RELEASE.jar,否則程序運(yùn)行時(shí)會(huì)報(bào)錯(cuò)!

3. @RequestMapping注解類型

“Spring通過@Controller注解找到相應(yīng)的控制器類后,還需要知道控制器內(nèi)部對(duì)每一個(gè)請(qǐng)求是如何處理的,這就需要使用@RequestMapping注解類型,它用于映射一個(gè)請(qǐng)求或一個(gè)方法。使用時(shí),可以標(biāo)注在一個(gè)方法或一個(gè)類上。

1. 標(biāo)注在方法上: 作為請(qǐng)求處理方法在程序接收到對(duì)應(yīng)的URL請(qǐng)求時(shí)被調(diào)用:

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

2. 標(biāo)注在類上: 該類中的所有方法都將映射為相對(duì)于類級(jí)別的請(qǐng)求,表示該控制器所處理的所有請(qǐng)求都被映射到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”,所以上述代碼方法的請(qǐng)求路徑將變?yōu)椋篽ttp://localhost:8080/106-springmvc-hello/hello

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

表中所有屬性都是可選的,但其默認(rèn)屬性是value。當(dāng)value是其唯一屬性時(shí),可以省略屬性名。例如,下面兩種標(biāo)注的含義相同:

@RequestMapping(value="/firstController")

@RequestMapping("/firstController")

組合注解

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

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

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

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

在實(shí)際開發(fā)中,傳統(tǒng)的@RequestMapping注解使用方式如下:

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

使用@GetMapping注解后的簡(jiǎn)化代碼如下:

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

請(qǐng)求處理方法的參數(shù)和返回類型

在控制器類中,每一個(gè)請(qǐng)求處理方法都可以有多個(gè)不同類型的參數(shù),以及一個(gè)多種類型的返回結(jié)果。在請(qǐng)求處理方法中,可以出現(xiàn)的參數(shù)類型如下:

  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 

該類型不是一個(gè)Servlet API類型,而是一個(gè)包含了Map對(duì)象的Spring MVC類型。如果方法中添加了Model參數(shù),則每次調(diào)用該請(qǐng)求處理方法時(shí),Spring MVC都會(huì)創(chuàng)建Model對(duì)象,并將其作為參數(shù)傳遞給方法

請(qǐng)求處理方法的返回類型

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

由于ModelAndView類型未能實(shí)現(xiàn)數(shù)據(jù)與視圖之間的解耦,所以在企業(yè)開發(fā)時(shí),方法的返回類型通常都會(huì)使用String。

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

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

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

String類型除了可以返回上述代碼中的視圖頁(yè)面外,還可以進(jìn)行重定向與請(qǐng)求轉(zhuǎn)發(fā),具體方式如下:

1. redirect 重定向。例如,在修改用戶信息操作后,將請(qǐng)求重定向到用戶查詢方法的實(shí)現(xiàn)代碼如下:

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

2. forward 請(qǐng)求轉(zhuǎn)發(fā)。例如,用戶執(zhí)行修改操作時(shí),轉(zhuǎn)發(fā)到用戶修改頁(yè)面的實(shí)現(xiàn)代碼如下:

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

4. ViewResolver(視圖解析器)

Spring MVC中的視圖解析器負(fù)責(zé)解析視圖??梢酝ㄟ^在配置文件中定義一個(gè)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> 

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

5. 基于注解的Spring MVC應(yīng)用

代碼附上!!

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.  * @微信公眾號(hào) 程序員千羽 
  11.  * @個(gè)人網(wǎng)站 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.         // 向模型對(duì)象中添加數(shù)據(jù) 
  23.         model.addAttribute("msg""這是我的第一個(gè)Spring MVC程序"); 
  24.         // 返回視圖頁(yè)面 
  25.         return "hello"
  26.     } 

總結(jié)

這一篇文章主要對(duì)Spring MVC的核心類及其相關(guān)注解的使用進(jìn)行了詳細(xì)的講解。

  • 首先介紹了DispatcherServlet的作用和配置;
  • 然后介紹了@Controller以及@RequestMapping注解類型的相關(guān)知識(shí);
  • 最后講解了視圖解析器的定義和配置,并通過一個(gè)應(yīng)用案例,將所講解的內(nèi)容進(jìn)行了一個(gè)全面總結(jié)。

 

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

 

責(zé)任編輯:武曉燕 來源: 程序員千羽
相關(guān)推薦

2021-12-27 08:27:17

SpringMVC面試

2022-06-28 14:57:09

FormatterSpring

2020-11-02 07:00:29

Spring Boo注解自動(dòng)化

2009-09-27 14:01:29

Spring MVC

2021-03-26 09:37:12

Java開發(fā)代碼

2011-03-08 08:58:37

springmvc

2022-01-05 08:53:13

Spring原理分析MVC

2024-02-01 08:28:28

2024-06-19 10:08:34

GoChannel工具

2021-12-30 23:37:51

SpringMVC RequestResponse

2023-05-10 08:29:28

Spring配置原理

2023-02-23 08:15:33

Spring異常處理機(jī)制

2022-11-10 07:53:54

Spring參數(shù)校驗(yàn)

2022-02-16 13:46:40

Spring Aop代碼注解

2009-06-18 09:47:14

Spring的核心

2011-12-05 13:44:34

JavaSpringMVC

2009-06-19 17:05:08

MVC框架Struts和Spri

2012-06-17 20:19:29

2012-10-24 14:53:31

IBMdw

2021-12-14 07:43:52

Spring核心原理環(huán)境準(zhǔn)備
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产精品毛片久久| 国产精品偷伦免费视频观看的| 欧美成va人片在线观看| 99热精品在线| 国产无遮挡裸体视频在线观看| 亚洲一区二区三区精品动漫| 久色乳综合思思在线视频| 亚洲国产精品一区二区尤物区| 在线观看亚洲| a∨色狠狠一区二区三区| 色资源网站在线观看| 美日韩免费视频| 4438全国亚洲精品在线观看视频| 日韩一级欧美一级| 91麻豆福利精品推荐| 人人狠狠综合久久亚洲婷婷| 少女频道在线观看高清| 中文字幕成人在线视频| 亚洲999一在线观看www| 最新91在线视频| 欧美一级日韩不卡播放免费| 亚洲第一成年网| 91免费视频网址| 日日噜噜夜夜狠狠视频欧美人| 久久精品色播| 秋霞伦理一区| 懂色av中文在线| 成人性生交免费看| 中国丰满熟妇xxxx性| 91亚色免费| 午夜精品一区二区在线观看的| 日韩视频在线免费播放| 午夜免费一区二区| 香蕉视频在线免费| 99青草视频在线播放视| 黄在线免费观看| 91九色porn在线资源| www.色在线| 麻豆久久久久| 你懂的在线观看一区二区| 国产另类在线| 91蝌蚪视频在线观看| 国产一区二区在线播放| 国产成人激情视频| 97国产精品久久| 在线看片第一页欧美| 亚洲乱码av中文一区二区| 欧美在线色视频| 一区二区不卡在线播放| 国产亚洲视频系列| 91小视频在线免费看| 欧美国产日韩亚洲一区| 国产精品丝袜在线| 亚洲视频1区2区| 国产女同互慰高潮91漫画| 中文字幕欧美三区| 亚洲精品中文字幕在线观看| 欧美丝袜一区二区三区| 在线观看视频一区| 欧美成人aa大片| 精品香蕉一区二区三区| 亚洲精品在线不卡| 色老头一区二区三区| 伊人伊成久久人综合网小说| 亚洲激情中文字幕| 夜夜躁日日躁狠狠久久88av| 欧美巨大黑人极品精男| 国产精品中文字幕在线观看| 97自拍视频| 国产 欧美 日本| 中文字幕www| 91在线网址| **国产精品| 久久精品国产秦先生| 在线观看亚洲精品| 成人黄色av网站| 国产中文欧美精品| 男捅女免费视频| 91精品麻豆| 久久er99热精品一区二区| 亚洲国产成人av| 欧美激情视频一区| 中文字幕の友人北条麻妃| 在线日本视频| 成年人在线免费观看| 免费观看久久久久| 精品国产乱码一区二区三区| 一本综合久久| 亚洲婷婷在线视频| 亚洲激情视频在线| 久久99久久精品国产| 色偷偷亚洲第一成人综合网址| 小早川怜子影音先锋在线观看| 激情综合视频| 亚洲va国产天堂va久久en| 欧美黑人巨大xxx极品| 永久免费网站视频在线观看| 97在线观看免费观看高清| 青青草原综合久久大伊人精品| 国产午夜精品一区二区三区四区| 欧美大黄免费观看| 久久免费99精品久久久久久| 国产在线视频网站| 一个色综合网| 精品久久久久久久久久久久久| 美女福利视频一区| 一本二本三本亚洲码| 国产无遮挡裸体视频在线观看| 欧美日韩午夜| 色狠狠桃花综合| 成人91免费视频| 婷婷成人激情| 亚洲一卡久久| 日韩精品中文字幕在线播放| 中文字幕在线观看一区二区三区| 欧美人与禽性xxxxx杂性| 亚洲精品网址| 亚洲永久免费av| 国产精品久久久久秋霞鲁丝 | 国产不卡视频| 免费av成人在线| 国产精品永久免费在线| 亚洲最大网站| 欧美色老头old∨ideo| 人妻少妇精品无码专区二区| 亚洲三级网址| 日韩欧美一级在线播放| 亚洲色图38p| 老司机精品视频网站| 欧美亚洲国产另类| 香蕉久久aⅴ一区二区三区| 日韩综合一区二区三区| 亚洲乱亚洲高清| 欧美日韩国产免费一区二区| 手机福利在线视频| 亚洲性视频在线| 疯狂欧美牲乱大交777| 精品国产免费一区二区三区| 成人开心激情| 亚洲在线视频免费观看| 视频一区亚洲| 亚洲尤物av| 亚洲加勒比久久88色综合| 国产免费视频传媒| 激情欧美一区| 久久久精品日本| 草草影院在线观看| 日本一区二区三区四区在线视频| 欧美性视频网站| а_天堂中文在线| 最好看的中文字幕久久| 精品视频第一区| 97色成人综合网站| 久久精品中文| 欧美成人中文字幕在线| 在线毛片网站| 亚洲精品免费在线播放| 中文字幕欧美日韩一区二区三区| 色棕色天天综合网| 中日韩美女免费视频网址在线观看 | 国产成人aa在线观看网站站| 91精品国产日韩91久久久久久| 中文字幕乱码人妻综合二区三区| 麻豆精品网站| 8x8ⅹ国产精品一区二区二区| 99精品一区二区| 蜜桃视频免费网站| 在线播放中文字幕一区| 三上悠亚亚洲一区| 久久久久国产视频| 成人精品视频| 久热这里只精品99re8久 | 国产精品91一区二区| 国产3p露脸普通话对白| 国产精品狼人久久影院观看方式| 成年人视频网站| 欧美性猛交xxxx黑人猛交| 最新av番号| 久久精品首页| 91国产美女在线观看| 欧美黑白配在线| 国产精品久久久久久久久免费| 羞羞答答成人影院www| 日本午夜人人精品| 国产一区三区在线播放| 国产精品成人国产乱一区| 国产成人一二片| 久久久亚洲国产| 久久精品国产亚洲blacked| 国产激情久久久| 希岛爱理一区二区三区| 国产精品一级久久久| 日韩在线观看一区二区| 日本一区二区在线视频| 精品一区二区三区免费| 一本久道中文无码字幕av| 亚洲视频资源在线| 噜噜噜在线观看播放视频| 51午夜精品国产| 欧美一区久久久|