4-SpringMVC获得请求数据
或者
mvc:default-servlet-handler/
表示springmvc找不到时 交给原始的容器tomcat去找### 请求数据乱码问题 tomcat 8.5 get请求 中文不会出现乱码, post会出现乱码。 如:post获取参数 回写的结果
VO{userList=[User{name=’盲赂颅氓聸陆茅芦聵茅聙聼’, age=11}, User{name=’忙掳麓莽聰碌猫麓鹿’, age=12}]}
解决:设置一个过滤器来进行编码的过滤(以下不一定有用,跟控制台字符的编码字符集有关) web.xml中添加全局的filter
CharacterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 CharacterEncodingFilter /*
@RequestMapping(value = "/quick16") @ResponseBody public void save16(@RequestParam(value = "name", required = true, defaultValue = "abc") String username) { System.out.println(username); }### 参数绑定注解@RequestParam 当请求的参数名称与Controller的业务方法参数名不一致时,用它 @RequestParam有如下参数可以使用: - value : 与请求参数名称一致 - required : 指定的请求参数是否必须包括,默认是true, 请求没写该参数且没有默认值会400
http://localhost/ustc_spring_mvc_war_exploded/quick17/aaa### 获得Restful风格的参数(了解) Restful是一种软件架构风格、设计风格,不是标准。 Restful风格的请求是 使用 "**url + 请求方式**"表示一次请求目的的,相应数据不是以问号方式,而是在url内 - GET 获取资源 - POST 新建资源(添加一个用户数据) - PUT 更新资源 - DELETE 删除资源 eg: - /user/1 GET: 获得id = 1 的user - /user/1 DELETE - /user/1 PUT 更新id = 1 的user - /user POST: 新增user **通过占位符 和@PathVariable 进行参数绑定**
@RequestMapping(value = "/quick17/{name}") @ResponseBody public void save17(@PathVariable(value = "name") String username) { System.out.println(username); }
public class DateConverter implements Converter还有post方式... ### 自定义类型转换器(用的不多,内置一般够用) SpringMVC框架内部有一些定义好的类型转换器, 请求的参数到达服务端后都是字符串 . 不一定能满足我们的需求,比如日期的转换,有很多种格式 ,需要自定义。 开发步骤: ①定义转换器类实现Converter接口
{ public Date convert(String s) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); Date date = null; try { date = simpleDateFormat.parse(s); } catch (ParseException e) { e.printStackTrace(); } return date;
}
}②在配置文件中声明转换器 ③在springmvc.xml中\<annotation-dirven>中引用转换器
<mvc:annotation-driven conversion-service=”ConversionServiceFactoryBean”/>
@RequestMapping(value = "/quick18")
@ResponseBody
public void save18(@RequestParam(name = "date") String username) {
System.out.println(username);
}
http://localhost/ustc_spring_mvc_war_exploded/quick17?date=2020-12-02
### 获得servlet相关api
视频缺失
### 获得请求头
#### 1.@RequestHeader
相当于request.getHeader(name)
/**
* 获取请求头封装到header
*/
@RequestMapping(value = "/quick19")
@ResponseBody
public void save19(@RequestHeader(value = "User-Agent") String header) {
System.out.println(header);
}
#### 2.@CookieValue
/**
* 获取指定cookie的值
*/
@RequestMapping(value = "/quick20")
@ResponseBody
public void save20(@CookieValue(value = "JSESSIONID") String jsessionid) {
System.out.println(jsessionid);
}
Cookie: JSESSIONID=8E06D127BC5FD536CC11F79379482B2C
### 文件上传
#### 1.文件上传客户端的三要素
- 表单项type = "file"
- 提交方式 POST
- 表单的enctype属性是多部分表单形式, enctype="multipart/form-data"
// 准备一个表单
#### 2.文件上传原理
- 当form表单为多部分表单时,request.getParamter()失效,因为他获取的是键值对模式的
- **enctype="application/x-www-form-urlencoded"** // 这是默认的,为键值对模式 key=value&...
- enctype="multipart/form-data"时,请求正文内容就变成多部分形式

// 请求正文内容示例:
-----------------------------77008394839796727021065346689
Content-Disposition: form-data; name="username"
qwer
—————————–77008394839796727021065346689
Content-Disposition: form-data; name=”upload”; filename=”1.txt”
Content-Type: text/plain
aaa
bbb
—————————–77008394839796727021065346689
Content-Disposition: form-data; name=”上传”
提交查询
—————————–77008394839796727021065346689–
springmvc 的文件上传也是封装的apache的fileupload
#### 3.单文件上传步骤
① 导入fileupload和io坐标 (输出的也得有)
Failed to introspect Class [org.springframework.web.multipart.commons.CommonsMultipartResolver] from ClassLoader [ParallelWebappClassLoader
解决:project structure 中 output添加相应依赖
② 配置文件上传解析器 spring-mvc.xml中
③ 编写文件上传代码
/**
* 上传单个文件
* @param username
* @param uploadFile 上传的文件被封装为MultipartFile对象,此参数名要和表单中type为file 的input标签的name一致
*/
@RequestMapping(value = "/quick21")
@ResponseBody
public void save21(String username, MultipartFile uploadFile) throws IOException {
System.out.println(username);
String filename = uploadFile.getOriginalFilename();
System.out.println(filename);
// c:\\upload目录得存在,否则500
uploadFile.transferTo(new File("C:\\upload" + File.separator + filename ));
}
```
4.多文件上传 easy
1.input标签type=file增加多个,同时业务方法增加参数去接收
2.input标签type=file增加多个,name都一样,用数组去接收
// 准备一个表单
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!