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

学习SpringMvc第二战之【SpringMVC之综合案例】

目录

一. 参数传递

1.前期准备工作(替换pom.xml中的部分依赖)

1.1将log4j替换成为slf4j(将打印语句替换成为日志文件输出结果)

2.正式操作

1.基础传参

1.1创建方法,用于验证传参

1.2构建界面回显

1.3设置访问路径(localhost:8080/param/hello1?bname=狂飙&bid=2)

3.复杂类型 

2.1创建方法用于验证

2.2设置访问路径(localhost:8080/param/hello2?bname=狂飙&bid=2)

 4.RequestParam注解传递参数

3.1创建方法用于验证

3.2设置访问路径(localhost:8080/param/hello3?bname=狂飙&bid=2)

5.路径传参 

4.1创建方法用于验证

4.2设置访问路径(localhost:8080/param/hello4/2)

 6.RequestBody传参(专门用来接收json字符串)

6.1导入依赖

6.2创建方法用于验证

6.3通过aplikt测试

6.4补充 

7.@RequestHeader(获取请求头)

7.1创建方法用于验证

7.2设置访问路径(localhost:8080/param/hello7)

8.复合行

二.返回值

1.void型

2.String+model类型 

3.ModelAndView

三.页面跳转


前言: 

小编带大家了解了,spring mvc 以及spring mvc的入门和配置spring mvc的环境以及对于静态子资源的处理。

一. 参数传递

1.前期准备工作(替换pom.xml中的部分依赖)

1.1将log4j替换成为slf4j(将打印语句替换成为日志文件输出结果)

<log4j2.version>2.9.1</log4j2.version>
<log4j2.disruptor.version>3.2.0</log4j2.disruptor.version>
<slf4j.version>1.7.13</slf4j.version>
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version>
</dependency>
<dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>${slf4j.version}</version><scope>runtime</scope>
</dependency><!--核心log4j2jar包-->
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>${log4j2.version}</version>
</dependency>
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>${log4j2.version}</version>
</dependency>
<!--用于与slf4j保持桥接-->
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><version>${log4j2.version}</version>
</dependency>
<!--web工程需要包含log4j-web,非web工程不需要-->
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-web</artifactId><version>${log4j2.version}</version><scope>runtime</scope>
</dependency><!--需要使用log4j2的AsyncLogger需要包含disruptor-->
<dependency><groupId>com.lmax</groupId><artifactId>disruptor</artifactId><version>${log4j2.disruptor.version}</version>
</dependency>

2.正式操作

1.基础传参

1.1创建方法,用于验证传参

package com.lz.web;import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;/*** @author lz* @create 2023-09-05 14:42*/
@Controller
@Slf4j
@RequestMapping("/param")
public class ParmController {@RequestMapping("/hello1 ")public  String  index(String  bname,Integer bid){log.info("简单类型参数:bname:{},bid:{}",bname,bid);return  "index";}}

1.2构建界面回显

<%--Created by IntelliJ IDEA.User: lzzxqDate: 2023/9/5Time: 14:44To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<h1>刘兵最喜欢吃锅巴</h1>
</body>
</html>

1.3设置访问路径(localhost:8080/param/hello1?bname=狂飙&bid=2)

3.复杂类型 

2.1创建方法用于验证

@RequestMapping("/hello2")public  String hello2(Book book, HttpServletRequest  request){log.info("复杂类型参数:bname:{},bid:{}",request.getParameter("bname"),request.getParameter("bid"));log.info("复杂类型参数:book:{}",book.toString() );return  "index";}

2.2设置访问路径(localhost:8080/param/hello2?bname=狂飙&bid=2)

 4.RequestParam注解传递参数

3.1创建方法用于验证

@RequestMapping("/hello3")public String toHello3(@RequestParam Integer bid,@RequestParam(required = false,value = "price") Integer bookPrice,@RequestParam("bookName") String bname){log.info(">>>> 使用@RequestParam注解传递参数:{},{},{}", bid,bname,bookPrice);return "index";}

3.2设置访问路径(localhost:8080/param/hello3?bname=狂飙&bid=2)

5.路径传参 

4.1创建方法用于验证

   @RequestMapping("/hello4/{bid}")public  String  hello4(@PathVariable("bid")  Integer  bid){log.info("简单类型参数:bid:{}",bid);return  "index";}

4.2设置访问路径(localhost:8080/param/hello4/2)

 6.RequestBody传参(专门用来接收json字符串)

6.1导入依赖

 <jackson.version>2.9.3</jackson.version>
 <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>${jackson.version}</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>${jackson.version}</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>${jackson.version}</version></dependency>

6.2创建方法用于验证

  @RequestMapping("/hello5")public  String  hello5(Map  map){log.info("@RequestBody:map:{}",map);return  "index";}@RequestMapping("/hello6")public  String  hello6(@RequestBody Map  map){log.info("@RequestBody:map:{}",map);return  "index";}

6.3通过aplikt测试

6.4补充 

reqiuestmapper(不安全,不具备标识意义)+=GetMapping+DeleteMappin+PutMapping+PostMapping
 //增加@PostMappingpublic  String  type1(){System.out.println("PostMapping");return  "index";}//修改@PutMappingpublic  String  type2(){System.out.println("PutMapping");return  "index";}//输出@DeleteMappingpublic  String  type3(){System.out.println("PutMapping");return  "index";}@GetMappingpublic  String  type4 (){System.out.println("PutMapping");return  "index";}

7.@RequestHeader(获取请求头)

7.1创建方法用于验证

    @RequestMapping("/hello7")public  String  hello6(@RequestHeader("jwt") String  jwt){log.info("@RequestBody:jwt:{}",jwt);return  "index";}

7.2设置访问路径(localhost:8080/param/hello7)

8.复合行

@RequestMapping("/hello8")public  String  hello8(Book  book,@RequestBody Map map,@RequestHeader("jwt") String  jwt){log.info("@RequestBody:book:{}",book);log.info("@RequestBody:map:{}",map);log.info("@RequestBody:jwt:{}",jwt);return  "index";}

 

二.返回值

1.void型

  @RequestMapping("/hello1")public   void   hello1(HttpServletResponse  response){Map<String,Object> map=new HashMap<>();map.put("code",200);map.put("msg","成功添加");try {ResponseUtil .writeJson(response,map);} catch (Exception e) {e.printStackTrace();}}

2.String+model类型 

 @RequestMapping("/hello4")public  String hello5(Model  model, HttpServletRequest  request){model.addAttribute("currentName","永州鸭");request.setAttribute("location","来自于道州的");return    "index";
}

3.ModelAndView

 @RequestMapping("/hello5")public ModelAndView hello5(){ModelAndView mv = new ModelAndView();//填充模型数据mv.addObject("sign","头脑灵范...");mv.setViewName("index");//逻辑视图名return mv;}

 

三.页面跳转

转发(forward:path)和重定向(redirect:path)这两种跳转方式将会绕开视图解析器的前缀后缀;还有就是如果是在同一controller中则不用使用"/"从根目录开始,而如果是在不同的controller则一定要从根目录开始。

path为请求处理方法名,而非逻辑视图名。

  • 转发(地址栏不变)

@RequestMapping("/hello1")public String hello1(){System.out.println("hell1");return "forward:index";}

它相当于“request.getRequestDispatcher("url").forward(request,response)”。使用转发,既可以转发到jsp, 也可以转发到其他的控制器方法。

  • 重定向(地址栏改变)

@RequestMapping("/hello2")public String /hello2(){System.out.println("/hello2");return "redirect:index";}

它相当于“response.sendRedirect(url)”。需要注意的是,如果重定向到jsp页面,则jsp页面不能写在WEB-INF目录中,否则无法找到。

http://www.lryc.cn/news/163519.html

相关文章:

  • 【算法日志】单调栈: 单调栈简介及其应用
  • VSCode自动分析代码的插件
  • 设计模式之外观模式
  • Web端测试和 App端测试有何不同?
  • 12.(Python数模)(相关性分析一)相关系数矩阵
  • 系统架构设计师(第二版)学习笔记----嵌入式系统及软件
  • Python列表操作指南:索引、切片、遍历与综合应用
  • 第15章_锁: MySQL并发访问相同记录以及从数据操作的类型划分锁(读锁、写锁)
  • PHP 排序函数使用方法,按照字母排序等操作
  • windows本地验证码识别工具
  • 修改图片尺寸的几个简单方法
  • 三、GoLang字符串的基本操作
  • 基于vue-cli创建后台管理系统前端页面——element-ui,axios,跨域配置,布局初步,导航栏
  • 在 ubuntu20.04 上安装 Pytorch
  • 远程恋爱网站部署秘籍——群晖虚拟机助ni秀恩爱
  • vscode c++解决包含头文件红色波浪线问题
  • PostgreSQL docker compose安装配置
  • 电脑文件批量重命名:高效操作技巧
  • c高级day4(shell)
  • 整十粉丝庆祝文章系列内容征集建议
  • 两数乘积:输出1~100整数乱序列表中两数乘积是目标整数的最小下标对
  • 【JavaSE】面试01
  • Elasticsearch(二)kibana数据检索
  • JavaScript编程语法作业
  • 服务器中了Malloxx勒索病毒应该怎么办?勒索病毒解密,数据恢复
  • 如何实现Spring的事务管理功能:@Transactional声明式事务
  • LeetCode(力扣)122. 买卖股票的最佳时机 II
  • 串行通信协议
  • Elasticsearch中RestClient使用
  • 【LeetCode-中等题】208. 实现 Trie (前缀树)