1. 程式人生 > >SpringMVC --03.SpringMVC註解中RequestMapping對映請求

SpringMVC --03.SpringMVC註解中RequestMapping對映請求

學習目標:

標準URL對映

ant風格對映

佔位符對映

限定請求方法對映

限定請求引數對映

組合註解

1、標準URL對映

語法:@RequestMapping(value=”xxx”)

可定義在Controller類上,也可定義在Controller類中的方法上。
如果Controller類上和方法上都加了@RequestMapping,

請求路徑:類上的@RequestMapping的value+方法上的@RequestMapping的value;

如果value不以/開頭springmvc會自動加上。
Controller類上的@RequestMapping可以省略,此時請求路徑就是:方法上的@RequestMapping的value.

2、ant風格對映

?:通配一個字元

*:通配0個或多個字元

**:通配0個或多個路徑

3、佔位符對映

語法:@RequestMapping(value=”show5/{id}/{name}”)

請求路徑:http://localhost:8080/hello/show5/1/james


佔位符不僅有通配的作用,還可以傳遞引數。

例如:
@PathVariable(“id”) Long id可以接收id引數;
@PathVariable(“name”) String name可以接收name引數。


@RequestMapping("show5/{id}/{name}")
public ModelAndView test5(@PathVariable("id")Long id, @PathVariable("name")String name)
注意:@PathVariable(key)中的key值一定要與佔位符的名字一致,而形參的名字可以自定義。

4、限定請求方法對映

所謂限定請求方法就是限制請求的方式、如GET   HEAD   POST   PUT   PATCH   DELETE  OPTIONS   TRACE

框架原始碼:

5、限定請求引數對映

語法:@RequestMapping(value=””,params=””)

 params=”id”    :     請求引數中必須有id

 params=”!id”   :     請求引數中不能包含id

 params=”id=1”  :     請求引數中id的值必須為1

 params=”id!=1”  :    請求引數中id的值必須不能等於1

 params={“id”,”name”}  :   請求引數中必須包含id和name兩個引數

6、組合註解

@GetMapping:相當於@RequestMapping(method=RequestMethod.GET)

@PostMapping:相當於@RequestMapping(method=RequestMethod.POST)

@PutMapping:相當於@RequestMapping(method=RequestMethod.PUT)

@DeleteMapping:相當於@RequestMapping(method=RequestMethod.DELETE)

7、演示:

1、springmvc主入口。配置web.xml 、DispatcherServlet總排程

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">
    <!-- springmvc入口 -->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 專案啟動時,就載入並例項化 -->
        <load-on-startup>1</load-on-startup>

        <!--當springmvc-servlet.xml沒有按照springmvc規定命名就要載入這段來找springmvc.xml-->
        <!--<init-param>-->
            <!--<param-name>contextConfigLocation</param-name>-->
            <!--<param-value>classpath:springmvc.xml</param-value>-->
        <!--</init-param>-->
    </servlet>

    <!--
        /*攔截所有請求
        /攔截所有請求,不包括jsp
        *.do表示攔截所有以.do結尾的請求
     -->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

2、springmvc配置檔案springmvc-servlet.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
        http://www.springframework.org/schema/context/spring-context.xsd">

    <!--基於註解、開啟註解掃描-->
    <context:component-scan base-package="com.day01springmvc.controller"> </context:component-scan>

    <!--
                   把Controller交給spring管理,
                   在瀏覽器中通過id屬性的值來訪問
                   而我們在web.xml中配置的DispatcherServlet的訪問路徑是*.do
                   為了能夠讓請求進入springmvc框架,所以id的值以do結尾
     -->
    <!--<bean id="/hello.do" class="com.day01springmvc.controller.HelloController"></bean>-->
    <!--
            配置檢視解析器
            prefix:指定檢視所在的目錄
            suffix:指定檢視的字尾名
            例如:prefix="/WEB-INF/jsp/", suffix=".jsp",當viewname="test"時,
            跳轉到/WEB-INF/jsp/test.jsp頁面
            prefix+viewname+suffix 找到WEB-INF/hello.jsp
    -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

3、springmvc業務處理器 HelloController2.java

package com.day01springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

/**
 * @ Author     :ShaoWei Sun.
 * @ Date       :Created in 20:58 2018/11/16
 */
@Controller
@RequestMapping("hello")
public class HelloController2 {
    /**
     * 1、標準url對映
     * 語法:@RequestMapping(value = "xxx")
     * 處理請求
     */
    @RequestMapping("show1")
    public ModelAndView test1()  {
        System.out.println("hello請求進來了............");
        ModelAndView mv = new ModelAndView();
        //新增一個數據,頁面上可以取出這個資料
        mv.addObject("msg", "這是第一個springmvc註解程式");
        //設定檢視的名字
        mv.setViewName("hello2");
        return mv;
    }

    /**
     * 2.1、ant風格對映
     * ? 通配一個字元
     * http://localhost:8080/hello/sss9/show2
     * @return
     */
    @RequestMapping("sss?/show2")
    public ModelAndView test2(){
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","ant風格對映:?");
        mv.setViewName("hello2");
        return mv;
    }

    /**
     * 2.2、ant風格對映
     *   * 通配0個或多個字元
     *   http://localhost:8080/hello/aaaabbcc/show3
     * @return
     */
    @RequestMapping("aa*/show3")
    public ModelAndView test3(){
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","ant風格對映: *");
        mv.setViewName("hello2");
        return mv;
    }

    /**
     * 2.3、ant風格對映
     *  ** 通配多0個或多個路徑
     *  http://localhost:8080/hello/aa/bb/cc/show4
     * @return
     */
    @RequestMapping("**/show4")
    public ModelAndView test4(){
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","ant風格對映: **");
        mv.setViewName("hello2");
        return mv;
    }


    /**
     *3、佔位符對映
     * 語法:@RequestMapping(value=”user/{userId}/{userName}”)
     * 請求路徑:http://localhost:8080/hello/show5/1/james
     * @param ids
     * @param names
     * @return
     */
    @RequestMapping("show5/{id}/{name}")
    public ModelAndView test5(@PathVariable("id") Long ids ,@PathVariable("name") String names){
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","佔位符對映:id:"+ids+";name:"+names);
        mv.setViewName("hello2");
        return mv;
    }

    /**
     * 4、限定請求方法對映、如限定為Post請求、不是post請求就出錯
     * http://localhost:8080/hello/show6
     * @return
     */
    @RequestMapping(value = "show6",method = RequestMethod.POST)
    public ModelAndView test6(){
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","限定請求方法對映");
        mv.setViewName("hello2");
        return mv;
    }

    /**
     * 5.1、限定請求引數對映
     * params=”id”    :   請求引數中必須有id
     * http://localhost:8080/hello/show7.do?id=9
     * @return
     */
    @RequestMapping(value = "show7", params = "id")
    public ModelAndView test7(){
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","限定請求引數的對映:必須有id");
        mv.setViewName("hello2");
        return mv;
    }

    /**
     * 5.2、限定請求引數對映
     * params=”!id”   :     請求引數中不能包含id
     * http://localhost:8080/hello/show8
     * @return
     */
    @RequestMapping(value = "show8",params = "!id")
    public ModelAndView test8(){
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","限定請求引數的對映:不能有id");
        mv.setViewName("hello2");
        return mv;
    }

    /**
     * 5.3、限定請求引數對映
     *  params=”id=1”  :     請求引數中id的值必須為1
     *  http://localhost:8080/hello/show9?id=1
     * @return
     */
    @RequestMapping(value="show9",params="id=1")
    public ModelAndView test9(){
        ModelAndView mv = new ModelAndView();
        mv.setViewName("hello2");
        mv.addObject("msg", "限定請求引數的對映:id=1");
        return mv;
    }

    /**
     * 5.4、限定請求引數對映
     *  params=”id!=1”  :    請求引數中id的值必須不能等於1
     *  http://localhost:8080/hello/show10?id=9
     * @return
     */
    @RequestMapping(value="show10",params="id!=1")
    public ModelAndView test10(){
        ModelAndView mv = new ModelAndView();
        mv.setViewName("hello2");
        mv.addObject("msg", "限定請求引數的對映:id!=1");
        return mv;
    }

    /**
     * 5.5、限定請求引數對映
     * params={“id”,”name”}  :   請求引數中必須包含id和name兩個引數
     * http://localhost:8080/hello/show11?name=&id=
     * @return
     */
    @RequestMapping(value="show11",params={"id","name"})
    public ModelAndView test11(){
        ModelAndView mv = new ModelAndView();
        mv.setViewName("hello2");
        mv.addObject("msg", "限定請求引數的對映:請求引數中必須有id,name");
        return mv;
    }

    /**
     * 6.1、組合註解
     * @GetMapping : 相當於@RequestMapping(method=RequestMethod.GET)
     * http://localhost:8080/hello/show12
     * @return
     */
    @GetMapping(value = "show12")
    public ModelAndView test12(){
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","組合註解之@GetMapping");
        mv.setViewName("hello2");
        return mv;
    }


    /**
     * 6.2、組合註解
     * 組合註解之PostMapping
     * @PostMapping :相當於@RequestMapping(method=RequestMethod.POST)
     * @return
     */
    @PostMapping(value="show13")
    public ModelAndView test13(){
        ModelAndView mv = new ModelAndView();
        mv.setViewName("hello2");
        mv.addObject("msg", "組合註解之@PostMapping");
        return mv;
    }

    /**
     * 6.3、組合註解
     * 組合註解之PutMapping
     * @PutMapping :相當於@RequestMapping(method=RequestMethod.PUT)
     * @return
     */
    @PutMapping(value="show14")
    public ModelAndView test14(){
        ModelAndView mv = new ModelAndView();
        mv.setViewName("hello2");
        mv.addObject("msg", "組合註解之@PutMapping");
        return mv;
    }

    /**
     * 6.4、組合註解
     * 組合註解之DeleteMapping
     * @DeleteMapping :相當於@RequestMapping(method=RequestMethod.DELETE)
     * @return
     */
    @DeleteMapping(value="show15")
    public ModelAndView test15(){
        ModelAndView mv = new ModelAndView();
        mv.setViewName("hello2");
        mv.addObject("msg", "組合註解之@DeleteMapping");
        return mv;
    }
}