当前位置: 首页 > 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目录中,否则无法找到。

相关文章:

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

目录 一. 参数传递 1.前期准备工作&#xff08;替换pom.xml中的部分依赖&#xff09; 1.1将log4j替换成为slf4j(将打印语句替换成为日志文件输出结果) 2.正式操作 1.基础传参 1.1创建方法&#xff0c;用于验证传参 1.2构建界面回显 1.3设置访问路径&#xff08;localho…...

【算法日志】单调栈: 单调栈简介及其应用

代码随想录刷题60Day 目录 单调栈简介 单调栈的应用 下次更高温 下一个更大元素1 下一个更大元素2 接雨水 柱状图中最大矩形 单调栈简介 单调栈&#xff08;Monotonic Stack&#xff09;是一种特殊的栈数据结构&#xff0c;它满足元素的单调性&#xff0c;这种单调性需…...

VSCode自动分析代码的插件

今天来给大伙介绍一款非常好用的插件&#xff0c;它能够自动分析代码&#xff0c;并帮你完成代码的编写 效果如下图 首先我们用的是VSCode&#xff0c;&#xff08;免费随便下&#xff09; 找到扩展&#xff0c;搜索CodeGeeX&#xff0c;将它下载好&#xff0c;就可以实现了 到…...

设计模式之外观模式

文章目录 影院管理项目传统方式解决影院管理传统方式解决影院管理问题分析外观模式基本介绍外观模式原理类图外观模式解决影院管理传统方式解决影院管理说明外观模式应用实例 外观模式的注意事项和细节 影院管理项目 组建一个家庭影院&#xff1a; DVD 播放器、投影仪、自动屏…...

Web端测试和 App端测试有何不同?

Web 端测试和 App 端测试是针对不同平台的上的应用进行测试&#xff0c;Web应用和App端的应用实现方式不同&#xff0c;测试时的侧重点也不一样。 今天这篇文章就来介绍下两者的不同之处以及测试时的侧重点。 同时&#xff0c;我也准备了一份软件测试面试视频教程&#xff08…...

12.(Python数模)(相关性分析一)相关系数矩阵

相关系数矩阵 相关系数矩阵是用于衡量多个变量之间关系强度和方向的统计工具。它是一个对称矩阵&#xff0c;其中每个元素表示对应变量之间的相关系数。 要计算相关系数矩阵&#xff0c;首先需要计算每对变量之间的相关系数。常用的相关系数包括皮尔逊相关系数和斯皮尔曼相关…...

系统架构设计师(第二版)学习笔记----嵌入式系统及软件

【原文链接】系统架构设计师&#xff08;第二版&#xff09;学习笔记----嵌入式系统及软件 文章目录 一、嵌入式系统1.1 嵌入式系统的组成1.2 嵌入式系统的特点1.3 嵌入式系统的分类 二、嵌入式软件2.1 嵌入式系统软件分层2.2 嵌入式软件的主要特点 三、安全攸关软件的安全性设…...

Python列表操作指南:索引、切片、遍历与综合应用

文章目录 列表简介创建列表索引和切片列表的长度列表的拼接和重复检查元素是否存在列表的方法index() 方法count() 方法 列表的修改和删除修改元素删除元素列表的排序和反转添加元素 列表的拷贝列表的遍历列表的切片列表的嵌套列表推导式 python精品专栏推荐python基础知识&…...

第15章_锁: MySQL并发访问相同记录以及从数据操作的类型划分锁(读锁、写锁)

事务的 隔离性 由这章讲述的 锁 来实现。 1. 概述 锁是计算机协调多个进程或线程并发访问某一资源的机制. 在程序开发中会存在多线程同步的问题, 当多个线程并发访问某个数据的时候, 尤其是针对一些敏感数据(订单, 金额), 我们就需要保证这个数据在任何时刻最多只有一个线…...

PHP 排序函数使用方法,按照字母排序等操作

详解PHP排序方法使用 一、sort() 函数 用于对数组单元从低到高进行排序。 //数组 $data array(D,F,A,C,B); //排序 sort($data); //输出排版标签 echo "<pre>"; //打印数据 print_r($data);die;输出结果&#xff1a; 二、rsort() 函数 用于对数组单元从高到…...

windows本地验证码识别工具

windows本地验证码识别小工具 - 可以用在windows系统中&#xff0c;并可以集成在Java或python程序中 演示视频如下&#xff1a;可用于识别4-7位的字母数字组合的验证码&#xff08;识别准确率在70% - 80%&#xff09;。 验证码识别演示 本项目未开源&#xff0c;如需使用请联…...

修改图片尺寸的几个简单方法

修改图片尺寸的几个简单方法~~图片&#xff0c;是我们常用的文件格式&#xff0c;也是日常生活与工作中重要的文件。图片记录了非常多的元素和内容&#xff0c;其中不乏有工作上的内容&#xff0c;也有对一些日常生活的记录。所以说&#xff0c;图片文件对我们来说是非常重要的…...

三、GoLang字符串的基本操作

一、转义符是什么? 转义字符意义\n换行&#xff0c;将当前位置移动到下一行开头\r回车&#xff0c;将当前位置移到本行开头\t相当于一个Tab键\\代表一个反斜线“\”\"代表一个双引号字符 代码实战 package mainimport "fmt"/* *字符串基本用法 */ func main…...

基于vue-cli创建后台管理系统前端页面——element-ui,axios,跨域配置,布局初步,导航栏

目录 引出安装npm install安装element-ui安装axios 进行配置main.js中引入添加jwt前端跨域配置 进行初始布局HomeView.vueApp.vue 新增页面和引入home页面导航栏总结 引出 1.vue-cli创建前端工程&#xff0c;安装element-ui&#xff0c;axios和配置&#xff1b; 2.前端跨域的配…...

在 ubuntu20.04 上安装 Pytorch

参考资料&#xff1a;https://www.linode.com/docs/guides/pytorch-installation-ubuntu-2004/ sudo apt update sudo apt install nvidia-cuda-toolkit (3G) mkdir anaconda cd ~/anaconda wget https://repo.anaconda.com/archive/Anaconda3-2020.11-Linux-x86_64.sh chmod …...

远程恋爱网站部署秘籍——群晖虚拟机助ni秀恩爱

文章目录 前言1. 安装网页运行环境1.1 安装php1.2 安装webstation 2. 下载网页源码文件2.1 访问网站地址并下载压缩包2.2 解压并上传至群辉NAS 3. 配置webstation3.1 配置网页服务3.2 配置网络门户 4. 局域网访问静态网页配置成功5. 使用cpolar发布静态网页&#xff0c;实现公网…...

vscode c++解决包含头文件红色波浪线问题

安装c/c插件后&#xff0c;按ctrlshiftp&#xff0c; 点击打开了c_cpp_properties.json文件&#xff0c;对其中的IncludePath进行编辑&#xff0c;示例如下&#xff1a; "includePath": ["${workspaceFolder}/**","${workspaceFolder}/include/**&q…...

PostgreSQL docker compose安装配置

docker-compose.yml如下&#xff1a; version: 3services:postgres:image: postgres:15.4healthcheck:test: [ "CMD", "pg_isready", "-q", "-d", "postgres", "-U", "root" ]timeout: 45sinterval: 1…...

电脑文件批量重命名:高效操作技巧

随着时间的推移&#xff0c;我们积累的文件和文件夹数量越来越多&#xff0c;需要对它们进行合理的命名和管理&#xff0c;以便更方便地查找和利用。而文件批量重命名功能可以帮助我们更高效地管理文件夹。下面介绍五种方式&#xff0c;帮助你更好地利用文件批量重命名工具&…...

c高级day4(shell)

实现一个对数组求和的函数&#xff0c;数组通过实参传递给函数写一个函数&#xff0c;输出当前用户的uid和gid&#xff0c;并使用变量接收结果...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...