成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開(kāi)發(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.     <!-- 如果沒(méi)有通過(guò)< 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 >元素存在并且通過(guò)其子元素配置了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注解類(lèi)型

“org.springframework.stereotype.Controller注解類(lèi)型用于指示Spring類(lèi)的實(shí)例是一個(gè)控制器,其注解形式為@Controller。該注解在使用時(shí)不需要再實(shí)現(xiàn)Controller接口,只需要將@Controller注解加入到控制器類(lèi)上,然后通過(guò)Spring的掃描機(jī)制找到標(biāo)注了該注解的控制器即可。

@Controller注解在控制器類(lèi)中的使用示例如下:

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

為了保證Spring能夠找到控制器類(lèi),還需要在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注解類(lèi)型

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

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)注在類(lèi)上: 該類(lèi)中的所有方法都將映射為相對(duì)于類(lèi)級(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.  } 

由于在類(lèi)上添加了@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版本中,引入了新的組合注解,來(lái)幫助簡(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)的縮寫(xiě),它會(huì)將HTTP GET請(qǐng)求映射到特定的處理方法上。

在實(shí)際開(kāi)發(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ù)和返回類(lèi)型

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

  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 

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

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

Spring MVC所支持的常見(jiàn)方法返回類(lèi)型如下:

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

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

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

  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類(lèi)型除了可以返回上述代碼中的視圖頁(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é)解析視圖。可以通過(guò)在配置文件中定義一個(gè)ViewResolver來(lái)配置視圖解析器,其配置示例如下:

  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)化。例如,入門(mén)案例中的邏輯視圖名只需設(shè)置為“first”,而不再需要設(shè)置為“/WEB-INF/jsp/first.jsp”,在訪問(wèn)時(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的核心類(lèi)及其相關(guān)注解的使用進(jìn)行了詳細(xì)的講解。

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

 

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

 

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

2021-12-27 08:27:17

SpringMVC面試

2022-06-28 14:57:09

FormatterSpring

2009-09-27 14:01:29

Spring MVC

2020-11-02 07:00:29

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

2021-03-26 09:37:12

Java開(kāi)發(fā)代碼

2024-02-01 08:28:28

2011-03-08 08:58:37

springmvc

2022-01-05 08:53:13

Spring原理分析MVC

2023-02-23 08:15:33

Spring異常處理機(jī)制

2023-05-10 08:29:28

Spring配置原理

2021-12-30 23:37:51

SpringMVC RequestResponse

2024-06-19 10:08:34

GoChannel工具

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)

主站蜘蛛池模板: 综合久久av | 欧美日韩国产在线观看 | 91久久精品日日躁夜夜躁国产 | 欧美日韩在线综合 | 国产高清视频在线观看 | 亚洲女人天堂成人av在线 | 精品人伦一区二区三区蜜桃网站 | 精品一区二区三区在线观看国产 | 99亚洲精品 | 久久亚洲一区二区三区四区 | 国产传媒在线观看 | 中文字幕av亚洲精品一部二部 | 亚洲精品久久久一区二区三区 | 国产精品入口 | 99视频在线播放 | 中文字幕日本一区二区 | 日韩高清一区 | 日韩在线精品视频 | 国产综合精品一区二区三区 | 激情六月丁香婷婷 | 香蕉久久a毛片 | 欧洲一区二区三区 | 亚洲综合视频 | 我要看免费一级毛片 | 亚洲精品久久久 | 国产最新精品视频 | 国产欧美一区二区三区在线看 | av在线播放免费 | 一级国产精品一级国产精品片 | 欧美最猛性xxxxx亚洲精品 | 日韩欧美中文 | 日韩久久精品 | 日本在线视 | 亚洲国产精品一区二区久久 | 国产精品久久久久久二区 | 免费毛片网| 中文字幕在线视频免费观看 | 国产成人精品a视频一区www | 日本精品一区二区三区在线观看视频 | 日本 欧美 三级 高清 视频 | 欧美一区二区 |