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");




阅读全文
0 0
原创粉丝点击