SpringMVC请求与响应
SpringMVC请求与响应
CAMELLIA请求与响应
SpringMVC是web层的框架,主要的作用是接收请求、接收数据、响应结果,这也是SpringMVC的==重点==内容:
- 请求映射路径
- 请求参数
- 日期类型参数传递
- 响应json数据
1. 设置请求映射路径
1.1 环境准备
创建对应的配置类
1
2
3
4
5
6
7
8
9
10
11
12public 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];
}
}1
2
3
4
5
public class SpringMvcConfig {
}编写BookController和UserController
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class UserController {
public String save(){
System.out.println("user save ...");
return "{'module':'user save'}";
}
public String save(){
System.out.println("user delete ...");
return "{'module':'user delete'}";
}
}
public class BookController {
public String save(){
System.out.println("book save ...");
return "{'module':'book save'}";
}
}
把环境准备好后,启动Tomcat服务器,后台会报错:
从错误信息可以看出:
- 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
1 |
|
问题是解决了,但是每个方法前面都需要进行修改,写起来比较麻烦而且还有很多重复代码,如果/user后期发生变化,所有的方法都需要改,耦合度太高。
*步骤2:优化路径配置
优化方案:
1 |
|
注意:
- 当类上和方法上都添加了
@RequestMapping
注解,前端发送请求的时候,要和两个注解的value值相加匹配才能访问到。
2. 请求参数
关于请求参数的传递与接收是和请求方式有关系的,目前比较常见的两种请求方式为:
- GET
- POST
针对于不同的请求前端如何发送,后端如何接收?
2.1 参数传递
GET发送单个参数
发送请求与参数:
1 | http://localhost/commonParam?name=itcast |
接收参数:
1 |
|
GET发送多个参数
发送请求与参数:
1 | http://localhost/commonParam?name=itcast&age=15 |
接收参数:
1 |
|
GET请求中文乱码
如果我们传递的参数中有中文,你会发现接收到的参数会出现中文乱码问题。
发送请求:http://localhost/commonParam?name=张三&age=18
出现乱码的原因相信大家都清楚,Tomcat8.5以后的版本已经处理了中文乱码的问题,但是IDEA中的Tomcat插件目前只到Tomcat7,所以需要修改pom.xml来解决GET请求中文乱码问题
1 | <build> |
POST发送参数
发送请求与参数:
接收参数:
和GET一致,不用做任何修改
1 |
|
*POST请求中文乱码
发送请求与参数:
接收参数:
控制台打印,会发现有中文乱码问题。
解决方案:配置过滤器
1 | public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer { |
CharacterEncodingFilter是在spring-web包中,所以用之前需要导入对应的jar包。