1.RequestParam注解
- 作用:把请求中的指定名称的参数传递给控制器中的形参赋值
- 属性
- value:请求参数中的名称
- required:请求参数中是否必须提供此参数,默认值是true,必须提供
5*. 代码如下=====================*
jsp代码. ------------------------
<%–
Created by IntelliJ IDEA.
User: Administrator
Date: 2018/12/6
Time: 11:31
To change this template use File | Settings | File Templates.
–%>
<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
/**
- 常用注解 控制器
*/
@Component
@RequestMapping("/anno")
public class AnnoController {
@RequestMapping("/testRequestParam")
public String testRequestParam(@RequestParam(name = “name”)String username) {//name = “name”==前端 写的必须是 要与后端 参数一致
System.out.println(“执行了。。。。。”);
System.out.println(username);
return “success”;
}
}
测试==================
FrameworkServlet ‘dispatcherServlet’: initialization completed in 1261 ms
执行了。。。。。
封红卫
2. RequestBody注解
见名知意: 就跟请求体 有关
- 作用:用于获取请求体的内容(注意:get方法不可以)
- 属性
- required:是否必须有请求体,默认值是true
- 代码如下
- jsp-----------------------------
-
<%----%>
用户姓名:<input type="text" name="name"/><br/>
用户年龄:<input type="text" name="age"/><br/>
<input type="submit" value="提交"/>
java代码----------------------- @RequestMapping("/anno/saveUser") public String annosaveUserParam(@RequestBody String body) {//这里 指定整个 请求体 System.out.println("执行了。。。。。"); System.out.println(body); return "success"; } 测试结果-------------------------- 执行了。。。。。 name=fff&age=20
3 . PathVariable注解
-
作用:拥有绑定url中的占位符的。例如:url中有/delete/{id},{id}就是占位符
-
属性
-
value:指定url中的占位符名称
-
Restful风格的URL
-
请求路径一样,可以根据不同的请求方式去执行后台的不同方法
-
restful风格的URL优点
-
结构清晰
-
符合标准
-
易于理解
-
扩展方便
-
代码如下
-
jsp代码------------------------
-
java 代码--------------------------
-
*/
@RequestMapping("/testPathVariable/{fid}")
public String testPathVariable(@PathVariable(name = “fid”)String id){// params.jsp 里的超链接 会自动的将我们参数 赋值System.out.println( “执行了”);
System.out.println(id);
return “success” ;// 并返回 到 success.jsp 的 页面
测试 结果-------------------------------
initialization completed in 1098 ms
执行了
10
restful 风格
:–方法 请求的路径都是同一个 根据的请求方式: post 或get 。。。。 来确定的
-----同为一个请求方式里----再 根据路径 —》
比如get 方式里 同为get请求方式的 findALL 与findById
在国外的 非常的流行 的: 比如 京东 网页
我们 显式 的45132.html 就是 :商品数字的id
你的项目会有 很多 ------seo 优化 职业—》比如百度 里的
经常发生改变的 静态资源多的额时候 也会 有这样
那些优化会然你排名靠前 —而那些 一个静态页面
只要你的请求方式不同 比如还有 put请求 里方法 不一样
get=====.查询
Post、===== 保存 。。。
PUT======
但是默认 的只支持 的get 与 Post 请求
而 要发送 替他的 2个请求的(Delete 与 put) 就要下面得要说的 过滤器
代码示意:--------------------------------
@RequestMapping(value = “/testPathVariable/{fid}”,method = RequestMethod.POST)/
4. RequestHeader注解
-
作用:获取指定请求头的值
-
属性
-
value:请求头的名称
-
代码如下
-
jsp------------4
-
java代码--------------
-
@RequestMapping("/testRequestHeader")//定义 post 请求
public String testRequestHeader(@RequestHeader(value= “Accept”)String header){// params.jsp 里的超链接 会自动的将我们参数 赋值System.out.println( "执行了"); System.out.println(header); return "success" ;// 并返回 到 success.jsp 的 页面
}
测试-----------
initialization completed in 1175 ms
执行了
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8
CookieValue注解
-
作用:用于获取指定cookie的名称的值
-
属性
-
value:cookie的名称
jsp代码--------------------------------
testCookieValue
-
java代码---------------------
-
@RequestMapping("/testCookieValue")//定义 post 请求
public String testCookieValue(@CookieValue(value= “JSESSIONID”)String cookieValue){// params.jsp 里的超链接 会自动的将我们参数 赋值System.out.println( "执行了"); System.out.println(cookieValue); return "success" ;// 并返回 到 success.jsp 的 页面
}
测试:--------
initialization completed in 1540 ms
执行了
6ED6F4EDC115C82BB40A459AEBD5D181
ModelAttribute注解
- 作用----------
- 出现在方法上:表示当前方法会在控制器方法执行前线执行。
- 出现在参数上:获取指定的数据给参数赋值。
- 应用场景---------
- 当提交表单数据不是完整的实体数据时,保证没有提交的字段使用数据库原来的数据。
- 具体的代码
jsp代码-----------------------
用户姓名:<input type="text" name="name"/><br/>
用户年龄:<input type="text" name="age"/><br/>
<input type="submit" value="提交"/>
java 代码-----------------应用场景*-
*
1. 修饰的方法有返回值*
@RequestMapping("/testModelAttribute")//定义 post 请求
public String testModelAttribute(User user){// params.jsp 里的超链接 会自动的将我们参数 赋值
System.out.println( "/testModelAttribute执行了");
System.out.println(user);
return "success" ;// 并返回 到 success.jsp 的 页面
}
@ModelAttribute
//在方法上 就会优先的执行 ----
// 》
public User showUser(String uname){
System.out.println("封红卫ModelAttribute---优先 执行了 ");
// 通过 用户先 查询数据库(模拟)
User user = new User();
user.setUname(uname);
user.setAge(20);
user.setDate(new Date());
return user;
}
/*当提交表单的时候 当客户端传到的数据 uname之后 就会封装 这些数据 return的是User 才会提交 */
2. 修饰的方法没有返回值
//在方法上 就会优先的执行 ----
//
public void showUser(String uname, Map<String,User> map){
System.out.println("封红卫ModelAttribute—优先 执行了 ");
// 通过 用户先 查询数据库(模拟)
User user = new User();
user.setUname(uname);
user.setAge(20);
user.setDate(new Date());
//存到集合里 再 让下一个方法的参数里 :使用@ModelAttribute(“fhw”)
map.put(“fhw”,user);
}
@RequestMapping("/testModelAttribute")// 当优先选择的方法没有返回值的时候 有map 集合存储 在当前方法参数里就 使用 @ModelAttribute("fhw")赋值给了 参数
public String testModelAttribute(@ModelAttribute("fhw") User user){// params.jsp 里的超链接 会自动的将我们参数 赋值
System.out.println( "/testModelAttribute执行了");
System.out.println(user);
return "success" ;// 并返回 到 success.jsp 的 页面
}
测试的代码--------------------------
封红卫ModelAttribute—优先 执行了
/testModelAttribute执行了
User{uname=‘null’, age=20, date=Thu Dec 06 15:05:08 CST 2018}
4. SessionAttributes注解 --Spring5 的新特性
—Spring5 的新特性-----24-SessionAttributes注解 --------》类似于get 与set
-----session域 里一次会话里的多次请求
- 作用:用于多次执行控制器方法间的参数共享
- 属性
- value:指定存入属性的名称
- 位置: 在类上----------》
springMVC 5 里用Model 接口 进入接口的找到 源码 ExtendedModelMap extends ModelMap implements Model
里用map 来实现的----
-----就用model 接口来实现—放到参数里
5
. 代码如下
–java代码------------------
/**向session域 里存储值
* SessionAttributes
* @return
*/
@RequestMapping("/testSessionAttributes")
//传统 获取原生的servlet就在方法里加上HttpServlet 对象 的依赖耦合过高
//spring MVC 的 : 我们搜索 :当前IDEA里 ctrl+N:Model接口 好多子接口
public String testSessionAttributes(Model model) {
//期望 在Request域 里存储一个值 返回的Success 会呈现 成功页面
model.addAttribute(“msg”,“封红卫”);
//然后在success.jsp成功页面 取值: el 表达式来取值 ${el 11 个域 对象}
// isELIgnored:值为false 不忽略el表达式
//底层存储到request 与对象 里
return "success";// 并返回 到 success.jsp 的 页面
}
//从session域 里获取值
@RequestMapping("/getSessionAttributes")
//传统 获取原生的servlet就在方法里加上HttpServlet 对象 的依赖耦合过高
//spring MVC 的 : 我们搜索 :当前IDEA里 ctrl+N:Model接口 好多子接口
public String getSessionAttributes(ModelMap modelMap) {
System.out.println(“getSessionAttributes 从session域 里获取值”);
String msg =(String ) modelMap.get(“msg”);
System.out.println(msg);
return “success”;// 并返回 到 success.jsp 的 页面
}
//从session域 里:删除值
@RequestMapping("/deleteSessionAttributes")
//传统 获取原生的servlet就在方法里加上HttpServlet 对象 的依赖耦合过高
//spring MVC 的 : 我们搜索 :当前IDEA里 ctrl+N:Model接口 好多子接口
public String deleteSessionAttributes(SessionStatus status) {
System.out.println("deleteSessionAttibutesr 从session域 里:删除值 ");
status.setComplete();
return "success";// 并返回 到 success.jsp 的 页面
}
----------------anno.jsp
方法之间的 的存储值 与 获取值 还有:删值
testSessionAttributes
getSessionAttributes
deleteSessionAttributes
-success.jsp
成功 界面 呈现SUCCESS!!!
<%--${requestScope}--%><%--requestScope --el表达式11 个与对象 之一--%> <%--${requestScope.msg}或者直接的就 简写msg --%> ${msg} ${sessionScope}–*测试
成功 界面 呈现SUCCESS!!!
封红卫 {msg=封红卫}
控制台 日志-----
initialization completed in 1324 ms
封红卫ModelAttribute—优先 执行了
封红卫ModelAttribute—优先 执行了
getSessionAttributes 从session域 里获取值
点击 删除----
成功 界面 呈现SUCCESS!!!
封红卫 {}
-----最后的总记录
initialization completed in 1324 ms
封红卫ModelAttribute—优先 执行了
封红卫ModelAttribute—优先 执行了
getSessionAttributes 从session域 里获取值
封红卫
封红卫ModelAttribute—优先 执行了
getSessionAttributes 从session域 里获取值
封红卫
封红卫ModelAttribute—优先 执行了
deleteSessionAttibutesr 从session域 里:删除值
=============================== 总结
- SpringMVC的概述
- 入门
- 创建工程,导入坐标
- 在web.xml中配置前端控制器(启动服务器,加载springmvc.xml配置文件)
- 编写springmvc.xml配置文件
- 编写index.jsp的页面,发送请求
- 编写Controller类,编写方法(@RequestMapping(path="/hello")),处理请求
- 编写配置文件(开启注解扫描),配置视图解析器
- 执行的流程
- @RequestMapping注解
- path
- value
- method
- …
- 参数绑定
- 参数绑定必须会
- 解决中文乱码,配置过滤器
- 自定义数据类型转换器