国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Spring】— Spring MVC的注解

這篇具有很好參考價(jià)值的文章主要介紹了【Spring】— Spring MVC的注解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Spring MVC的注解

1.DispatcherServlet

DispatcherServlet的全名:

org.Springframework.web.servlet.DispatcherServlet

它在程序中充當(dāng)著前端控制器的角色。

【示例】在使用DispatcherServlet時(shí),只需將其配置在項(xiàng)目的web.xml文件中,其配置代碼如下。

	<servlet>
        <!--配置前端過濾器-->
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--初始化時(shí)加載配置文件-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-config.xml</param-value>
        </init-param>
        <!--表示容器在啟動(dòng)時(shí)立即加載Servlet -->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

在上述代碼中,<load-on-startup>元素和<init-param>元素都是可選的。如果<load-on-startup>元素的值為1,在應(yīng)用程序啟動(dòng)時(shí)就會(huì)立即加載該Servlet;如果<load-on-startup>元素不存在,應(yīng)用程序會(huì)就在第一個(gè)Servlet請(qǐng)求時(shí)加載該Servlet。如果<init-param>元素存在并且通過其子元素配置了Spring MVC配置文件的路徑,應(yīng)用程序在啟動(dòng)時(shí)就會(huì)加載配置路徑下的配置文件;如果沒有通過<init-param>元素配置,應(yīng)用程序就會(huì)默認(rèn)到WEB-INF目錄下尋找如下方式命名的配置文件。

servletName-servlet.xml

servletName指的是部署在web.xml中的DispatcherServlet的名稱,在上面web.xml中的配置代碼中即為springmvc,而-servlet.xml是配置文件名的固定寫法,所以應(yīng)用程序會(huì)在WEB-INF下尋找springmvc-servlet.xml。

2.Controller注解類型

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

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

package com.ssm.controller;
import org.springframework.stereotype.Controller;
......
//Controller注解
@Controller
public class ControllerTest{
......
}

為了保證Spring能夠找到控制器類,還需要在Spring MVC的配置文件中添加相應(yīng)的掃描配置信息,具體如下。

(1)在配置文件的聲明中引入spring-context

(2)使用<context: component-scan>元素指定需要掃描的類包。

完整的配置文件如下。

<?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-4.3.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.3.xsd">
    <!--  指定需要掃描的包  -->
    <context:component-scan base-package="com.ssm.controller"/>
</beans>

<context: component-scan>元素的屬性base-package指定了需要掃描的類包為com.ssm.controller。在運(yùn)行時(shí),該類包及其子包下所有標(biāo)注了注解的類都會(huì)被Spring所處理。與實(shí)現(xiàn)了Controller接口的方式相比,使用注解的方式顯然更加簡單。同時(shí),Controller接口的實(shí)現(xiàn)類只能處理一個(gè)單一的請(qǐng)求動(dòng)作,而基于注解的控制器可以同時(shí)處理多個(gè)請(qǐng)求動(dòng)作,在使用上更加靈活。因此,在實(shí)際開發(fā)中通常都會(huì)使用基于注解的形式。

注意

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

3.RequestMapping注解類型

(1)@RequestMapping注解的使用

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

(1)標(biāo)注在方法上

當(dāng)標(biāo)注在一個(gè)方法上時(shí),該方法將成為一個(gè)請(qǐng)求處理方法,它會(huì)在程序接收到對(duì)應(yīng)的URL請(qǐng)求時(shí)被調(diào)用。

【示例】使用@RequestMapping注解標(biāo)注在方法上的示例如下。

package com.ssm.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

......
//Controller注解
@org.springframework.stereotype.Controller
public class AnnotationControllerTest {
    //@RequestMapping注解標(biāo)注再方法上
    @RequestMapping(value="/annotationController")
    public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1)throws Exception{
        ......
        return m;
    }

}

使用@RequestMapping注解后,上述代碼中的handleRequest()方法就可以通過地址http://localhost:8080/chapter11/annotationController進(jìn)行訪問。

(2)標(biāo)注在類上

當(dāng)標(biāo)注在一個(gè)類上時(shí),該類中的所有方法都將映射為相對(duì)于類級(jí)別的請(qǐng)求,表示該控制器所處理的所有請(qǐng)求都被映射到value屬性值所指定的路徑下。

//Controller注解
@Controller

//@RequestMapping注解標(biāo)注再方法上
@RequestMapping(value = "/controll")
public class AnnotationControllerTest {
    @RequestMapping(value="/annotationController")
    public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1)throws Exception{
        ......
        return m;
    }

}

由于在類上添加了@RequestMapping注解,并且其value屬性值為“/controll”,因此上述代碼方法的請(qǐng)求路徑將變?yōu)閔ttp://localhost:8080/chapter11/controll/annotationController。如果該類中還包含其他方法,那么在其他方法的請(qǐng)求路徑中也需要加入“/ control”。

(2)@RequestMapping注解的屬性

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

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

@RequestMapping(value="/annotationController")
@RequestMapping("/annotationController")
(3) 組合注解

前面已經(jīng)對(duì)@RequestMapping注解及其屬性進(jìn)行了詳細(xì)講解,而在Spring 4.3版本中引入了組合注解來幫助簡化常用的HTTP方法的映射,并更好地表達(dá)被注解方法的語義。其組合注解如下所示。

  • @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映射到特定的處理方法上。在實(shí)際開發(fā)中,傳統(tǒng)的@RequestMapping注解使用方式如下。

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

而使用新注解@GetMapping后,可以省略method屬性,從而簡化代碼,使用方式如下。

  @GetMapping(value="/user/{fid}")
    public String selectUserById(string id){
        ......
    }
(4)請(qǐng)求處理方法的參數(shù)類型和返回類型

在控制器類中,每一個(gè)請(qǐng)求處理方法都可以有多個(gè)不同類型的參數(shù),以及一個(gè)多種類型的返回結(jié)果。之前handleRequest()方法的參數(shù)就是對(duì)應(yīng)請(qǐng)求的HttpServletRequest和HttpServletResponse兩種參數(shù)類型。除此之外,還可以使用其他的參數(shù)類型,例如在請(qǐng)求處理方法中需要訪問HttpSession對(duì)象,就可以添加HttpSession作為參數(shù),Spring會(huì)將對(duì)象正確地傳遞給方法,其使用示例如下。

 @RequestMapping(value="/annotationController")
    public ModelAndView (httpSession session)
    {
        ......
        return m;
    }

在請(qǐng)求處理方法中,可以出現(xiàn)的參數(shù)類型如下。

javax.servlet.ServletRequest/javax.servlet.http.HttpServletRequest
javax.servlet.ServletResponse/javax.servlet.http.HttpServletResponse 
javax.servlet.http.HttpSession 
org.springframework.web.context.request.WebRequest或 
org.springframework.web.context.request.NativeWebRequest 
java.util.Locale
java.util.TimeZone (Java 6+)/java.time.Zoneld(on Java 8) 
java.io.InputStream/java.io.Reader 
Java.io.OutputStream/java.io.Writer 
org.springframework.http.HttpMethod 
java.security.Principal
@PathVariable、@MatrixVariable、@RequestParam、@RequestHeader、@RequestBody、 
@RequestPart、@SessionAttribute@RequestAttribute注解 
HttpEntity<?> 
java.util.Map/org.springframework.ui.Model/lorg.springframework.ui.ModelMap 
org.springframework.web.servlet.mvc.support.RedirectAttributes 
org.springframework.validation.Errors/org.springframework.validation.BindingResult 
org.springframework.web.bind.support.SessionStatus 
org.springframework.web.util.UriComponentsBuilder

注意

org.springframework.ui.Model類型不是一個(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)求處理方法返回的是一個(gè)ModelAndView類型的數(shù)據(jù)。除了這種類型外,請(qǐng)求處理方法還可以返回其他類型的數(shù)據(jù)。Spring MVC所支持的常見方法返回類型如下。

 ModelAndView 
 Model 
 Map 
 View 
 String 
 void 
 HttpEntity<?>ResponseEntity<?> 
 Callable<?> 
  DeferredResult<?>

在上述列舉的返回類型中,常見的返回類型有ModelAndView、String和void。其中,ModelAndView類型中可以添加Model數(shù)據(jù),并指定視圖;String類型的返回值可以跳轉(zhuǎn)視圖,但不能攜帶數(shù)據(jù);而void類型主要在異步請(qǐng)求時(shí)使用,它只返回?cái)?shù)據(jù),而不會(huì)跳轉(zhuǎn)視圖。

由于ModelAndView類型未能實(shí)現(xiàn)數(shù)據(jù)與視圖之間的解耦,因此在開發(fā)時(shí),方法的返回類型通常都會(huì)使用String。既然String類型的返回值不能攜帶數(shù)據(jù),那么在方法中是如何將數(shù)據(jù)帶入視圖頁面呢?這就用到了上面所講解的Model參數(shù)類型,通過該參數(shù)類型即可添加需要在視圖中顯示的屬性。

返回String類型方法的示例代碼如下。

 @RequestMapping(value="/annotationController")
    public String handleRequest(HttpServletRequest arg0, HttpServletResponse arg1,
                                Model model)throws Exception{
        model.addAttribute("msg","第一個(gè)Spring MVC程序");
        return "/WEB-INF/jsp/welcome.jsp";
   }

在上述方法代碼中增加了一個(gè)Model類型的參數(shù),通過該參數(shù)實(shí)例的addAttribute()方法即可添加所需數(shù)據(jù)。String類型除了可以返回上述代碼中的視圖頁面外,還可以進(jìn)行復(fù)位向與請(qǐng)求轉(zhuǎn)發(fā),具體方式如下。

(1)redirect復(fù)位向

例如,在修改用戶信息操作后,將請(qǐng)求復(fù)位向到用戶查詢方法的實(shí)現(xiàn)代碼如下。

@RequestMapping(value="/update")
    public String update(HttpServletRequest request, HttpServletResponse response,
                                Model model){
        //復(fù)位向請(qǐng)求路徑
        return "redirect: queryUser";
   }

(2)forward請(qǐng)求轉(zhuǎn)發(fā)

例如,用戶執(zhí)行修改操作時(shí),轉(zhuǎn)發(fā)到用戶修改頁面的實(shí)現(xiàn)代碼如下。

    @RequestMapping(value="/toEdit")
    public String toEdit(HttpServletRequest request, HttpServletResponse response,
                         Model model){
        //復(fù)位向請(qǐng)求路徑
        return "forward: editUser";
    }

4.ViewResolver(視圖解析器)

Spring MVC中的視圖解析器負(fù)責(zé)解析視圖,可以在配置文件中定義一個(gè)ViewResolver來配置視圖解析器,其配置示例如下。

    <!--定義視圖解析器-->
    <bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--設(shè)置前綴-->
        <property name="prefix" value="/WEB-INF/jsp/" />
        <!--設(shè)置后綴-->
        <property name="suffix" value=".isp" />
    
    </bean>

在上述代碼中定義了一個(gè)id為viewResolver的視圖解析器,并設(shè)置了視圖的前綴和后綴屬性。這樣設(shè)置后,方法中所定義的view路徑將可以簡化。例如,入門案例中的邏輯視圖名只需設(shè)置為“welcome”,而不再需要設(shè)置為“/WEB-INF/jsp/welcome.jsp”,在訪問時(shí)視圖解析器會(huì)自動(dòng)地增加前綴和后綴。文章來源地址http://www.zghlxwxcb.cn/news/detail-499394.html

到了這里,關(guān)于【Spring】— Spring MVC的注解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Spring MVC常用注解

    @PathVariable、@RequestBody和@RequestParam @PathVariable、@RequestBody和@RequestParam是Spring MVC框架中用于處理請(qǐng)求參數(shù)的注解。 @PathVariable:用于處URL路徑中的 占位符參數(shù) 。例如,對(duì)于URL /users/{id} ,其中的 {id} 是一個(gè)占位符,可以使用@PathVariable注解將其綁定到方法的參數(shù)上,如下所示:

    2024年02月09日
    瀏覽(42)
  • 【Spring MVC】快速學(xué)習(xí)使用Spring MVC的注解及三層架構(gòu)

    【Spring MVC】快速學(xué)習(xí)使用Spring MVC的注解及三層架構(gòu)

    ?? 博客主頁:從零開始的-CodeNinja之路 ? 收錄文章:【Spring MVC】快速學(xué)習(xí)使用Spring MVC的注解及三層架構(gòu) ??歡迎大家點(diǎn)贊??評(píng)論??收藏?文章 SpringWebMVC是基于ServletAPI構(gòu)建的原始Web框架,從?開始就包含在Spring框架中。它的正式名稱“SpringWebMVC”來?其源模塊的名稱(Spri

    2024年04月17日
    瀏覽(93)
  • Spring MVC 三 :基于注解配置

    Servlet3.0 Servlet3.0是基于注解配置的理論基礎(chǔ)。 Servlet3.0引入了基于注解配置Servlet的規(guī)范,提出了可拔插的ServletContext初始化方式,引入了一個(gè)叫ServletContainerInitializer的接口。 An instance of the ServletContainerInitializer is looked up via the jar services API by the container at container / application sta

    2024年02月11日
    瀏覽(24)
  • Spring MVC相關(guān)注解運(yùn)用 —— 下篇

    Spring MVC相關(guān)注解運(yùn)用 —— 下篇

    目錄 一、@ResponseBody、@RestController 1.1. JSP頁面 1.2 放行靜態(tài)資源 1.3 編寫實(shí)體類 1.4 控制器方法 1.5 添加依賴 1.6 測試結(jié)果 1.7?@RestController? 二、靜態(tài)資源映射 2.1 配置靜態(tài)資源篩查器 2.2 配置靜態(tài)資源資源映射器 2.3 配置默認(rèn)Servlet處理靜態(tài)資源 三、@RequestBody 3.1?AJAX請(qǐng)求發(fā)送JSO

    2024年02月12日
    瀏覽(20)
  • Spring MVC 的RequestMapping注解

    Spring MVC 的RequestMapping注解

    作用:用于建立請(qǐng)求URL和處理請(qǐng)求方法之間的對(duì)應(yīng)關(guān)系。 出現(xiàn)位置: 類上: 請(qǐng)求 URL的第一級(jí)訪問目錄。此處不寫的話,就相當(dāng)于應(yīng)用的根目錄。寫的話需要以/開頭。它出現(xiàn)的目的是為了使我們的 URL 可以按照模塊化管理,例如: 賬戶模塊: /account /add /account /update /account

    2024年02月02日
    瀏覽(17)
  • Spring MVC-@RequestMapping注解詳解

    目錄 1、@RequestMapping注解的作用 2、@RequestMapping注解的位置 3、value屬性 (1)基礎(chǔ)用法 (3)路徑中的占位符(重點(diǎn)) 4、method屬性 5、params屬性(了解) 6、headers屬性(了解) @RequestMapping注解的作用,就是 將請(qǐng)求和處理請(qǐng)求的控制器方法關(guān)聯(lián)起來 ,建立映射關(guān)系。 SpringMVC接

    2023年04月24日
    瀏覽(14)
  • Spring MVC相關(guān)注解運(yùn)用 —— 中篇

    Spring MVC相關(guān)注解運(yùn)用 —— 中篇

    目錄 一、RESTful風(fēng)格支持 1.1 RESTful風(fēng)格介紹 1.2 postman使用 二、@PathVariable 2.1?實(shí)例程序 2.2 測試結(jié)果? 三、@PostMapping、@GetMapping、@PutMapping、@DeleteMapping 四、@HiddenHttpMethodFilter 4.1?在web.xml配置過濾器 4.2?控制器方法 4.3?JSP頁面 4.4?測試結(jié)果 往期專欄文章相關(guān)導(dǎo)讀? 1. Maven系列專欄

    2024年02月12日
    瀏覽(19)
  • Spring MVC相關(guān)注解運(yùn)用 —— 上篇

    Spring MVC相關(guān)注解運(yùn)用 —— 上篇

    目錄 一、@Controller、@RequestMapping 1.1 示例程序 1.2 測試結(jié)果 二、@RequestParam 2.1 示例程序 2.2 測試結(jié)果 三、@RequestHeader、@CookieValue 3.1 示例程序 3.2 測試結(jié)果 四、@SessionAttributes 4.1 示例程序 4.2 測試結(jié)果 五、@ModelAttribute 5.1 示例程序 5.2 測試結(jié)果 往期專欄文章相關(guān)導(dǎo)讀? 1. Maven系列

    2024年02月11日
    瀏覽(19)
  • Spring MVC中的一些常用注解

    Spring MVC中的一些常用注解

    目錄 @RequestMapping 實(shí)現(xiàn)路由映射 限制請(qǐng)求方式 @PathVariable 從url中獲取變量的值 更改綁定參數(shù)的名字 @RequestParam 可以傳遞集合? 更改綁定參數(shù)的名字 可修改是否為必傳參數(shù) @RequestBody 獲取請(qǐng)求正文的內(nèi)容? 可修改是否為必傳參數(shù) @RequestPart 可以支持上傳文件 更改綁定參數(shù)的名字

    2024年01月19日
    瀏覽(27)
  • Spring MVC學(xué)習(xí)之——RequestMapping注解

    Spring MVC學(xué)習(xí)之——RequestMapping注解

    用于建立請(qǐng)求URL和處理請(qǐng)求方法之間的對(duì)應(yīng)關(guān)系。 value:指定請(qǐng)求的實(shí)際地址,可以是一個(gè)字符串或者一個(gè)字符串列表。 value可以不寫,直接在括號(hào)中寫,默認(rèn)就是value值 @RequestMapping(value=“/hello”) public String hello(){ return…} method:指定請(qǐng)求的方式,可以是GET、POST、PUT、DELE

    2024年01月18日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包