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

news2025/3/1 11:23:36

目录

一. 参数传递

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: lzzxq
  Date: 2023/9/5
  Time: 14:44
  To 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
 //增加
    @PostMapping
    public  String  type1(){
        System.out.println("PostMapping");
        return  "index";
    }
    //修改
    @PutMapping
    public  String  type2(){
        System.out.println("PutMapping");
        return  "index";
    }
    //输出
    @DeleteMapping
    public  String  type3(){
        System.out.println("PutMapping");
        return  "index";
    }
    @GetMapping
    public  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.coloradmin.cn/o/981282.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【PHP代码审计】反序列化漏洞实战

文章目录 概述资源下载地址Typecho代码审计-漏洞原理call_user_func()_applyFilter()、get()与__get__toString()__construct()install.php POC利用漏洞利用复现利用链执行phpinfo()GET利用POST利用 getshell生成payload漏洞利用蚁剑连接 总结 概述 序列化&#xff0c;“将对象…

污水处理厂3D数字孪生三维可视系统降低设备风险隐患

当相对传统与保守的水务行业&#xff0c;与激进与开放的互联网发生碰撞之后&#xff0c;产生了最好的一个名词是&#xff1a;“智慧水务”&#xff0c;谈及智慧水务&#xff0c;自然免不了当下最具热度的技术“元宇宙”&#xff0c;水资源再生是我国追求高质量发展的新策略&…

fastadmin列表,关联筛选查询

fastadmin文章表关联分类表&#xff0c;分类筛选默认按分类名模糊查询&#xff0c;项目需求是下拉选择分类&#xff0c;根据分类id直接筛选。最终效果如下图。 var table $("#table");//在普通搜索渲染后table.on(post-common-search.bs.table, function (event, ta…

Elasticsearch脑裂

文章目录 Elasticsearch脑裂 Elasticsearch脑裂 Elasticsearch脑裂是指由于网络分区或节点间通信故障导致集群中的节点无法互相正常通信&#xff0c;从而导致数据不一致的情况。这可能会导致集群中的多个节点同时自认为是主节点&#xff08;master&#xff09;&#xff0c;并开…

mysql(十)mysql主从复制--主库切换

概述 可能为了更迭升级服务器&#xff0c;或者主库出现问题&#xff0c;又或者只是希望重新分配容量&#xff0c;此时需要切换主库。 如果这是计划内的切换&#xff0c;会相对容易点。只需要在从库上使用CHANGE MASTER TO命令&#xff0c;并设置合适的值。大多数的值都是可选…

大数据技术之Hadoop:使用命令操作HDFS(四)

目录 一、创建文件夹 二、查看指定目录下的内容 三、上传文件到HDFS指定目录下 四、查看HDFS文件内容 五、下载HDFS文件 六、拷贝HDFS文件 七、HDFS数据移动操作 八、HDFS数据删除操作 九、HDFS的其他命令 十、hdfs web查看目录 十一、HDFS客户端工具 11.1 下载插件…

OpenWrt系统内核设置

系统内核设置&#xff1a;OpenWrt也是一个 Linux 操作系统&#xff0c;因此它和其他Linux 操作系统一样&#xff0c; 可以通过一些配置文件配置。 一、/etc/sysctl.conf 配置文件 这个文件是系统启动预加载的内核配置文件&#xff0c;通过sysctl命令读取和设置到系统当中。这个…

openGauss学习笔记-62 openGauss 数据库管理-两地三中心跨Region容灾

文章目录 openGauss学习笔记-62 openGauss 数据库管理-两地三中心跨Region容灾62.1 基于流式复制的异地容灾解决方案62.1.1 概述62.1.2 规格与约束62.1.2.1 特性规格62.1.2.2 特性约束 62.1.3 影响容灾性能指标的GUC参数设置62.1.3.1 检查点相关参数设置的影响62.1.3.2 极致RTO…

android 车载widget小部件部分详细源码实战开发-千里马车载车机framework开发实战课程

官网参考链接&#xff1a;https://developer.android.google.cn/develop/ui/views/appwidgets/overview 1、什么是小部件 App widgets are miniature application views that can be embedded in other applications (such as the home screen) and receive periodic updates…

LED显示屏安全亮度参数设置方法和防护

随着LED显示屏应用领域越来越广&#xff0c;但其高亮度造成的光污染&#xff0c;常受到的人们的诟病。为了更好的避免光污染&#xff0c;我整理了一些关于LED显示安全亮度参数设置方法和安全防护措施。你知道LED广告牌是如何工作的吗&#xff1f; 设置LED显示屏的安全亮度参数和…

android上架备案公钥和md5获取工具

最近很多公司上架遇到了一个问题&#xff0c;就是要提供app的备案证明&#xff0c;现在android上架都需要备案了&#xff0c;但是我们的证书都是通过工具生成的&#xff0c;哪里知道公钥和md5那些东西呢&#xff1f;无论安卓备案还是ios备案都需要提供公钥和md5。 包括ios的备案…

ChatGPT Prompting开发实战(五)

一、如何编写有效的prompt 对于大语言模型来说&#xff0c;编写出有效的prompt能够帮助模型更好地理解用户的意图(intents)&#xff0c;生成针对用户提问来说是有效的答案&#xff0c;避免用户与模型之间来来回回对话多次但是用户不能从LLM那里得到有意义的反馈。本文通过具体…

异步请求库的实际应用案例:爬取豆瓣经典电影

在日常爬虫过程中&#xff0c;你有没有遇到过需要爬取大量数据的情况&#xff0c;但是传统的同步请求方式让您等得焦头烂额&#xff1f; 这个问题的根源在于传统的同步请求方式。当我们使用同步请求时&#xff0c;程序会一直等待服务器的响应&#xff0c;直到数据返回后才能继续…

Jmeter性能测试手册

目录 目录 2 简介... 4JMeter与LoadRunner区别... 4环境配置... 5 3.1 安装JDK. 5 3.2 配置JDK环境变量... 9 3.3 安装并配置Maven. 13 3.4 下载JMeter 15 JMeter分类使用... 16 4.1 对于Dubbo类接口的测试.. 16 4.1.1 安装开发工具IDEA. 16 4.1.2 配置字符集格式…

leetcode_27_最小栈

class MinStack { public:MinStack() {}void push(int val) {//只要是压栈&#xff0c;先将元素保存到_elem中_elem.push(val);//如果x小于_min中栈顶的元素&#xff0c;将x再压入_min中if(_min.empty() || val < _min.top()){_min.push(val);}}void pop() {//如果——min栈…

OSPF路由协议

OSPF基本信息 OSPF&#xff08;Open Shortest Path First&#xff09;开放式最短路径优先协议是用于网际协议&#xff08;IP&#xff09;网络的链路状态路由协议。该协议使用链路状态路由算法的内部网关协议&#xff08;IGP&#xff09;&#xff0c;在单一自治系统&#xff08…

【论文通读】CLIP改进工作综述

CLIP改进工作综述 前言1. 语义分割1.1 Lseg1.2 GroupViT 2. 图像检测2.1 ViLD2.2 GLIP2.3 GLIPv2 3. 图像生成3.1 CLIPasso 4. 视频理解4.1 CLIP4Clip4.2 ActionCLIP 5. 其它领域5.1 CLIP-VIL5.2 AudioCLIP5.3 PointCLIP5.4 DepthCLIP 总结参考链接 前言 CLIP作为多模态对比学…

torch.nn中的L1Loss和MSELoss

我们打开Pytorch官网&#xff0c;找到torch.nn中的loss function&#xff0c;进去如下图所示。 L1LOSS 我们先来看看 L1LOSS 损失函数的使用。下图是官网给出的描述。 L1loss有两种方式&#xff0c;一种是将所有误差累加作为总损失&#xff0c;另一种是将所有误差累加之后求平…

java八股文面试[数据库]——一个B+树中大概能存放多少条索引记录

MySQL设计者将一个BTree的节点的大小设置为等于一个页. (这样做的目的是每个节点只需要一次I/O就可以完全载入), InnoDB的一个页的大小是16KB,所以每个节点的大小也是16KB, 并且BTree的根节点是保存在内存中的,子节点才是存储在磁盘上. 假设一个B树高为2&#xff0c;即存在一个…

Cyber RT基础入门与实践_Hello Apollo

Hello Apollo 进入云实验环境模块的模块内包的 进入云实验环境 <1> 创建本节实验工程目录&#xff0c;创建完成后&#xff0c;工程目录如下所示&#xff1a; cyber_demo |-- cyber_01 |-- demo_main | |-- BUILD | |-- main.cc |–BUILD |–cyberfile.xml |–cyber_demo.…