Spring ① 【PLUS】
建议先食用前一个入门文档
@RequestMapping ()作用
Spring MVC使用**@RequestMapping注解为控制器指定可以处理那些URL**请求
在控制器的类定义及方法定义处都可标注
@RequestMapping
- 类定义处 : 提供初步的请求映射信息。相对于WEB应用的根目录
- 方法处 : 提供进一步的细分映射信息。相对于类定义处的URL。若类定义处未标注@RequestMapping,则方法处标记的URL相对于WEB应用的根目录
3.DispatcherServlet截获请求后,就通过控制器@RequestMapping提供的映射信息确定请求所对应的处理
如题
package com.joker.handlers;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@RequestMapping("/springmvc")
@Controller
public class SpringMvcTest {
private static final String success="success";
@RequestMapping("/test")
public String Test(){
System.out.println("我跳了");
return success;
}
}
在前端.jsp文件中 要想执行这个方法的格式为
<a href="${pageContext.request.contextPath}/springmvc/test">XX</a>
可以在不同的类 修饰一样名字的方法
springmvc/test
springmv/test
springm/test
都可!
修饰类就是找哪个旅馆
修饰方法就是找哪间房间
一个旅馆不能有相同的房间,但不同的旅馆可以有相同的房间
@RequestMapping 映射请求参数、请求方法或请求头
1.RequestMapping注解的作用是建立请求URL和处理方法之间的对应关系
2.RequestMapping注解可以作用在方法和类上
1.作用在类上:第一级的访问目录
2.作用在方法上:第二级的访问路径
3.细节:路径可以不编写/表示应用的根目录开始3.RequestMapping的属性
1.path 指定请求路径的URL
2.value value属性和path属性是一样的
3.method 指定该方法的请求方式
4.param 指定限制请求参数的条件
1.params和headers支持简单的表达式:
param1:表示请求必须包含名为param1的请求参数
!param1: 表示请求不能包含名为param1的请求参数
param1 != value1:表示请求包含名为param1的请求参数,但其值不能为value1
{"param1=value1", "param2"}:请求必须包含名为param1和param2的两个请 求参数,且param1参数的值必须为value1
●@RequestMapping 的value、method、params 及heads
分别表示请求URL、请求方法、请求参数及请求头的映射条
件,他们之间是与的关系,联合使用多个条件可让请求映射
更加精确化。
@PathVariable映射URL绑定的占位符
通过@PathVariable可以将URL中占位符参数绑定到控制器处理方法的入参中:
URL中的{xox}占位符可以通过@PathVariable(“xox”)绑定到操作方法的入参中。
@RequestMapping("test4/{id}")
public String testPathVarible(@PathVariable("id") Integer id){
System.out.println("你看看我给你带什么来了?:"+id);
return success;
}
当index.jsp 中的这段代码点击后 上面就会接收到这个请求,自动把id赋值
<a href="/springmvc/test4/3">给我翻译翻译,什么叫惊喜?</a>
成功就会赋值 1
错误就会赋值 0
这也是前端常说的状态码
REST
REST 是一个规范;8个method 憋只按着GET 一个往死里薅!
Rest风格的URL:
以CRUD为例:
新增(POST): /order POST
修改(PUT): /order/1 PUT
获取(GET): /order/1 GET
删除(DELETE): /order/1 DELETE
如何发送PUT请求和DELETE请求呢?
1.需要配置HiddenHttpMethodFilter
在web.xml文件下
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
1.2 原理
2.需要发送POST请求
<a href="/springmvc/test5/1">Test Rest Get</a>
<br><br>
<form action="/springmvc/test5" method="post">
<input type="submit" value="Test Rest POST">
</form>
<br><br>
<form action="/springmvc/test5/1" method="post">
<input type="hidden" name="_method" value="DELETE">
<input type="submit" value="Test Rest DELETE">
</form>
<br><br>
<form action="/springmvc/test5/1" method="post">
<input type="hidden" name="_method" value="PUT">
<input type="submit" value="Test Rest PUT">
</form>
3.需要在发送POST请求时携带一个name=”_ method”的隐藏域,值为DELETE 或PUT
<input type="hidden" name="_method" value="(DELETE/PUT)">
这样子你的POST请求就可以转为 DELETE 或者PUT请求
3.5 测试
@RequestMapping(value = "/test5/{id}",method = RequestMethod.GET)
public String testRest(@PathVariable Integer id){
System.out.println("Test Rest GET:"+id);
return success;
}
@RequestMapping(value = "/test5",method = RequestMethod.POST)
public String testRest(){
System.out.println("Test Rest POST:");
return success;
}
@RequestMapping(value = "/test5/{id}",method = RequestMethod.PUT)
public String testRestPUT(@PathVariable Integer id){
System.out.println("Test Rest PUT:"+id);
return success;
}
@RequestMapping(value = "/test5/{id}",method = RequestMethod.DELETE)
public String testRestDELETE(@PathVariable Integer id){
System.out.println("Test Rest DELETE:"+id);
return success;
}
3.9 结果
@RequestParam 映射請求參數
@RequestParam 来映射请求参数。
index.jsp
Link
handler類
@RequestMapping("/userTest1")
public String User1(@RequestParam(value = "uname")String un,@RequestParam(value = "age",required = false,defaultValue = "0") int age){
System.out.println("userTest1:"+un+" : "+age);
return success;
}
翻譯
当 点击 LINK 后 会执行上述方法 然后会解析上面?后面传来的 值 看 请求过来 的参数名 是否正确。
正确的话就赋值给定义的变量。
其中
value值即请求参数的参数名
required该参数是否必须。默认为true
defaultValue请求参数的默认值
required 为flase的话 就算没有传那个值过来 也会执行.
@RequestParam 相同格式的注释
@RequestHeader("Accept-Encoding") // (绑定请求报头属性值)
@CookieValue("JSESSIONID") // 映射一个Cookie值