【Spring教程28】Spring框架实战:从零开始学习SpringMVC 之 请求与请求参数详解

这篇具有很好参考价值的文章主要介绍了【Spring教程28】Spring框架实战:从零开始学习SpringMVC 之 请求与请求参数详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

欢迎大家回到《Java教程之Spring30天快速入门》,本教程所有示例均基于Maven实现,如果您对Maven还很陌生,请移步本人的博文《如何在windows11下安装Maven并配置以及 IDEA配置Maven环境》,本文的上一篇为《PostMan工具的安装与使用技巧》
【Spring教程28】Spring框架实战:从零开始学习SpringMVC 之 请求与请求参数详解,# SSM与SpringBoot教程,Java教程,spring,学习,java前面我们已经完成了入门案例相关的知识学习,接来了我们就需要针对SpringMVC相关的知识点进行系统的学习,之前我们提到过,SpringMVC是web层的框架,主要的作用是接收请求、接收数据、响应结果,所以这一章节是学习SpringMVC的重点内容,我们主要会讲解四部分内容:

  • 请求映射路径
  • 请求参数
  • 日期类型参数传递
  • 响应json数据

1 设置请求映射路径

1.1 环境准备

  • 创建一个Web的Maven项目
  • pom.xml添加Spring依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.itheima</groupId>
	<artifactId>springmvc_03_request_mapping</artifactId>
	<version>1.0-SNAPSHOT</version>
	<packaging>war</packaging>

<dependencies>
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>javax.servlet-api</artifactId>
		<version>3.1.0</version>
		<scope>provided</scope>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-webmvc</artifactId>
		<version>5.2.10.RELEASE</version>
	</dependency>
</dependencies>

<build>
	<plugins>
		<plugin>
			<groupId>org.apache.tomcat.maven</groupId>
			<artifactId>tomcat7-maven-plugin</artifactId>
			<version>2.1</version>
			<configuration>
				<port>80</port>
				<path>/</path>
			</configuration>
		</plugin>
	</plugins>
</build>
</project>
  • 创建对应的配置类
public class ServletContainersInitConfig extends
AbstractAnnotationConfigDispatcherServletInitializer {

	protected Class<?>[] getServletConfigClasses() {
			return new Class[]{SpringMvcConfig.class};
		}
		protected String[] getServletMappings() {
			return new String[]{"/"};
		}
		protected Class<?>[] getRootConfigClasses() {
			return new Class[0];
	}
}

@Configuration
@ComponentScan("com.itheima.controller")
public class SpringMvcConfig {
}
  • 编写BookController和UserController
@Controller
public class UserController {

	@RequestMapping("/save")
	@ResponseBody
	public String save(){
		System.out.println("user save ...");
		return "{'module':'user save'}";
	}
	
	@RequestMapping("/delete")
	@ResponseBody
		public String save(){
		System.out.println("user delete ...");
		return "{'module':'user delete'}";
	}
}

@Controller
public class BookController {

	@RequestMapping("/save")
	@ResponseBody
	public String save(){
		System.out.println("book save ...");
		return "{'module':'book save'}";
	}
}

最终创建好的项目结构如下:
【Spring教程28】Spring框架实战:从零开始学习SpringMVC 之 请求与请求参数详解,# SSM与SpringBoot教程,Java教程,spring,学习,java
把环境准备好后,启动Tomcat服务器,后台会报错:
【Spring教程28】Spring框架实战:从零开始学习SpringMVC 之 请求与请求参数详解,# SSM与SpringBoot教程,Java教程,spring,学习,java
从错误信息可以看出:

  • UserController有一个save方法,访问路径为http://localhost/save
  • BookController也有一个save方法,访问路径为http://localhost/save
  • 当访问http://localhost/saved的时候,到底是访问UserController还是BookController?

1.2 问题分析

团队多人开发,每人设置不同的请求路径,冲突问题该如何解决?
解决思路:为不同模块设置模块名作为请求路径前置
对于Book模块的save,将其访问路径设置http://localhost/book/save
对于User模块的save,将其访问路径设置http://localhost/user/save
这样在同一个模块中出现命名冲突的情况就比较少了。

1.3 设置映射路径

步骤1:修改Controller

@Controller
public class UserController {
	@RequestMapping("/user/save")
	@ResponseBody
	public String save(){
		System.out.println("user save ...");
		return "{'module':'user save'}";
	}
	@RequestMapping("/user/delete")
	@ResponseBody
	public String save(){
		System.out.println("user delete ...");
		return "{'module':'user delete'}";
	}
}
@Controller
public class BookController {
	@RequestMapping("/book/save")
	@ResponseBody
	public String save(){
		System.out.println("book save ...");
		return "{'module':'book save'}";
	}
}

问题是解决了,但是每个方法前面都需要进行修改,写起来比较麻烦而且还有很多重复代码,如果/user后期发生变化,所有的方法都需要改,耦合度太高

步骤2:优化路径配置
优化方案:

@Controller
@RequestMapping("/user")
public class UserController {
	@RequestMapping("/save")
	@ResponseBody
	public String save(){
		System.out.println("user save ...");
		return "{'module':'user save'}";
	}
	@RequestMapping("/delete")
	@ResponseBody
	public String save(){
		System.out.println("user delete ...");
		return "{'module':'user delete'}";
	}
}
@Controller
@RequestMapping("/book")
public class BookController {
	@RequestMapping("/save")
	@ResponseBody
	public String save(){
		System.out.println("book save ...");
		return "{'module':'book save'}";
	}
}

注意:

  • 当类上和方法上都添加了@RequestMapping注解,前端发送请求的时候,要和两个注解的value值相加匹配才能访问到。
  • @RequestMapping注解value属性前面加不加/都可以

扩展小知识:
对于PostMan如何觉得字小不好看,可以使用ctrl+=调大,ctrl±调小。

2 请求参数

请求路径设置好后,只要确保页面发送请求地址和后台Controller类中配置的路径一致,就可以接收到前端的请求,接收到请求后,如何接收页面传递的参数?

关于请求参数的传递与接收是和请求方式有关系的,目前比较常见的两种请求方式为:

  • GET
  • POST

针对于不同的请求前端如何发送,后端如何接收

2.1 环境准备

  • 创建一个Web的Maven项目
  • pom.xml添加Spring依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	
	<groupId>com.itheima</groupId>
	<artifactId>springmvc_03_request_mapping</artifactId>
	<version>1.0-SNAPSHOT</version>
	<packaging>war</packaging>

	<dependencies>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>5.2.10.RELEASE</version>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat7-maven-plugin</artifactId>
				<version>2.1</version>
				<configuration>
					<port>80</port>
					<path>/</path>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>
  • 创建对应的配置类
public class ServletContainersInitConfig extends
AbstractAnnotationConfigDispatcherServletInitializer {

	protected Class<?>[] getServletConfigClasses() {
		return new Class[]{SpringMvcConfig.class};
	}
	protected String[] getServletMappings() {
		return new String[]{"/"};
	}
	protected Class<?>[] getRootConfigClasses() {
		return new Class[0];
	}
}

@Configuration
@ComponentScan("com.itheima.controller")
public class SpringMvcConfig {
}
  • 编写UserController
@Controller
public class UserController {

	@RequestMapping("/commonParam")
	@ResponseBody
	public String commonParam(){
		return "{'module':'commonParam'}";
	}
}
  • 编写模型类,User和Address
public class Address {
	private String province;
	private String city;
	//setter...getter...略
}
public class User {
	private String name;
	private int age;
	//setter...getter...略
}

最终创建好的项目结构如下:
【Spring教程28】Spring框架实战:从零开始学习SpringMVC 之 请求与请求参数详解,# SSM与SpringBoot教程,Java教程,spring,学习,java

2.2 参数传递

2.2.1 GET发送单个参数

发送请求与参数:

http://localhost/commonParam?name=itcast

【Spring教程28】Spring框架实战:从零开始学习SpringMVC 之 请求与请求参数详解,# SSM与SpringBoot教程,Java教程,spring,学习,java
接收参数:

@Controller
public class UserController {
	@RequestMapping("/commonParam")
	@ResponseBody
	public String commonParam(String name){
		System.out.println("普通参数传递 name ==> "+name);
		return "{'module':'commonParam'}";
	}
}

2.2.2 GET发送多个参数

发送请求与参数:

http://localhost/commonParam?name=itcast&age=15

【Spring教程28】Spring框架实战:从零开始学习SpringMVC 之 请求与请求参数详解,# SSM与SpringBoot教程,Java教程,spring,学习,java
接收参数:

@Controller
public class UserController {
	@RequestMapping("/commonParam")
	@ResponseBody
	public String commonParam(String name,int age){
		System.out.println("普通参数传递 name ==> "+name);
		System.out.println("普通参数传递 age ==> "+age);
		return "{'module':'commonParam'}";
	}
}

2.2.3 GET请求中文乱码

如果我们传递的参数中有中文,你会发现接收到的参数会出现中文乱码问题。
发送请求: http://localhost/commonParam?name=张三&age=18
控制台:
【Spring教程28】Spring框架实战:从零开始学习SpringMVC 之 请求与请求参数详解,# SSM与SpringBoot教程,Java教程,spring,学习,java
出现乱码的原因相信大家都清楚,Tomcat8.5以后的版本已经处理了中文乱码的问题,但是IDEA中的Tomcat插件目前只到Tomcat7,所以需要修改pom.xml来解决GET请求中文乱码问题

<build>
	<plugins>
		<plugin>
			<groupId>org.apache.tomcat.maven</groupId>
			<artifactId>tomcat7-maven-plugin</artifactId>
			<version>2.1</version>
			<configuration>
				<port>80</port><!--tomcat端口号-->
				<path>/</path> <!--虚拟目录-->
				<uriEncoding>UTF-8</uriEncoding><!--访问路径编解码字符集-->
			</configuration>
		</plugin>
	</plugins>
</build>

2.2.4 POST发送参数

发送请求与参数
【Spring教程28】Spring框架实战:从零开始学习SpringMVC 之 请求与请求参数详解,# SSM与SpringBoot教程,Java教程,spring,学习,java
接收参数:
和GET一致,不用做任何修改

@Controller
public class UserController {
	@RequestMapping("/commonParam")
	@ResponseBody
	public String commonParam(String name,int age){
		System.out.println("普通参数传递 name ==> "+name);
		System.out.println("普通参数传递 age ==> "+age);
		return "{'module':'commonParam'}";
	}
}

2.2.5 POST请求中文乱码

发送请求与参数:
【Spring教程28】Spring框架实战:从零开始学习SpringMVC 之 请求与请求参数详解,# SSM与SpringBoot教程,Java教程,spring,学习,java
接收参数:
控制台打印,会发现有中文乱码问题。
【Spring教程28】Spring框架实战:从零开始学习SpringMVC 之 请求与请求参数详解,# SSM与SpringBoot教程,Java教程,spring,学习,java
解决方案:配置过滤器

public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
	protected Class<?>[] getRootConfigClasses() {
		return new Class[0];
	}
	protected Class<?>[] getServletConfigClasses() {
		return new Class[]{SpringMvcConfig.class};
	}
	protected String[] getServletMappings() {
		return new String[]{"/"};
	}
	//乱码处理
	@Override
	protected Filter[] getServletFilters() {
		CharacterEncodingFilter filter = new CharacterEncodingFilter();
		filter.setEncoding("UTF-8");
		return new Filter[]{filter};
	}
}

CharacterEncodingFilter是在spring-web包中,所以用之前需要导入对应的jar包。文章来源地址https://www.toymoban.com/news/detail-768359.html

到了这里,关于【Spring教程28】Spring框架实战:从零开始学习SpringMVC 之 请求与请求参数详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 从零开始的Django框架入门到实战教程(内含实战实例) - 01 创建项目与app、加入静态文件、模板语法介绍(学习笔记)

      Django是目前比较火爆的框架,之前有在知乎刷到,很多毕业生进入大厂实习后因为不会git和Django框架3天就被踢掉了,因为他们很难把自己的工作融入到整个组的工作中。因此,我尝试自学Django并整理出如下笔记。   在这部分,我将从Django的安装讲起,从创建项目到制

    2024年02月09日
    浏览(50)
  • 从零开始 Spring Boot 28:资源

    图源:简书 (jianshu.com) Spring中的资源被抽象为一个Resource接口: Resource 接口中最重要的一些方法是。 getInputStream() : 定位并打开资源,返回一个用于读取资源的 InputStream 。我们期望每次调用都能返回一个新的 InputStream 。关闭该流是调用者的责任。 exists() : 返回一个 boolean 值,

    2024年02月05日
    浏览(63)
  • Kubernetes超详细教程,一篇文章帮助你从零开始学习k8s,从入门到实战

    k8s github地址:https://github.com/kubernetes/kubernetes 官方文档:https://kubernetes.io/zh-cn/docs/home/ k8s,全程是 kubernetes,这个名字源于希腊语,意为\\\"舵手\\\"或\\\"飞行员” k8s 这个缩写是因为 k 和 s 之间有八个字符 Google 在2014年开源了 k8s 项目,k8s 是一个用于 自动化部署、扩展和管理容器化

    2024年04月14日
    浏览(72)
  • [Java优选系列第2弹]SpringMVC入门教程:从零开始搭建一个Web应用程序

    想和你们分享我眼里的代码世界🗺️  优选系列持续更新中💫 一直在等你,你终于来啦💖                            绿色代表解释说明                 黄色代表重点                  红色代表精髓         SpringMVC是一个基于Java的Web框架,它使

    2024年02月12日
    浏览(41)
  • IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Spring搭建框架步骤

    第一章 初识Spring 1.1 Spring简介 Spring是一个为简化企业级开发而生的 开源框架 。 Spring是一个 IOC(DI) 和 AOP 容器框架。 IOC全称:Inversion of Control【控制反转】 将对象【万物皆对象】控制权交个Spring DI全称:(Dependency Injection):依赖注入 AOP全称:Aspect-Oriented Programming,面向切面编

    2024年02月04日
    浏览(33)
  • 联邦学习实战-1:用python从零开始实现横向联邦学习

    什么是联邦学习? 简单来说就是在一个多方的环境中,数据集是零散的(在各个不同的客户端中),那么怎样实现机器学习算法呢? 首先想到的就是将多个数据集合并合并起来,然后统一的使用传统的机器学习或者深度学习算法进行计算,但是如果有一方因为数据隐私问题

    2023年04月08日
    浏览(38)
  • 从零开始的QQ开放平台机器人-------Gensokyo框架部署运行开发教程合集

    大家好,我是早苗狐,一名有5年QQ机器人开发运营经验的机器人爱好者. 随着QQ为机器人开放了越来越多的接口能力,基于QQ开放平台Api能力的新框架逐渐应运而生, 本文就带给大家如何通过一系列操作,部署,运行,维护和开发一个新的QQ机器人. QQ开放平台地址: QQ开放平台 QQ开放平台

    2024年02月03日
    浏览(73)
  • Android SDK安装教程(超详细),从零基础入门到实战,从看这篇开始

    前言 在使用appnium的时候,除了安装JDK之外,也需要安装Android SDK。那么,正确安装Android SDK是怎样的呢,跟着小编继续往下看。 安装Android SDK和环境配置 1.安装Android SDK 首先打开官网:https://www.androiddevtools.cn/ 选中导航中的Android SDK工具,再点击SDK Tools。 网页会自动往下翻,

    2024年02月14日
    浏览(38)
  • Spring Boot(04):让你的Spring Boot应用“火力全开”,从零开始学习starter

            Spring Boot是一款非常流行的Java开发框架,其具有快速开发、自动化配置、内嵌服务器、易于扩展等特点,因此备受开发者欢迎。在日常开发中,我们经常需要在不同的环境中进行测试和部署,此时,如何实现开发、测试、生产环境的快速切换,成为了我们需要解决

    2024年04月13日
    浏览(45)
  • “从零开始学习Spring Boot:快速搭建Java后端开发环境“

    标题:从零开始学习Spring Boot:快速搭建Java后端开发环境 摘要:本文将介绍如何从零开始学习Spring Boot,并详细讲解如何快速搭建Java后端开发环境。通过本文的指导,您将能够快速搭建一个基于Spring Boot的Java后端开发环境并开始编写代码。 正文: 一、准备工作 在开始之前,

    2024年02月15日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包