spring MCV注解的演示 .包含 Restful编程风格

1.RequestParam注解

  1. 作用:把请求中的指定名称的参数传递给控制器中的形参赋值
  2. 属性
  3. value:请求参数中的名称
  4. 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” %>
Title <%-- 常用 的注解 演示 方法参数的赋值 在前端这里 参数 与后端 java代码里的参数名要一致--%> RequestParam ---------java代码------------- ackage cn.itcast.controller; package cn.itcast.controller;

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注解

见名知意: 就跟请求体 有关

  1. 作用:用于获取请求体的内容(注意:get方法不可以)
  2. 属性
  3. required:是否必须有请求体,默认值是true
  4. 代码如下
  5. 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注解

  1. 作用:拥有绑定url中的占位符的。例如:url中有/delete/{id},{id}就是占位符

  2. 属性

  3. value:指定url中的占位符名称

  4. Restful风格的URL

  5. 请求路径一样,可以根据不同的请求方式去执行后台的不同方法

  6. restful风格的URL优点

  7. 结构清晰

  8. 符合标准

  9. 易于理解

  10. 扩展方便

  11. 代码如下

  12. jsp代码------------------------

  13. testPathVariable

  14. java 代码--------------------------

  15. */
    @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注解

  1. 作用:获取指定请求头的值

  2. 属性

  3. value:请求头的名称

  4. 代码如下

  5. jsp------------4

  6. testRequestHeader

  7. java代码--------------

  8. @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注解

  1. 作用:用于获取指定cookie的名称的值

  2. 属性

  3. value:cookie的名称
    jsp代码--------------------------------
    testCookieValue

  4. java代码---------------------

  5. @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注解

  1. 作用----------
  2. 出现在方法上:表示当前方法会在控制器方法执行前线执行。
  3. 出现在参数上:获取指定的数据给参数赋值。
  4. 应用场景---------
  5. 当提交表单数据不是完整的实体数据时,保证没有提交的字段使用数据库原来的数据。
  6. 具体的代码
    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域 里一次会话里的多次请求

  1. 作用:用于多次执行控制器方法间的参数共享
  2. 属性
  3. value:指定存入属性的名称
  4. 位置: 在类上----------》
    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域 里:删除值

=============================== 总结

  1. SpringMVC的概述
  2. 入门
  3. 创建工程,导入坐标
  4. 在web.xml中配置前端控制器(启动服务器,加载springmvc.xml配置文件)
  5. 编写springmvc.xml配置文件
  6. 编写index.jsp的页面,发送请求
  7. 编写Controller类,编写方法(@RequestMapping(path="/hello")),处理请求
  8. 编写配置文件(开启注解扫描),配置视图解析器
  9. 执行的流程
  10. @RequestMapping注解
  11. path
  12. value
  13. method
  14. 参数绑定
  15. 参数绑定必须会
  16. 解决中文乱码,配置过滤器
  17. 自定义数据类型转换器
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值