SpringMVC --03.SpringMVC註解中RequestMapping對映請求
阿新 • • 發佈:2018-12-22
學習目標:
標準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;
}
}