广州官网优化,正规seo需要多少钱,深圳定制衣柜价格,视频网站开发流程图目录 1 设置请求映射路径1.1 环境准备 1.2 问题分析1.3 设置映射路径 2 请求参数2.1 环境准备2.2 参数传递2.2.1 GET发送单个参数2.2.2 GET发送多个参数2.2.3 GET请求中文乱码2.2.4 POST发送参数2.2.5 POST请求中文乱码 欢迎大家回到《Java教程之Spring30天快速入门》#xff… 目录 1 设置请求映射路径1.1 环境准备 1.2 问题分析1.3 设置映射路径 2 请求参数2.1 环境准备2.2 参数传递2.2.1 GET发送单个参数2.2.2 GET发送多个参数2.2.3 GET请求中文乱码2.2.4 POST发送参数2.2.5 POST请求中文乱码 欢迎大家回到《Java教程之Spring30天快速入门》本教程所有示例均基于Maven实现如果您对Maven还很陌生请移步本人的博文《如何在windows11下安装Maven并配置以及 IDEA配置Maven环境》本文的上一篇为《PostMan工具的安装与使用技巧》 前面我们已经完成了入门案例相关的知识学习接来了我们就需要针对SpringMVC相关的知识点进行系统的学习之前我们提到过SpringMVC是web层的框架主要的作用是接收请求、接收数据、响应结果所以这一章节是学习SpringMVC的重点内容我们主要会讲解四部分内容:
请求映射路径请求参数日期类型参数传递响应json数据
1 设置请求映射路径
1.1 环境准备
创建一个Web的Maven项目pom.xml添加Spring依赖
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0
xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.itheima/groupIdartifactIdspringmvc_03_request_mapping/artifactIdversion1.0-SNAPSHOT/versionpackagingwar/packagingdependenciesdependencygroupIdjavax.servlet/groupIdartifactIdjavax.servlet-api/artifactIdversion3.1.0/versionscopeprovided/scope/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion5.2.10.RELEASE/version/dependency
/dependenciesbuildpluginsplugingroupIdorg.apache.tomcat.maven/groupIdartifactIdtomcat7-maven-plugin/artifactIdversion2.1/versionconfigurationport80/portpath//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)ResponseBodypublic String save(){System.out.println(user save ...);return {module:user save};}RequestMapping(/delete)ResponseBodypublic String save(){System.out.println(user delete ...);return {module:user delete};}
}Controller
public class BookController {RequestMapping(/save)ResponseBodypublic String save(){System.out.println(book save ...);return {module:book save};}
}最终创建好的项目结构如下: 把环境准备好后启动Tomcat服务器后台会报错: 从错误信息可以看出:
UserController有一个save方法访问路径为http://localhost/saveBookController也有一个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)ResponseBodypublic String save(){System.out.println(user save ...);return {module:user save};}RequestMapping(/user/delete)ResponseBodypublic String save(){System.out.println(user delete ...);return {module:user delete};}
}
Controller
public class BookController {RequestMapping(/book/save)ResponseBodypublic String save(){System.out.println(book save ...);return {module:book save};}
}
问题是解决了但是每个方法前面都需要进行修改写起来比较麻烦而且还有很多重复代码如果/user后期发生变化所有的方法都需要改耦合度太高
步骤2:优化路径配置 优化方案:
Controller
RequestMapping(/user)
public class UserController {RequestMapping(/save)ResponseBodypublic String save(){System.out.println(user save ...);return {module:user save};}RequestMapping(/delete)ResponseBodypublic String save(){System.out.println(user delete ...);return {module:user delete};}
}
Controller
RequestMapping(/book)
public class BookController {RequestMapping(/save)ResponseBodypublic String save(){System.out.println(book save ...);return {module:book save};}
}注意:
当类上和方法上都添加了RequestMapping注解前端发送请求的时候要和两个注解的value值相加匹配才能访问到。RequestMapping注解value属性前面加不加/都可以
扩展小知识: 对于PostMan如何觉得字小不好看可以使用ctrl调大ctrl±调小。
2 请求参数
请求路径设置好后只要确保页面发送请求地址和后台Controller类中配置的路径一致就可以接收到前端的请求接收到请求后如何接收页面传递的参数?
关于请求参数的传递与接收是和请求方式有关系的目前比较常见的两种请求方式为
GETPOST
针对于不同的请求前端如何发送后端如何接收
2.1 环境准备
创建一个Web的Maven项目pom.xml添加Spring依赖
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0
xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.itheima/groupIdartifactIdspringmvc_03_request_mapping/artifactIdversion1.0-SNAPSHOT/versionpackagingwar/packagingdependenciesdependencygroupIdjavax.servlet/groupIdartifactIdjavax.servlet-api/artifactIdversion3.1.0/versionscopeprovided/scope/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion5.2.10.RELEASE/version/dependency/dependenciesbuildpluginsplugingroupIdorg.apache.tomcat.maven/groupIdartifactIdtomcat7-maven-plugin/artifactIdversion2.1/versionconfigurationport80/portpath//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)ResponseBodypublic 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...略
}最终创建好的项目结构如下:
2.2 参数传递
2.2.1 GET发送单个参数
发送请求与参数:
http://localhost/commonParam?nameitcast接收参数
Controller
public class UserController {RequestMapping(/commonParam)ResponseBodypublic String commonParam(String name){System.out.println(普通参数传递 name name);return {module:commonParam};}
}2.2.2 GET发送多个参数
发送请求与参数:
http://localhost/commonParam?nameitcastage15接收参数
Controller
public class UserController {RequestMapping(/commonParam)ResponseBodypublic 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张三age18 控制台: 出现乱码的原因相信大家都清楚Tomcat8.5以后的版本已经处理了中文乱码的问题但是IDEA中的Tomcat插件目前只到Tomcat7所以需要修改pom.xml来解决GET请求中文乱码问题
buildpluginsplugingroupIdorg.apache.tomcat.maven/groupIdartifactIdtomcat7-maven-plugin/artifactIdversion2.1/versionconfigurationport80/port!--tomcat端口号--path//path !--虚拟目录--uriEncodingUTF-8/uriEncoding!--访问路径编解码字符集--/configuration/plugin/plugins
/build2.2.4 POST发送参数
发送请求与参数 接收参数 和GET一致不用做任何修改
Controller
public class UserController {RequestMapping(/commonParam)ResponseBodypublic String commonParam(String name,int age){System.out.println(普通参数传递 name name);System.out.println(普通参数传递 age age);return {module:commonParam};}
}2.2.5 POST请求中文乱码
发送请求与参数: 接收参数: 控制台打印会发现有中文乱码问题。 解决方案:配置过滤器
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[]{/};}//乱码处理Overrideprotected Filter[] getServletFilters() {CharacterEncodingFilter filter new CharacterEncodingFilter();filter.setEncoding(UTF-8);return new Filter[]{filter};}
}CharacterEncodingFilter是在spring-web包中所以用之前需要导入对应的jar包。