- 浏览: 2667306 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
我素熊猫:
66666666666666
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderL -
jonyzhou94:
1987_ming 写道1987_ming 写道System. ...
CXF框架入门实例 -
davidforit:
你那个“2004年Nutch创始人Doug Cutting基于 ...
《Hadoop基础教程》之初识Hadoop -
masuweng:
我的就是这么弄得,到了页面还是那个格式的 。
JSONObject转换JSON--将Date转换为指定格式 -
masuweng:
∑
JSONObject转换JSON--将Date转换为指定格式
java对网络通信以及提供了比较全面的jdk支持,java.net包能让程序员直接在程序中实现网络通信。
在技术日新月异的现在,我们能通过很多方式实现数据通信,比如webservice、url通信、socket通信等等,今天简单介绍下URL通信。
学习准备:建议首先学习java的IO基础知识
URL是统一资源定位器的简写,URL可以访问Internet和www,可以通过url访问网络资源或文件。
java提供了java.net.URL类来封装URL,大家可以在jdk api中看该类的详细介绍。
下面写一个最简单的URL创建和使用方式:
URL url = new URL("http://www.baidu.com/"); System.out.println("授权部分:"+url.getAuthority()); System.out.println("网页内容:"+url.getContent()); System.out.println("默认端口:"+url.getDefaultPort()); System.out.println("文件名:"+url.getFile()); System.out.println("主机名:"+url.getHost()); System.out.println("路径名:"+url.getPath()); System.out.println("端口号:"+url.getPort()); System.out.println("协议名:"+url.getProtocol()); System.out.println("查询部分:"+url.getQuery()); System.out.println("锚点:"+url.getRef()); System.out.println("userInfo:"+url.getUserInfo()); String charSet = "gb2312"; System.out.println("--------------getContent获取网页内容-------------------"); //获取并打印url页面的html源文件 InputStream in = (InputStream) url.getContent(); BufferedReader br = new BufferedReader(new InputStreamReader(in,charSet)); String s = br.readLine() ; while(s!=null){ System.out.println(s); s = br.readLine(); } br.close(); in.close();
有了URL还不够,它只能获得URL本身的基本信息,如果要实现通信,需要使用URLConnection(如果是http通信,可以使用它的子类HttpURLConnection)。通过url的openConnection方法可以打开连接。
URLConnection urlConn = new URL(url).openConnection();
HttpURLConnection httpConn = (HttpURLConnection)new URL(url).openConnection();
HttpURLConnection有两种请求方式:POST和GET,跟平常J2EE项目一样。可以通过设置setRequestMethod来配置请求方式:
httpConn.setRequestMethod("POST");
httpConn.setRequestMethod("GET");
注意请求方式字符串需要大写,如果请求方式有误,会抛出ProtocolException异常
POST和GET发送请求方式有所不同:POST向指定服务器发送的信息是被封装在http内部,而GET发送请求是通过http地址后拼接参数信息(http://www.xx.xx?xx=xx&xxx=xx)实现的。POST向服务器发送信息的时候是把请求信息以IO“流”的形式发送,而GET方式无法通过“流”形式传输。
下面代码通过GET方式发送请求:
String urlString = "http://localhost:8080/TestConn/Conn"; //传递一条参数 urlString += "?id=1"; URL url = new URL(urlString); HttpURLConnection httpConn = (HttpURLConnection) url.openConnection() httpConn.setRequestMethod("GET"); //调用connect方法执行通信 httpConn.connect();
下面代码通过POST方式发送请求:
String urlString = "http://localhost:8080/TestConn/Conn"; URL url = new URL(urlString); HttpURLConnection httpConn = (HttpURLConnection) url.openConnection() httpConn.setRequestMethod("POST"); //设置是否向httpUrlConnection输出,如果是POST请求,则需要设为true, 默认情况下是false; httpConn.setDoInput(true); //设置是否从httpUrlConnection读入,默认情况下是true; httpConn.setDoOutput(true); //Post请求不能使用缓存 httpConn.setUseCaches(true); //设定传送的内容类型是可序列化的java对象 httpConn.setRequestProperty("Content-type", "application/x-java-serialized-object"); //创建输出流发送请求数据 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(httpConn.getOutputStream())); bw.write(new String("我勒个去...")); bw.flush(); bw.close();
注意:一旦使用了httpConn.getOutputStream().write()方法,httpConn.setRequestMethod("GET");将失效,其请求方法会自动转为POST
服务器处理GET请求的时候通过request.getParameter方式获取请求参数,POST请求通过request.getInputStream流的形式获取。
/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String s = request.getParameter("id"); response.setCharacterEncoding("UTF-8"); response.getWriter().print(s); response.getWriter().close(); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取IO数据 BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream())); StringBuffer sb = new StringBuffer(); String s; while((s = br.readLine())!=null){ sb.append(s); sb.append("\n"); } response.setCharacterEncoding("UTF-8"); response.getWriter().print(sb.toString()); response.getWriter().close(); }
获取服务器响应数据的时候可以通过IO的输入流取得:
public static String getInput(HttpURLConnection http) throws IOException{ //获取指定URL返回的IO数据 InputStream in = http.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(in)); StringBuffer sb = new StringBuffer(); String s; while((s = br.readLine())!=null){ sb.append(s); sb.append("\n"); } br.close(); in.close(); return sb.toString(); }
下面用一个完整代码总结下URL通信的方法:
public static void main(String[] args) throws IOException { //①创建URL对象(如果是GET请求,则url后要拼接请求参数) String urlString = "http://localhost:8080/TestConn/Conn"; URL url = new URL(urlString); //②创建HttpUrlConnection对象 HttpURLConnection httpConn = (HttpURLConnection) url.openConnection(); //③配置httpConn的属性 httpConn.setRequestMethod("POST"); httpConn.setDoInput(true); httpConn.setDoOutput(true); httpConn.setUseCaches(true); httpConn.setRequestProperty("Content-type", "application/x-java-serialized-object"); //④发送请求信息(为什么使用字符缓冲流,这纯属个人爱好) BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(httpConn.getOutputStream())); bw.write("Hello URL...\n"); bw.write("你好 ItEye..."); bw.flush(); bw.close(); //⑤获取响应信息 BufferedReader br = new BufferedReader(new InputStreamReader(httpConn.getInputStream())); String response = null; while((response = br.readLine())!=null){ System.out.println(response); } br.close(); //⑥通信结束.... }
注意:http://localhost:8080/TestConn/Conn请求的是一个servlet,代码写在本文中间偏下位置。
URL通信技术入门很简单,一天时间足矣。
发表评论
-
关于HQL和JDBC SQL中字段相除的一点小经验
2016-02-25 11:42 3275最近在做一个功能,产 ... -
Java异常那些不得不说的事
2014-11-29 12:09 17017一、在finally块中做数据回收操作 比如数据库连接都 ... -
基于Java的通用图表接口设计与实现
2014-02-26 18:00 15009现如今,互联网上充斥 ... -
JSONObject转换JSON--将Date转换为指定格式
2014-02-18 22:12 76995项目中,经常会用JSONObject插件将JavaBean或 ... -
Java开发笔记
2012-12-13 10:30 17561、Map<key,value>的remove ... -
org.hibernate.hql.ast.QuerySyntaxException: unexpected token: on near line 1解决方案
2012-09-12 16:03 28067文章摘自:http://blog.csdn.net/yangw ... -
Java反射常用机制
2012-08-04 17:58 8346首先要求大家对Java泛型知识有所了解,因为程序代码中大量使 ... -
JDBC常用API之外的总结
2012-04-20 15:43 6416做JAVA的人玩JDBC肯定已经很熟练了,像DriverMa ... -
JSP实现指定盘符路径下的图片显示
2012-02-14 09:54 23488开发人员都知道<img src="" ... -
Java实现文件上传
2012-02-13 23:57 319643最近自己在做一个小系统玩的时候涉及到了文件的上传,于是在网上 ... -
commons-fileupload实现文件上传功能实例
2012-01-17 21:50 67347Apache提供的commons-fileupload ja ... -
汉字转拼音pinyin4j
2011-09-03 09:57 2114以前在项目中遇到汉字转拼音的情况,于是在网上找到了pinyi ... -
J2EE监听器和过滤器基础
2011-09-02 16:56 7281Servlet程序由Servlet,Filter和Liste ... -
java通信之Socket通信基础
2011-06-21 21:08 5941正处于网络环境下的两个程序,它们之间通过一个交互的连接来实现数 ... -
java集合排序笔记
2011-06-15 15:21 1578public class CollectionDemo imp ... -
Java IO笔记
2011-06-15 14:23 1033public static void main(String ... -
java web项目整体异常处理机制
2011-06-08 22:04 12941在实际的j2ee项目中,系 ... -
解决带换行符的字段在web页面无法换行的问题
2011-05-31 11:46 18816在BS项目,有时候大家 ... -
[Microsoft][ODBC Microsoft Access 驱动程序] INSERT INTO 语句的语法错误的可能原因
2011-05-30 23:34 6099今天使用JDBC-ODBC桥接来操作Access数据库,发现了 ... -
java异常处理(初级)
2011-02-17 00:14 8098从学习到现在从事java开发一年多了,个人觉得对java只了解 ...
相关推荐
Java看的HTTP网络编程 网络通信编程实例 适用于Android网络编程 在测试代码中服务端我使用三种方式:S2SH 只用Struts2 Servlet 客户端就一种 只不过换个请求的URL 服务端和客户端交互使用了两种方式:XML JSON 目前...
网页资料收集 JAVA与JAVASCRIPT通信乱码问题 java javascript jsp的url提交带中文参数时后台取到的是乱码问题的解决 网页资料收集 JAVA与JAVASCRIPT通信乱码问题 java javascript jsp的url提交带中文参数时后台取到...
12.2 URL通信 12.2.1 InetAddress类 12.2.2 URL类 12.2.3 URLConnection类 12.3 TCP Socket通信 1. URL通信与Socket通信的区别 2. 使用Socket通信过程 3. Socket类 4. ServerSocket类 12.4 数据报通信
Java中Socket通信-服务端和客户端双向传输字符串实现示例代码。在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的...
第一章 JAVA入门 10 计算机语言发展史 10 机器语言 10 汇编语言 10 高级语言 10 其他高级语言 11 JAVA发展简史 12 JAVA为什么能够流行? 13 JAVA各版本的含义 13 JAVA技术体系架构 14 JAVA的特性和优势 14 JAVA应用...
flex与 java 通信常见错误: [RPC Fault faultString="Send failed" faultCode="Client.Error.MessageSend" faultDetail="Channel.Connect.Failed error NetConnection.Call.Failed: ...
在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。 socket 的典型应用就是 ...
本文档主要讲述的是Java SOCKET通信资料;Java是一种可用于进行网络编程的语言,它提供了两种功能强大的网络支持机制:URL访问网络资源的类和用Socket通讯的类,来满足不同的要求。一是URL用于访问Internet网上资源...
第2章 Java语言基础 2.1 符号集 2.2 数据类型 2.3 常量与变量 2.4 运算符与表达式 2.5 数组 第3章 流程控制结构 3.1 流程控制结构概述 3.2 选择结构 3.3 循环结构 3.4 跳转语句 第4章 面向对象程序设计 4.1 ...
11.1 处理URL内容 11.2 使用Socket通信 11.3 使用UDP通信
第1章 什么是Java程序设计语言 1 1.1 Java语言诞生背景 1 1.2 Java语言的特点 1 1.2.1 可移植性(universality) 1 1.2.2 安全性(security) 1 1.2.3 Java Virtual Machine(JVM) 2 1.2.4 面向对象的程序...
即时通信系统(Java实现)#new udp.port #Fri Jan 19 15:43:12 CST 2008 jdbc.url=jdbc\:odbc\:myqq tcp.ip.port=5638 password=2004190316 jdbc.driver=sun.jdbc.odbc.JdbcOdbcDriver udp.Port=9223 username=sa #...
第1章 Java语言 1 1.1 Java语言简介 1 1.1.1 Java语言的问世 1 1.1.2 Java语言的组成 1 1.2 开发环境的安装 3 1.3 一个简单的Java应用程序 4 1.3.1 Java应用程序示例 4 1.3.2 使用Java核心API文档 7...
在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。 socket 的典型应用就是 ...
其中,第1章介绍网络进程通信的基础类(InetAd-dress、URL、Socket);第1章介绍Java远程方法调用RMI;第3章介绍Java与CORBA不同体系的组件间的通信技术;第6章介绍JSP技术。第7-9间主要介绍Java有关的Web技术。其中,...
Java获取URL对应的资源 在JAVA中,Java.net包里面的类是进行网络编程的,其中java.net.URL类和java.net.URLConection类使编程者方便地利用URL在Internet上进行网络通信。1、认识URL(Java API doc)类 URL 代表一个...
android 当中涉及到网络编程的部分经常会用到http通信,同时android也为我么您...前面提到的HttpUrlConnection接口是java当中的通信接口,而HttpClient则是java当中自带的通信接口。这个demo就实现了这四种通信方式。
URL进行通信,可熟悉线程的简单使用,附源代码!
1、网络基本概念 2、Java与Internet 3、使用InetAddress 4、使用URL 5、Socket通信 6、数据报通信