页面请求与HttpServlet

form表单中Enctype表明提交数据格式。(对应http请求中Content-Type 类型)
enctype有三个属性application/x-www-from-urlencoded,multipart/form-data,text/plain

application/x-www-from-urlencoded:

在发送前对所有字符进行编码。默认设置。一般get和post请求都是application/x-www-from-urlencoded。form窗体数据被编码为“名称=值”写入url中,例 a=“a”&b=“b”。
通过@RequestParam(“name”)或者request.getParamter(“name”)可以获取到。
multipart/form-data: 不对字符编码,当使用有文件上传控件的表单时,该值是必须的。
通过requst.getReader()或者request.getInputStream()获取。

text/plain : 将空格转换为“+”字符,但不编码特殊字符。编码格式: key1=value1\r\nkey2=value2 (????)

application/json: ajax 请求中常用格式。服务端消息主体是序列化后的JSON字符串。通过@RequestBody可以获取到。

在http请求中,有Header和body之分,读取header使用request.getHeader("…"),读取body使用request.getReader(),但getReader获取的是BufferedReader,需要把它转换成字符串。

String str = "";
InputStream in = request.getInputStream();
InputStreamReader reader = new InputStreamReader(in);
BufferedReader bd = new BufferedReader(reader);
String inputLine;
while((inputLine = bd.readLine())!=null){
	str += inputLine;
}
bd.close();
BufferReader reader = request.getReader();
StringBuilder sb = new StringBuilder();
char[] buf = new char[1024];
int rd;
while((rd = reader.read(buf))!=-1) sb.append(buf,0,rd);

request.getParamter()获取数据之后,request.getInputStream()和request.getReader()是获取不到流内容的,因为调用request.getParamter()时系统可能对请求中数据以流形式读了一次。反之亦然。
SpringMVC 注解与请求对应关系:
@PathVariable 处理request uri部分。获取RequestMapping中{}中对应值(样式映射)

@RequstMapping(value="data/{id}",method={GET})
public @ResponseBody JSONObject getXXX(@PathVariable("id") final Integer id){
//do something
}

@RequestHeader @CookieValue 处理request header部分内容
在这里插入图片描述

@RequestMapping("dddddd")
public void dddd(@RequestHeader("Accept-Encoding") String encoding,
@RequestHeader("Keep-Alive") long keepAlive,
@CookieValue("JSESSIONID") String cookie)

@RequestParam 处理request uri中 “键=值&键=值”内容
@RequestBody 处理request body中内容,处理格式为application/json或application/xml。
@RequestBody注解实现原理参见:https://blog.csdn.net/mmjinglin/article/details/82780822
其中@RequestParam 与@RequestBody 可以同时取request中数据

自定义Request数据解析注解 a

猜你喜欢

转载自blog.csdn.net/mmjinglin/article/details/82777439
今日推荐