JavaWeb从入门到放弃(3)-让外网能访问以及互传json

上节已经实现了本地的模拟请求也返回了数据,但是在实际应用中,服务端总是在外网的,而且返回的数据会是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();


三:开始发送吧

@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.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");




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值