JavaWeb从入门到放弃(3)-让外网能访问以及互传json
来源:互联网 发布:ubuntu wireshark抓包 编辑:程序博客网 时间:2024/05/22 11:32
上节已经实现了本地的模拟请求也返回了数据,但是在实际应用中,服务端总是在外网的,而且返回的数据会是json形式或者其他类型。
一.把代码部署到公网
1.有自己的服务器
和你本地的项目一样,安装eclipse,配置java环境,装tomcat,run,与本机localhost不同的是,你需要注意你的防火墙,把你的端口给设置允许访问,百度入网规则就可以找到,或者你直接把防火墙给关了,当然了,这是有风险的。
2.没有自己的服务器,也不想买
那你就需要内网穿透了,因为你的ip是内网ip,这个ip在收发数据时都是依靠路由器的net转化,如果你没有办法自己搞,就借助第三方吧,百度内网穿透即可。我是用的是Sunny-Ngrok,安装教程你配置完毕后,你会有一个域名,接下来你要做的就是请求时候把你的localhost改成这个IP地址即可。
二.开始发json出去(以对象转json为例子)
发json可能有很多种方法,哪怕是你自己通过class.getDeclaredFieils然后遍历,然后getName,然后拼接‘’,这也是json,只是繁琐了些,我使用Google的Gson。
使用方法:Github搜索gson下载工程,或者你去找Gson的jar包,对于这两种情况的导入方法分开说:
对于project:右键-build path-project-add;到此,你可以使用Gson,编译不会报错,但是部署之后你会发现,GG。这里就需要右键-Properties-Deployment Assembly-Add-Apply,OK这下就可以了。
对于.jar:不能像javaSE呢样复制到工程目录下了,需要复制到WebContent-WEB-INF-lib下。好了,说了这么多,终于可以用Gson了,但是怎么用?
这里只是日常使用,至于其他繁琐的,自行百度。
Gson对象提供toJson和fromJson的方法,只是创建这个Gson对象有两种不同的方法
1.Gson gson=new Gson();这个方式创建出来的可以满足一些最基本的,比如遇到map.put("1","====");当转为json后,后面的等于号就不再是等于号了或者你的User对象有一个name字段,你在转gson时候传的user中name字段没有赋值,那么转出来的json就没有这个name字段,而不是"name":null。
2.Gson gson=new GsonBuilder().....,这个方法就可以实现自己的特殊需求了。如一般的配置:
gson = new GsonBuilder() .enableComplexMapKeySerialization() //当Map的key为复杂对象时,需要开启该方法 .serializeNulls() //当字段值为空或null时,依然对该字段进行转换 .setPrettyPrinting() //对结果进行格式化,增加换行 .disableHtmlEscaping() //防止特殊字符出现乱码 .create();
三:开始发送吧
@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubrequest.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");System.out.print("传递过来的数据"+request.getParameter("data"));PrintWriter out = response.getWriter();Data data=new Data();data.setID(0);data.setMessage("我是id为1的数据");//模拟map的转化Map map=new HashMap<>();map.put("q", "===");System.out.println(GsonUtil.gson.toJson(map));out.write(GsonUtil.gson.toJson(data));out.close();out = null;}
注意:如果传输失败,加入
response.setContentType("application/json");四:接收客户端传输的json数据
BufferedReader br=new BufferedReader(new InputStreamReader( (ServletInputStream) request.getInputStream(), "utf-8")); StringBuffer sb = new StringBuffer(""); String temp; while ((temp = br.readLine()) != null) { sb.append(temp); } br.close(); System.out.print("传递过来的数据"+sb.toString()+"\n"+"\n");
- JavaWeb从入门到放弃(3)-让外网能访问以及互传json
- JavaWeb从入门到放弃(2)-让本地可以访问接口
- JavaWeb从入门到放弃(1)-配置环境
- JavaWeb从入门到放弃(5)-连接上数据库
- javaweb从入门到不放弃
- JavaWeb从入门到放弃(9)-实现一个客户端上传文件到服务端
- JavaWeb从入门到放弃(4)-XML与Bean之间的相互转化
- JavaWeb从入门到放弃(6)-仔细看下servlet
- JavaWeb从入门到放弃(7)-HTTP客户端请求和服务端回执
- JavaWeb从入门到放弃(10)-web.xml中信息的配置-持续更新
- 从入门到放弃C语言-瞎倒腾(3)
- Java web从入门到放弃(3)
- Android从入门到放弃3-线程
- Docker 从入门到放弃(一)
- 策略模式(从放弃到入门)
- 观察者模式(从放弃到入门)
- JSP--(二)从入门到放弃
- Kotlin从入门到“放弃”(一)
- 怎样把PDF转换成Word?我有编辑PDF的实用技巧,不容错过
- 『0015』
- Python 中如何获取当前位置所在的文件名,函数名,以及行号
- MySQL5.6 PERFORMANCE_SCHEMA 说明
- Bloom Filter 的基本原理和实现
- JavaWeb从入门到放弃(3)-让外网能访问以及互传json
- springboot(集成篇):RabbitMQ集成详解
- CLNP
- Linux驱动修炼之道-SPI驱动框架源码分析(中)
- iOS 面试题~用@property声明NSString(或NSArray,NSDictionary)经常使用copy关键字,为什么?如果改用strong关键字,可能造成什么问题?
- mysql Linux备份数据库
- Java 线程 1
- 『0016』
- 提取JSON中的value