当前位置: 首页 > news >正文

java 原生http服务器 测试JS前端ajax访问实现跨域传post数据

后端 java eclipse

字节流转字符

package Httpv3;import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;//来源
//https://blog.csdn.net/xietansheng/article/details/78704783//浏览器访问: http://localhost:8080/、http://localhost:8080/bb,输出: Hello World//浏览器访问: http://localhost:8080/aa、http://localhost:8080/aa/bb,输出: Hello World AA
//                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
//原文链接:https://blog.csdn.net/xietansheng/article/details/78704783public class Mainv2 {public String mydata=new String();public static void main(String[] args) throws Exception {String mydatav2= new String();// 创建 http 服务器, 绑定本地 8080 端口HttpServer httpServer = HttpServer.create(new InetSocketAddress(8080), 0);// 创上下文监听, "/" 表示匹配所有 URI 请求httpServer.createContext("/", new HttpHandler() {@Overridepublic void handle(HttpExchange httpExchange) throws IOException {System.out.println("addr: " + httpExchange.getRemoteAddress() +     // 客户端IP地址"; protocol: " + httpExchange.getProtocol() +               // 请求协议: HTTP/1.1"; method: " + httpExchange.getRequestMethod() +            // 请求方法: GET, POST 等"; URI: " + httpExchange.getRequestURI());                  // 请求 URI// 获取请求头String userAgent = httpExchange.getRequestHeaders().getFirst("User-Agent");System.out.println("User-Agent: " + userAgent);// 响应内容
//                byte[] respContents = "Hello World".getBytes("UTF-8");byte[] respContents = ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"+ "<note>\r\n"+ "  <to>Tove</to>\r\n"+ "  <from>Jani</from>\r\n"+ "  <heading>Reminder</heading>\r\n"+ "  <body>Don't forget me this weekend!</body>\r\n"+ "</note>").getBytes("UTF-8");// 设置响应头//                httpExchange.getResponseHeaders().add("Content-Type", "text/html; charset=UTF-8");
//               参数解释-允许跨域的各个参数
//              https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Access-Control-Request-HeadershttpExchange.getResponseHeaders().add("Access-Control-Allow-Origin","*");httpExchange.getResponseHeaders().add("Access-Control-Allow-Headers","*");httpExchange.getResponseHeaders().add("Access-Control-Allow-Methods","*");
//              允许接收各种消息头 对应前端 xhr.setRequestHeader('Content-Type', 'application/json');httpExchange.getResponseHeaders().add("Access-Control-Request-Headers","*");httpExchange.getResponseHeaders().add("Access-Control-Expose-Headers","*" );
//              对应前端特定消息头 xhr.setRequestHeader('Content-Type', 'application/json');httpExchange.getResponseHeaders().add("Content-Type", "text/html; charset=UTF-8");// 设置响应code和内容长度httpExchange.sendResponseHeaders(200, respContents.length);// 设置响应内容httpExchange.getResponseBody().write(respContents);//                测试数据
//                String receive = httpExchange.getResponseBody().toString();
//                System.out.println(receive);
//                
//                String receivev2 = httpExchange.getRequestBody().toString();
//                System.out.println(receivev2);
//                获取数组,把其他的body打印出来,发现是asc码byte[] receivev3 = httpExchange.getRequestBody().readAllBytes();System.out.println(Arrays.toString(receivev3));//                字节流转字符流String utf_8 = new String(receivev3,StandardCharsets.UTF_8);System.out.println(utf_8);//                String have = Arrays.toString(receivev3);
//                System.out.println(have.toString());
//                System.out.println(have);
//                System.out.println(have.length());
//                for(int i=0;i<have.length();i++) {
//                	System.out.println((char)receivev3[i]);
//                }//                char[] message = new char[1000];
//                 String str = new String();
//                 String s=new String();
//                for(int i=0;i<have.length()-2;i++) {
//                	message[i]=(char)receivev3[i];
//                	System.out.println(message[i]);
//                	字符变字符串
//                	s=Character.toString(message[i]);
//                	System.out.println(s);
//                	字符串追加到 str
//                	str=str.concat(s);
//                	System.out.println(str);
//                	System.out.println(str.length());//                }//                mydatav2.copyValueOf(message);
//                
//                System.out.println("revieve"+str);
//                System.out.println(str);
//                System.out.println(have.length());
//                
//                System.out.println("mydatav2"+mydatav2);//                System.out.println(str.length());
//                System.out.println(Arrays.toString(receivev3));//                InputStream have = httpExchange.getRequestBody();
//                byte[] posting = have.readAllBytes();
//                System.out.println(Arrays.toString(posting));// 关闭处理器httpExchange.close();//              来源
//              https://vimsky.com/examples/detail/java-method-com.sun.net.httpserver.HttpExchange.getResponseHeaders.html//                Headers responseHeaders = httpExchange.getResponseHeaders();
//        	    responseHeaders.add("Access-Control-Allow-Origin", "*");
//        	    responseHeaders.add("Access-Control-Allow-Headers", "*");
//        	    X-Custom-Header
//              httpExchange.getResponseHeaders().add("Content-Type", "text/html; charset=UTF-8");
//        	    httpExchange.getResponseHeaders().add("Access-Control-Allow-Methods","*");
//        	    httpExchange.sendResponseHeaders(200, respContents.length);
//        	    OutputStream outputStream = httpExchange.getResponseBody();
//        	    outputStream.write(httpExchange.getResponseCode());
//        	    outputStream.close();//        	    byte[] respContentsv3 = "Hello World".getBytes("UTF-8");
//        	    httpExchange.sendResponseHeaders(200, respContentsv3.length);
//        	    httpExchange.getResponseBody().write(respContentsv3);//        	    System.out.println("message"+httpExchange.getRequestBody().toString());//        	    httpExchange.close();}});// 创建上下文监听, 处理 URI 以 "/aa" 开头的请求httpServer.createContext("/aa", new HttpHandler() {@Overridepublic void handle(HttpExchange httpExchange) throws IOException {byte[] respContents = "Hello World AA".getBytes("UTF-8");httpExchange.getResponseHeaders().add("Content-Type", "text/html; charset=UTF-8");httpExchange.sendResponseHeaders(200, respContents.length);httpExchange.getResponseBody().write(respContents);httpExchange.close();
//                来源
//                https://vimsky.com/examples/detail/java-method-com.sun.net.httpserver.HttpExchange.getResponseHeaders.html// Add the header to avoid error:// “No 'Access-Control-Allow-Origin' header is present on the requested resource”
//                
//                Headers responseHeaders = httpExchange.getResponseHeaders();
//        	    responseHeaders.add("Access-Control-Allow-Origin", "*");
//        	    httpExchange.sendResponseHeaders(200, respContents.length);
//
//        	    OutputStream outputStream = httpExchange.getResponseBody();
//        	    outputStream.write(httpExchange.getResponseCode());
//        	    outputStream.close();
//        	    }});// 启动服务httpServer.start();}}

前端

<!DOCTYPE html><!-- 来源 -->
<!-- https://cloud.tencent.com/developer/article/1705089 -->
<!-- https://geek-docs.com/ajax/ajax-questions/19_ajax_javascript_send_json_object_with_ajax.html -->
<!-- 配合java后端可以监听 -->
<!-- //原文链接:https://blog.csdn.net/xietansheng/article/details/78704783 --><html lang="en"><head><meta charset="UTF-8"><title>Title</title><script>function fun() {//发送异步请求//1、创建核心对象// var xmlhttp;// if (window.XMLHttpRequest) { //code for IE7+,Firefox,chrome,opera,safari// 	xmlhttp = new XMLHttpRequest();// } else { //code for IE6,IE5// 	xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");// }// //2、建立连接// /*//  * 参数:请求方式、请求的url路径、同步或异步请求(true为异步)//  * get方式:请求参数在url后面拼接,send方法为空;//  * post方式:请求参数在send方法中定义。//  * */// xmlhttp.open("GET", "ajaxServlet?username=Tim", true);// //3、发送请求// xmlhttp.send();// //4、接收及处理响应结果,当服务器响应成功了再获取// xmlhttp.onreadystatechange = function() { //当xmlhttp对象就绪状态改变时会触发事件// 	if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { //请求已完成且响应就绪,响应状态码为200// 		alert(xmlhttp.responseText);// 	}// };// https://geek-docs.com/ajax/ajax-questions/19_ajax_javascript_send_json_object_with_ajax.html// 创建XMLHttpRequest对象var xhr = new XMLHttpRequest();// 设置请求类型和URL// xhr.open('POST', 'http://example.com/api', true);// xhr.open('POST', 'http://localhost:8080/aa', true);// xhr.open('POST', '/aa', true);// xhr.open('POST', 'http://localhost:8080/aa', true);xhr.open('POST', 'http://localhost:8080', true);// 设置请求头xhr.setRequestHeader('Content-Type', 'application/json');// xhr.setRequestHeader('X-Custom-Header', 'value');// xhr.setRequestHeader('Access-Control-Allow-Origin','*');console.log("请求头已设置\n");// 监听服务器响应// xhr.onreadystatechange = function() {//   if (xhr.readyState === 4 && xhr.status === 200) {//     // 从服务器获取响应//     var response = JSON.parse(xhr.responseText);//     console.log(response);// 	console.log(getAllResponseHeaders());//   }// };// 构建JSON对象var data = {name: 'John',age: 25,email: 'john@example.com'};// 将JSON对象转换为字符串var jsonData = JSON.stringify(data);// 发送数据xhr.send(jsonData);// 注释掉就会爆 POST 错误提示//4、接收及处理响应结果,当服务器响应成功了再获取xhr.onreadystatechange = function() { //当xmlhttp对象就绪状态改变时会触发事件if (xhr.readyState == 4 && xhr.status == 200) { //请求已完成且响应就绪,响应状态码为200alert(xhr.responseText);console.log("检测的正确的返回\n");}else{console.log("检测到错误的返回\n");}console.log("检测到返回函数\n");};}</script></head><body><input type="button" value="发送异步请求" onclick="fun();"><input type="text"></body>
</html>

相关文章:

  • 【Python爬虫单点登录实战】PyExecJS破解慧职教:过河源技术学院单点登录统一身份认证
  • 电脑开机出现英文字母,如何解决这个常见问题?
  • MAVEN:自定义模板Archetype的创建
  • 【java】速度搭建一个springboot项目
  • 计算机网络--应用层
  • BF16相比FP16的优点
  • alist配合onlyoffice 实现在线预览
  • 达梦数据库
  • Ajax入门
  • 深度学习中2D检测
  • 小程序中用于跳转页面的5个api是什么?区别
  • Locust:用Python编写可扩展的负载测试
  • Vue 学习笔记 总结
  • 大厂真实面试题(一)
  • calibre,一个超厉害的 Python 库!
  • angular组件开发
  • C++11: atomic 头文件
  • CSS3 变换
  • css的样式优先级
  • DataBase in Android
  • es6(二):字符串的扩展
  • javascript面向对象之创建对象
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • Python实现BT种子转化为磁力链接【实战】
  • SpringBoot几种定时任务的实现方式
  • TypeScript实现数据结构(一)栈,队列,链表
  • uva 10370 Above Average
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 安卓应用性能调试和优化经验分享
  • 搭建gitbook 和 访问权限认证
  • 机器学习学习笔记一
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 浅谈Golang中select的用法
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 应用生命周期终极 DevOps 工具包
  • 阿里云服务器购买完整流程
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​iOS实时查看App运行日志
  • !!java web学习笔记(一到五)
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • (1)无线电失控保护(二)
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (二) 初入MySQL 【数据库管理】
  • (每日一问)设计模式:设计模式的原则与分类——如何提升代码质量?
  • (推荐)叮当——中文语音对话机器人
  • (已解决)什么是vue导航守卫
  • (转)Linux下编译安装log4cxx
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .NET/C#⾯试题汇总系列:集合、异常、泛型、LINQ、委托、EF!(完整版)