发送报文主体、写入cookie(自动随带)、发送自定义的头部信息javascript
<body> <div> <button id="btn">发送</button> </div> <script src="../js/lib/jquery-3.2.1.js"></script> <script> document.cookie = "cookieKey=cookieValue"; //ajax技术核心:XMLHttpRequest // 在不从新加载页面的状况下更新网页 // 在页面已加载后从服务器请求数据 // 在页面已加载后从服务器接收数据 // 在后台向服务器发送数据 $('#btn').click(function () { $.ajax({ url: "postTest.do", type: "POST", dataType: "text", headers: {"aa":"this is my headerData"}, contentType:"application/text;charset=UTF-8", data:"this is client request data", success: function(data,status,xmlhttp) { alert(data); alert(status); alert(xmlhttp.status); //响应实体的类型由 responseType 来指定, 能够 alert(xmlhttp.responseText); //打印全部的头部信息 alert(xmlhttp.getAllResponseHeaders()); //按照key-value的形式取出响应的头部信息 alert(xmlhttp.getResponseHeader('Content-Type')); alert('token='+xmlhttp.getResponseHeader('token')); }, error: function() { alert("请求出错!"); } }); }); </script> </body>
接收有:解析头部信息、主体信息、主体信息。并也返回这些信息。html
@RequestMapping(value="postTest.do",method= RequestMethod.POST,produces = "application/text;charset=UTF-8;") @ResponseBody public String postTest(HttpServletRequest request, HttpServletResponse response) throws IOException { //接收 cookie//////////////////////////////////////////////// Cookie[] cookies = request.getCookies(); System.out.println("Cookie长度:" + cookies.length); //读取本机共存在多少COOKIE if (cookies != null) { for (int i = 0; i < cookies.length; i++) { if (cookies[i].getName().equals("cookieKey")) { System.out.println("cookie:cookieKey=" + URLDecoder.decode(cookies[i].getValue(),"UTF-8")); } } } else { System.out.println("没有任何Cookie"); } //接收 头部信息 System.out.println("头部信息以下"); System.out.println("request.getHeader(\"user-agent\") = :"+request.getHeader("user-agent")); System.out.println("request.getHeader(\"Referer\") = :"+request.getHeader("Referer")); System.out.println("request.getHeader(\"Accept\") = :"+request.getHeader("Accept")); System.out.println("request.getHeader(\"Host\"):"+request.getHeader("Host")); System.out.println("request.getHeader(\"aa\"):"+request.getHeader("aa")); //接收 客户端的基本信息 System.out.println("请求的基本信息以下"); System.out.println("request.getRequestURL() = :"+request.getRequestURL()); System.out.println("request.getRequestURI() = :"+request.getRequestURI());//可用于REST API构建! System.out.println("request.getRemoteHost() = :"+request.getRemoteHost()); System.out.println("request.getRemotePort() = :"+request.getRemotePort()); System.out.println("request.getLocalAddr() = :"+request.getLocalAddr()); System.out.println("request.getLocalName() = :"+request.getLocalName()); System.out.println("request.getMethod() = :"+request.getMethod()); System.out.println("解析HTTP POST方式的报文主体以下:"); //接收报文主体数据 DataInputStream in = new DataInputStream(request.getInputStream()); int totalBytes = request.getContentLength(); byte[] b = new byte[totalBytes]; in.readFully(b); in.close(); String reqContent = new String(b, "UTF-8"); System.out.println("request.getInputStream()解析的报文主体 = "+reqContent); //返回cookie//////////////////////////////////////////////// //建立一个cookie Cookie cookie = new Cookie("key1", "cookieValue1"); cookie.setPath("/");// 这个要设置 // cookie.setDomain(".zhangsan.com");//这样设置,能实现两个网站共用 cookie.setMaxAge(365 * 24 * 60 * 60);// 不设置的话,则cookies不写入硬盘,而是写在内存,只在当前页面有用,以秒为单位,关闭浏览器就没了 response.addCookie(cookie); //添加cookie到响应对象中 //建立第二个cookie cookie = new Cookie("key2", "cookieValue2"); cookie.setPath("/"); cookie.setMaxAge(365 * 24 * 60 * 60); response.addCookie(cookie); //添加cookie到响应对象中 //删除一个cookie:添加第三个Cookie 用这个cookie来毁掉以前的那个cookie 达到删除的效果! cookie = new Cookie("username","");//这边得用"",不能用null cookie.setPath("/");//设置成跟写入cookies同样的 cookie.setMaxAge(0); response.addCookie(cookie); //添加到HTTP头部信息:让头部携带token信息! response.setHeader("token","bb999888"); //返回响应报文主体数据! return "来自后台的数据!"; }
Cookie长度:5 cookie:cookieKey=cookieValue 头部信息以下 request.getHeader("user-agent") = :Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:60.0) Gecko/20100101 Firefox/60.0 request.getHeader("Referer") = :http://localhost:8080/ request.getHeader("Accept") = :text/plain, */*; q=0.01 request.getHeader("Host"):localhost:8080 request.getHeader("aa"):this is my headerData 请求的基本信息以下 request.getRequestURL() = :http://localhost:8080/postTest.do request.getRequestURI() = :/postTest.do request.getRemoteHost() = :0:0:0:0:0:0:0:1 request.getRemotePort() = :50403 request.getLocalAddr() = :0:0:0:0:0:0:0:1 request.getLocalName() = :localhost request.getMethod() = :POST 解析HTTP POST方式的报文主体以下: request.getInputStream()解析的报文主体 = this is client request data
1. $.ajax()发送请求带上头部信息前端
$('#btn').click(function () { var inVal = $('#inVal').val(); $.ajax({ url: "postTest.do", headers:{"appId":"123","appKey":"456"}, type: "POST", dataType: "text", contentType:"application/text;charset=UTF-8", data:inVal, success: function(data) { alert(data); }, error: function() { alert("请求出错!"); } }); });
2. 接收头部信息并返回接收的主体信息java
@RequestMapping(value="postTest.do",method= RequestMethod.POST,produces = "application/text;charset=UTF-8;") @ResponseBody public String postTest2(@RequestBody String data,@RequestHeader("appId") String appId){ System.out.println("\n\ndata = :"+data); System.out.println("\n\nappId = :"+appId); return data; }
$.ajax({ url: "postTest.do?", type: "POST", dataType: "text", contentType:"application/text;charset=UTF-8", data: {"key1":"val1","key2":"val2"}, success: function(data) { alert(data); }, error: function() { alert("请求出错!"); } });
主要经过request.getInputStream()来接收HTTP报文主体内容!jquery
@RequestMapping(value="postTest.do",method= RequestMethod.POST,produces = "application/text;charset=UTF-8;") @ResponseBody public String postTest(HttpServletRequest request) throws IOException { System.out.println("请求的基本信息以下"); System.out.println("request.getRequestURL() = :"+request.getRequestURL()); System.out.println("request.getRequestURI() = :"+request.getRequestURI());//可用于REST API构建! System.out.println("request.getRemoteHost() = :"+request.getRemoteHost()); System.out.println("request.getRemotePort() = :"+request.getRemotePort()); System.out.println("request.getLocalAddr() = :"+request.getLocalAddr()); System.out.println("request.getLocalName() = :"+request.getLocalName()); System.out.println("request.getMethod() = :"+request.getMethod()); System.out.println("解析HTTP POST方式的报文主体以下:"); System.out.println("request.getParameter(\"aa\") = :"+request.getParameter("aa")); DataInputStream in = new DataInputStream(request.getInputStream()); int totalBytes = request.getContentLength(); byte[] b = new byte[totalBytes]; in.readFully(b); in.close(); String reqContent = new String(b, "UTF-8"); System.out.println("request.getInputStream()解析的报文主体 = "+reqContent); System.out.println("头部信息以下"); System.out.println("request.getHeader(\"user-agent\") = :"+request.getHeader("user-agent")); System.out.println("request.getHeader(\"Referer\") = :"+request.getHeader("Referer")); System.out.println("request.getHeader(\"Accept\") = :"+request.getHeader("Accept")); System.out.println("request.getHeader(\"Host\"):"+request.getHeader("Host")); return "来自后台的数据!"; }
请求的基本信息以下 request.getRequestURL() = :http://localhost:8080/postTest.do request.getRequestURI() = :/postTest.do request.getRemoteHost() = :0:0:0:0:0:0:0:1 request.getRemotePort() = :55300 request.getLocalAddr() = :0:0:0:0:0:0:0:1 request.getLocalName() = :localhost request.getMethod() = :POST 解析HTTP POST方式的报文主体以下: request.getParameter("aa") = :null request.getInputStream()解析的报文主体 = key1=val1&key2=val2 头部信息以下 request.getHeader("user-agent") = :Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:60.0) Gecko/20100101 Firefox/60.0 request.getHeader("Referer") = :http://localhost:8080/ request.getHeader("Accept") = :text/plain, */*; q=0.01 request.getHeader("Host"):localhost:8080
$.ajax({ url: "postTest.do?", type: "GET", dataType: "text", contentType:"application/text;charset=UTF-8", data: {"key1":"val1","key2":"val2"}, success: function(data) { alert(data); }, error: function() { alert("请求出错!"); } });
主要经过request.getQueryString()来接收HTTP的参数列表(放在URL部分)!web
@RequestMapping(value="postTest.do",method= RequestMethod.GET,produces = "application/text;charset=UTF-8;") @ResponseBody public String postTest(HttpServletRequest request) throws IOException { System.out.println("GET请求的参数数据"); System.out.println("\nrequest.getQueryString() = :"+request.getQueryString()); System.out.println("请求的基本信息以下"); System.out.println("request.getRequestURL() = :"+request.getRequestURL()); System.out.println("request.getRequestURI() = :"+request.getRequestURI());//可用于REST API构建! System.out.println("request.getRemoteHost() = :"+request.getRemoteHost()); System.out.println("request.getRemotePort() = :"+request.getRemotePort()); System.out.println("request.getLocalAddr() = :"+request.getLocalAddr()); System.out.println("request.getLocalName() = :"+request.getLocalName()); System.out.println("request.getMethod() = :"+request.getMethod()); System.out.println("头部信息以下"); System.out.println("request.getHeader(\"user-agent\") = :"+request.getHeader("user-agent")); System.out.println("request.getHeader(\"Referer\") = :"+request.getHeader("Referer")); System.out.println("request.getHeader(\"Accept\") = :"+request.getHeader("Accept")); System.out.println("request.getHeader(\"Host\"):"+request.getHeader("Host")); return "来自后台的数据!"; }
GET请求的参数数据 request.getQueryString() = :&key1=val1&key2=val2 请求的基本信息以下 request.getRequestURL() = :http://localhost:8080/postTest.do request.getRequestURI() = :/postTest.do request.getRemoteHost() = :0:0:0:0:0:0:0:1 request.getRemotePort() = :56121 request.getLocalAddr() = :0:0:0:0:0:0:0:1 request.getLocalName() = :localhost request.getMethod() = :GET 头部信息以下 request.getHeader("user-agent") = :Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:60.0) Gecko/20100101 Firefox/60.0 request.getHeader("Referer") = :http://localhost:8080/ request.getHeader("Accept") = :text/plain, */*; q=0.01 request.getHeader("Host"):localhost:8080
<form action="postTest.do" method="GET" accept-charset="UTF-8"> <p>First name: <input type="text" name="userName" /></p> <p>Last name: <input type="text" name="passWord" /></p> <input type="submit" value="提交表单" /> </form>
request.getParameter()都可接收POST和GET请求的表单数据,均可以用request.getParameter("passWord"));方法来解析表单数据!ajax
request.getQueryString()不可用于POST请求。spring
@RequestMapping(value="postTest.do",method= RequestMethod.GET,produces = "application/text;charset=UTF-8;") @ResponseBody public String postTest(HttpServletRequest request) throws IOException { System.out.println("POST请求的参数数据"); String str = ""; String reqMethod = request.getMethod(); if(reqMethod.equals("GET")) str = request.getQueryString(); else//POST str = request.getParameter("userName"); String cs= URLDecoder.decode(str,"utf-8");//将中文转码 System.out.println("userName = :"+cs); System.out.println("passWord = :"+request.getParameter("passWord")); System.out.println("请求的基本信息以下"); System.out.println("request.getRequestURL() = :"+request.getRequestURL()); System.out.println("request.getRequestURI() = :"+request.getRequestURI());//可用于REST API构建! System.out.println("request.getRemoteHost() = :"+request.getRemoteHost()); System.out.println("request.getRemotePort() = :"+request.getRemotePort()); System.out.println("request.getLocalAddr() = :"+request.getLocalAddr()); System.out.println("request.getLocalName() = :"+request.getLocalName()); System.out.println("request.getMethod() = :"+request.getMethod()); System.out.println("头部信息以下"); System.out.println("request.getHeader(\"user-agent\") = :"+request.getHeader("user-agent")); System.out.println("request.getHeader(\"Referer\") = :"+request.getHeader("Referer")); System.out.println("request.getHeader(\"Accept\") = :"+request.getHeader("Accept")); System.out.println("request.getHeader(\"Host\"):"+request.getHeader("Host")); return "来自后台的数据!"; }
POST请求的参数数据 userName = :userName=张三&passWord=123456 passWord = :123456 请求的基本信息以下 request.getRequestURL() = :http://localhost:8080/postTest.do request.getRequestURI() = :/postTest.do request.getRemoteHost() = :0:0:0:0:0:0:0:1 request.getRemotePort() = :60414 request.getLocalAddr() = :0:0:0:0:0:0:0:1 request.getLocalName() = :localhost request.getMethod() = :GET 头部信息以下 request.getHeader("user-agent") = :Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:60.0) Gecko/20100101 Firefox/60.0 request.getHeader("Referer") = :http://localhost:8080/ request.getHeader("Accept") = :text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 request.getHeader("Host"):localhost:8080
<!--上传文件--> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>1.4.1</version> </dependency>
<!--上传文件--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="1000000"></property> </bean>
a. enctype="multipart/form-data浏览器
b. 必须为POST请求:method="POST"服务器
<form enctype="multipart/form-data" action="postTest.do" method="POST" accept-charset="UTF-8"> <input type="file" name="file"> <input type="submit" value="上传" /> </form>
必需要MultipartFile类对象来接收!
@RequestMapping(value="postTest.do",method= RequestMethod.POST,produces = "application/text;charset=UTF-8;") @ResponseBody public String postTest(@RequestParam("file") MultipartFile file) { System.out.println("\n\n fileName = :"+file.getOriginalFilename()); return "来自后台的数据!"; }
js
$('#btn').click(function () { $.ajax({ url: "postTest.do", type: "POST", dataType: "text", contentType:"application/text;charset=UTF-8", success: function(data,status,xmlhttp) { alert(data); alert(status); alert(xmlhttp.status); //响应实体的类型由 responseType 来指定, 能够 alert(xmlhttp.responseText); //打印全部的头部信息 alert(xmlhttp.getAllResponseHeaders()); //按照key-value的形式取出响应的头部信息 alert(xmlhttp.getResponseHeader('Content-Type')); alert('token='+xmlhttp.getResponseHeader('token')); }, error: function() { alert("请求出错!"); } }); });
java(并写入token在响应HTTP的头部)
@RequestMapping(value="postTest.do",method= RequestMethod.POST,produces = "application/text;charset=UTF-8;") @ResponseBody public String postTest(HttpServletRequest request, HttpServletResponse response){ response.setHeader("token","bb999888"); return "来自后台的数据!"; }
带上cookie
@RequestMapping(value="postTest.do",method= RequestMethod.POST,produces = "application/text;charset=UTF-8;") @ResponseBody public String postTest(HttpServletRequest request, HttpServletResponse response) throws IOException { Cookie[] cookies = request.getCookies(); System.out.println("Cookie长度:" + cookies.length); //读取本机共存在多少COOKIE if (cookies != null) { for (int i = 0; i < cookies.length; i++) { if (cookies[i].getName().equals("username")) { System.out.println("cookie:username=" + URLDecoder.decode(cookies[i].getValue(),"UTF-8")); } } } else { System.out.println("没有任何Cookie"); } //建立一个cookie Cookie cookie = new Cookie("key1", "cookieValue1"); cookie.setPath("/");// 这个要设置 // cookie.setDomain(".zhangsan.com");//这样设置,能实现两个网站共用 cookie.setMaxAge(365 * 24 * 60 * 60);// 不设置的话,则cookies不写入硬盘,而是写在内存,只在当前页面有用,以秒为单位,关闭浏览器就没了 response.addCookie(cookie); //添加cookie到响应对象中 //建立第二个cookie cookie = new Cookie("key2", "cookieValue2"); cookie.setPath("/"); cookie.setMaxAge(365 * 24 * 60 * 60); response.addCookie(cookie); //添加cookie到响应对象中 //删除一个cookie:添加第三个Cookie 用这个cookie来毁掉以前的那个cookie 达到删除的效果! cookie = new Cookie("username","");//这边得用"",不能用null cookie.setPath("/");//设置成跟写入cookies同样的 cookie.setMaxAge(0); response.addCookie(cookie); return "来自后台的数据!"; }