当前位置: 首页 > news >正文

Spring Web MVC入门补充1

学习Spring MVC

        请求

        传递数组

        Spring MVC可以⾃动绑定数组参数的赋值.

    @RequestMapping("/r8")public String r8(String[] array){return Arrays.toString(array);}

        直接在URL后,添加array=1,nihao,a略有不妥,因为URL中的特殊字符需要转义编码,在部分浏览器上可能无法运行.可以添加array=1&array=nihao来让Spring识别到这是一个数组.

        传递集合

        集合参数:和数组类似,同⼀个请求参数名有为多个,但是需要使⽤@RequestParam绑定参数关系.现在学习到的@RequestParam有三个作用:1.重命名,2.设置必传参数,3.绑定参数关系.

    @RequestMapping("/r9")public String r9(@RequestParam List<String> list){return list.toString();}

        传递JSON格式

        JSON的语法:
1. 数据在 键值对(Key/Value) 中
2. 数据由逗号 , 分隔
3. 对象⽤ { } 表示
4. 数组⽤ [ ]表示
5. 值可以为对象,也可以为数组,数组中可以包含多个对象

        合法JSON列举:

        {"name":"admin","age":18}
["hello", 3.1415, "json"]
[{"name":"admin","age":18},{"name":"root","age":16},{"name":"张三","age":20}]

        传递JSON对象,需要使用@RequestBody注解,在接收到JSON对象后,会自动与代码中的对象进行匹配进而转化为Java对象.

    @RequestMapping("/r10")public String r10(@RequestBody Student student){return student.toString();}

        从URL中获取参数

        在访问一些网站时,我们发现它们的URL中没有查询字符串,确认代之的是相同的文件路径后跟随了一些不同的字母/数字组合,如B站的bv号.想要从URL中获取参数,可以使用@PathVariable.并修改@RequestMapping中的映射地址相关信息.

    @RequestMapping("/r11/{id}")public String r11(@PathVariable Integer id){return "id为:"+id;}

        这样在访问时,将想要传递的id放置在r11的后面,后端就能接收到id了.

        在传递多个参数时,需要一一对应.

    @RequestMapping("/r12/{id}/{name}")public String r12(@PathVariable Integer id,@PathVariable String name){return "id:"+id+",name:"+name;}

Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Integer'; For input string: "zhangsan"]

        报错节选:将String类型的"zhangsan"转换为Integer类型出错.可见这里将zhangsan写在前面会被id捕获到.

        如果⽅法参数名称和需要绑定的URL中的变量名称不⼀致时,需要@PathVariable的属性value赋值.

    @RequestMapping("/r13/{id}")public String r13(@PathVariable("id") Integer userId){return "userId为:"+userId;}

        上传文件

        上传文件时使用@RequestPart,并在括号中表示传来的请求中文件的"变量名".

    @RequestMapping("/r14")public String r14(@RequestPart("wenjian") MultipartFile file){//获取文件的真实名称return file.getOriginalFilename();}

        获取Cookie或Session

         回顾Cookie:

        HTTP协议自身是"无状态"协议.无状态协议指默认情况下HTTP协议的客⼾端和服务器之间的这次通信,和下次通信之间没有直接的联系.但是实际应用时,很多时候是需要知道请求之间的关联关系的.

        Cookie就是用来解决这种需要关联关系的场景的.在客户端访问服务器时,登陆成功后,服务器会返回一个"令牌",这个令牌通常是存储在Cookie中的.此时在服务器这边就需要记录"令牌"信息,以及令牌对应的⽤⼾信息,这个就是Session机制所做的⼯作.

        理解Session:

        Session直译为会话,会话就是对话的意思,AB交流产生一个对话,AC交流产生一个对话.

        在计算机领域,会话是⼀个客户与服务器之间的不中断的请求响应.对客⼾的每个请求,服务器能够识别出请求来⾃于同⼀个客户.当⼀个未知的客⼾向Web应⽤程序发送第⼀个请求时就开始了⼀个会话.当客⼾明确结束会话或服务器在⼀个时限内没有接受到客⼾的任何请求时,会话就结束了.

        服务器同⼀时刻收到的请求是很多的.服务器需要清楚的区分每个请求是从属于哪个用户,也就是属于哪个会话,就需要在服务器这边记录每个会话以及与用户的信息的对应关系.Session是服务器为了保存用户信息⽽创建的⼀个特殊的对象.

        1.当⽤⼾登陆的时候,服务器在Session中新增⼀个新记录,并把sessionId返回给客⼾端.(通过HTTP响应中的Set-Cookie字段返回).
2. 客⼾端后续再给服务器发送请求的时候,需要在请求中带上sessionId.(通过HTTP请求中的
Cookie字段带上).
3. 服务器收到请求之后,根据请求中的sessionId在Session信息中获取到对应的用户信息,再进行后续操作.找不到则重新创建Session,并把SessionID返回.

        Cookie与Session的区别

        1.Cookie是客⼾端保存⽤⼾信息的⼀种机制.Session是服务器端保存⽤⼾信息的⼀种机制.

        2.Cookie与Session的关系主要通过sessionId关联起来的.

        3.Cookie与Session通常结合使用,但是不是必须一起使用.

        获取Cookie

        1.通过HttpServletRequest对象获取Cookie.

    @RequestMapping("/getCookie1")public String getCookie1(HttpServletRequest request) {Cookie[] cookies = request.getCookies();if (cookies != null) {for (Cookie cookie : cookies) {System.out.println(cookie.getName()+":"+cookie.getValue());}}return "Cookie信息获取完毕!";}

        因为刚开始没有Cookie,因此我们需要手动添加一些Cookie.前往页面,打开F12调试,添加Cookie.然后再进行访问.

        
页面显示正常,控制台正常打印了Cookie.

        2.使用@CookieValue简洁的获取Cookie.

    @RequestMapping("/getCookie2")public String getCookie2(@CookieValue("cookie1") String cookie1, @CookieValue("ZheShiCookie") String cookie2) {return "Cookie信息获取:"+cookie1+"/"+cookie2;}

        但是这个方法只能获取到指定的Cookie信息.

        获取Session

        Session是存储再服务器上的,我们要先进行添加才能获取.

    @RequestMapping("/setSession")public String setSession(HttpServletRequest request) {HttpSession session = request.getSession();//前面为key后面是valuesession.setAttribute("userName","zhangsan");return "session设置完成";}

        1.使用HttpServletRequest获取Session.

        request中包含SessionId,服务器就能通过SessionId获取到Session信息.

    @RequestMapping("/getSession1")public String getSession(HttpServletRequest request) {HttpSession session = request.getSession();String userName = (String)session.getAttribute("userName");return "userName:"+userName;}

        2.通过SpringMVC内置的HttpSession对象来获取Session

        对Session进行一个封装,在想要获取Session时可以单独获取,不再需要从request中获取.

    @RequestMapping("/getSession2")public String getSession2(HttpSession session) {String userName = (String)session.getAttribute("userName");return "userName:"+userName;}

        3.通过@SessionAttribute获取Session

        对session对象的getAttribute方法进行了一些封装,直接通过注释来获取.

    @RequestMapping("/getSession3")public String getSession3(@SessionAttribute("userName") String userName) {return "userName:"+userName;}

        获取Header

        1.通过HttpServletRequest获取Header

        获取Header中的User-Agent字段:

    @RequestMapping("/getHeader1")public String gerHeader1(HttpServletRequest request) {String userAgent = request.getHeader("User-Agent");return "userAgent:"+userAgent;}

        2.通过@RequestHeader来获取Header

        对getHeader进行了封装,直接通过@RequestHeader就能获取到Header中的信息.

    @RequestMapping("/getHeader2")public String gerHeader2(@RequestHeader("User-Agent") String userAgent) {return "userAgent:"+userAgent;}


​​​​​​​



http://www.dtcms.com/a/478972.html

相关文章:

  • 反悔贪心 系列
  • 十二、OpenCV中的边缘检测
  • 个人网站 摄影展示wordpress神箭手
  • 天津网站建设icp备微建网站
  • 软考~系统规划与管理师考试——真题篇——章节——第20章 数字乡村发展规划——纯享题目版
  • 旅行商问题(TSP)(2)(heuristics.py)(TSP 的两种贪心启发式算法实现)
  • 网站设计需求方案wordpress转成中文版
  • 最佳经验网站网站有哪些布局
  • 爬虫的基本流程:从发送请求到数据清洗的完整链路
  • 大连手机自适应网站制作价格百度权重查询
  • 当地网站建设问卷调查建筑设计一般用什么软件
  • 淘宝商品详情 API 介绍
  • 【车机应用管理器 GUI:一款高效的 Android 车机应用与系统命令管理工具】
  • d41:MyBatisPlus入门,注解,配置,条件构造器,自定义SQL,IService
  • 沈阳网官方网站重庆男科医院哪家好
  • 无广技术贴!【PDF编辑器】Solid Converter PDF保姆级图文下载安装指南——实用推荐之PDF编辑软件
  • Fail2ban安装及配置教程:防止ECS暴力破解
  • 自做的网站如何发布松江建设新城有限公司网站
  • 住建城乡建设部网站网站建设空间主机的选择
  • 阿里美团京东从“三国杀”到“双雄会”:本地生活无限战争的终局猜想
  • wpf之Interaction.Triggers
  • 网站建设新的技术方案企业网站建设东莞
  • SSM管理系统c4ki9(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 珠海正规网站制作排名费用多少无锡阿凡达建设
  • asp网站建设 aws西安高校定制网站建设公司推荐
  • PyTorch 实现 MNIST 手写数字识别完整流程(含数据处理、模型构建与训练可视化)
  • 【Java并发编程】概念与核心问题、线程核心、并发控制、线程池、并发容器、并发问题
  • C++模板编程实战记录:SFINAE核心技术深度掌握
  • Spring Boot项目的常用依赖有哪些?
  • 保姆级教程 | ASE学习过程记录分析