当前位置:首页 » 编程语言 » java的http协议

java的http协议

发布时间: 2022-12-16 18:13:08

java开发接口利用http协议传输数据

5.1请求程序代码
public void sendMessage() throws Exception {
System.out.println("调用servlet开始=================");
StringBuffer sendStr = new StringBuffer();
sendStr.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
sendStr.append("<report_data>");
sendStr.append("<request_req>953943547334</request_req>");
sendStr.append("<request_time>201204094324</request_time>");
sendStr.append("<request_param>");
sendStr.append("<query_month>201203</query_month>");
sendStr.append("</request_param>");
sendStr.append("</report_data>");

BufferedReader reader = null;

try {
String strMessage = "";
StringBuffer buffer = new StringBuffer();

// 接报文的地址
URL uploadServlet = new URL(
"http://localhost:9090/TestTransfers");

HttpURLConnection servletConnection = (HttpURLConnection) uploadServlet
.openConnection();
// 设置连接参数
servletConnection.setRequestMethod("POST");
servletConnection.setDoOutput(true);
servletConnection.setDoInput(true);
servletConnection.setAllowUserInteraction(true);

// 开启流,写入XML数据
OutputStream output = servletConnection.getOutputStream();
System.out.println("发送的报文:");
System.out.println(sendStr.toString());

output.write(sendStr.toString().getBytes());
output.flush();
output.close();

// 获取返回的数据
InputStream inputStream = servletConnection.getInputStream();
reader = new BufferedReader(new InputStreamReader(inputStream));
while ((strMessage = reader.readLine()) != null) {
buffer.append(strMessage);
}

System.out.println("接收返回值:" + buffer);

} catch (java.net.ConnectException e) {
throw new Exception();
} finally {
if (reader != null) {
reader.close();
}

}
}
5.2响应程序代码

public class TestTransfers extends HttpServlet {

private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
}

protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {

//判断请求报文是否来自代维系统的ip地址
String ip = request.getRemoteHost();

// 获取收到的报文
BufferedReader reader = request.getReader();
String line = "";
StringBuffer inputString = new StringBuffer();
while ((line = reader.readLine()) != null) {
inputString.append(line);
}

//如有必要,可以在报文中增加其他验证和加密的参数
//解析获取到的报文,根据ip地址、其他验证、加密等等来判断请求报文的服务器是否有权限

//如果请求验证合格,则根据请求的参数装配返回的报文

// 要返回的报文
StringBuffer resultBuffer = new StringBuffer();
resultBuffer.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
resultBuffer.append("<report_data>");
resultBuffer.append("<respon_req>953947334</respon_req>");
resultBuffer.append("<respon_time>2012040943</respon_time>");
resultBuffer.append("<result>");
resultBuffer.append("<id>0000</id>");
resultBuffer.append("<comment>成功</comment>");
resultBuffer.append("</result>");
resultBuffer.append("<items>");
resultBuffer.append("<item>");
resultBuffer.append("<county>长治县</county>");
resultBuffer.append("<company>铁通</company>");
resultBuffer.append("<speciality>线路</speciality>");
resultBuffer.append("<personnel>王加和</personnel>");
resultBuffer.append("<begin_time>20120301000000</begin_time>");
resultBuffer.append("<end_time>20120331235959</end_time>");
resultBuffer.append("<plan_quantity>50</plan_quantity>");
resultBuffer.append("<checkout_quantity>40</checkout_quantity>");
resultBuffer.append("<patrol_rate>0.80</patrol_rate>");
resultBuffer.append("</item>");
//......
//......
//......
//循环组装响应的报文

resultBuffer.append("</items>");
resultBuffer.append("</report_data>");

// 设置发送报文的格式
response.setContentType("text/xml");
response.setCharacterEncoding("UTF-8");

PrintWriter out = response.getWriter();
out.println(resultBuffer.toString());
out.flush();
out.close();
}
}

⑵ 北大青鸟java培训:http协议请求处理过程

随着互联网的不断发展,用户在访问互联网的时候使用的终端设备类型也在不断的变化,但是这些都是基于http协议来实现的,下面我们就简单分析一下,http发送请求的处理过程。
HTTP协议是基于TCP协议的,所以它使用面向连接的方式发送请求,通过stream二进制流的方式传给对方。
当然,到了TCP层,它会把二进制流变成一个的报文段发送给服务器。
在发送给每个报文段的时候,都需要对方有一个回应ACK,来保证报文可靠地到达了对方。
如果没有回应,那么TCP这一层会进行重新传输,直到可以到达。
同一个包有可能被传了好多次,但是HTTP这一层不需要知道这一点,因为是TCP这一层在埋头苦干。
TCP层发送每一个报文的时候,都需要加上自己的地址(即源地址)和它想要去的地方(即目标地址),将这两个信息放到IP头里面,交给IP层进行传输。
IP层需要查看目标地址和自己是否是在同一个局域网。
如果是,就发送ARP协议来请求这个目标地址对应的MAC地址,然后将源MAC和目标MAC放入MAC头,发送出去即可。
如果不在同一个局域网,就需要发送到网关,还要需要发送ARP协议,来获取网关的MAC地址,然后将源MAC和网关MAC放入MAC头,发送出去。
网关收到包发现MAC符合,取出目标IP地址,根据路由协议找到下一跳的路由器,获取下一跳路由器的MAC地址,将包发给下一跳路由器。
这样路由器一跳一跳终于到达目标的局域网。
这个时候,后一跳的路由器能够发现,目标地址就在自己的某一个出口的局域网上。
于是,在这个局域网上发送ARP,获得这个目标地址的MAC地址,将包发出去。
目标的机器发现MAC地址符合,就将包收起来;发现IP地址符合,根据IP头中协议项,知道自己上一层是TCP协议,于是解析TCP的头,里面有序列号,IT培训http://www.kmbdqn.cn/建议需要看一看这个序列包是不是我要的,如果是就放入缓存中然后返回一个ACK,如果不是就丢弃。
TCP头里面还有端口号,HTTP的服务器正在监听这个端口号。
于是,目标机器自然知道是HTTP服务器这个进程想要这个包,于是将包发给HTTP服务器。
HTTP服务器的进程看到,原来这个请求是要访问一个网页,于是就把这个网页发给客户端。

⑶ 如何使用java实现基于Http协议的大文件传输

虽然在JDK的java.net包中已经提供了访问HTTP协议的基本功能,但是对于大部分应用程序来说,JDK库本身提供的功能还不够丰富和灵活。HttpClient是ApacheJakartaCommon下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。以下是简单的post例子:Stringurl="bbslogin2.php";PostMethodpostMethod=newPostMethod(url);//填入各个表单域的值NameValuePair[]data={newNameValuePair("id","youUserName"),newNameValuePair("passwd","yourPwd")};//将表单的值放入postMethod中postMethod.setRequestBody(data);//执行postMethodintstatusCode=httpClient.executeMethod(postMethod);//HttpClient对于要求接受后继服务的请求,象POST和PUT等不能自动处理转发//301或者302if(statusCode==HttpStatus.SC_MOVED_PERMANENTLY||statusCode==HttpStatus.SC_MOVED_TEMPORARILY){//从头中取出转向的地址HeaderlocationHeader=postMethod.getResponseHeader("location");Stringlocation=null;if(locationHeader!=null){location=locationHeader.getValue();System.out.println("Thepagewasredirectedto:"+location);}else{System.err.println("Locationfieldvalueisnull.");}return;}详情见:/developerworks/cn/opensource/os-httpclient/

⑷ java 如何实现 http协议传输

Java 6 提供了一个轻量级的纯 Java Http 服务器的实现。下面是一个简单的例子:

public static void main(String[] args) throws Exception{
HttpServerProvider httpServerProvider = HttpServerProvider.provider();
InetSocketAddress addr = new InetSocketAddress(7778);
HttpServer httpServer = httpServerProvider.createHttpServer(addr, 1);
httpServer.createContext("/myapp/", new MyHttpHandler());
httpServer.setExecutor(null);
httpServer.start();
System.out.println("started");
}

static class MyHttpHandler implements HttpHandler{
public void handle(HttpExchange httpExchange) throws IOException {
String response = "Hello world!";
httpExchange.sendResponseHeaders(200, response.length());
OutputStream out = httpExchange.getResponseBody();
out.write(response.getBytes());
out.close();
}
}

然后,在浏览器中访问 http://localhost:7778/myapp/

⑸ java使用Http协议发请求报文

1.java.net.Socket 中有一个接口叫 PackageReceiver 你创建一个类继承自PackageReceiver
2.自己写一个类ConnectToHost 定义一些常量如
public ConnectToHost()
{
port = 0;
keepAlive = false;
lastCommTime = 0;
connectionCtrl = false;
maxConnection = 10;
connections = new ArrayList();
soTimeOut = 0;
inUsedConnection = 0;
alive = true;
al = true;
reconnectImmediately = false;
pollingWeight = 1;
}
3.写一个方法用来获取本地要发送的数据,如
private static String getRequestData(String name) throws IOException {
// TODO Auto-generated method stub
File testReq = new File("E:/virturlSend/", name);

// 输入流
FileInputStream infile = null;
InputStreamReader isr = null;
BufferedReader in = null;
String strLine = "";
StringBuffer strTotalLine = new StringBuffer();
try {
infile = new FileInputStream(testReq); // 以流的方式读配置文件
isr = new InputStreamReader(infile);
in = new BufferedReader(isr);

for (int iLine = 1; (strLine = in.readLine()) != null; iLine++) { // 从上传文件中每次读一行
// System.out.println(strLine.getBytes());
strTotalLine.append(strLine);
}
} catch (Exception ee) {

} finally {
in.close();
isr.close();
infile.close();
}
return strTotalLine.toString();
// return "baoyy";
}
4.设置主机信息 如
ConnectToHost connectToHost = new ConnectToHost();
//connectToHost.setHostAddr("20.*2.*.35");
//connectToHost.setPort(27098);
connectToHost.setHostAddr("127.*.*.1");
connectToHost.setPort(6789);
connectToHost.setMaxConnection(20);
5.发送数据
service.addConnectToHost(connectToHost);

以上代码不是全部 仅提供大体思路和构架 不知道能不能帮到您

⑹ java的TCP和HTTP的区别和联系是什么

TCP是传输层协议,定义数据传输和连接方式的规范。握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。

HTTP 超文本传送协议(Hypertext Transfer Protocol )是应用层协议,定义的是传输数据的内容的规范。

HTTP协议中的数据是利用TCP协议传输的,特点是客户端发送的每次请求都需要服务器回送响应,它是TCP协议族中的一种,默认使用 TCP 80端口。

好比网络是路,TCP是跑在路上的车,HTTP是车上的人。每个网站内容不一样,就像车上的每个人有不同的故事一样。

热点内容
androidhandler机制 发布:2025-01-24 16:41:10 浏览:935
安卓系统如何下载aov 发布:2025-01-24 16:29:53 浏览:572
iptables允许ip访问 发布:2025-01-24 16:19:58 浏览:931
安卓80如何识别存储卡权限 发布:2025-01-24 16:19:54 浏览:231
存储介质价格 发布:2025-01-24 16:19:18 浏览:150
删除多个表sql 发布:2025-01-24 16:10:57 浏览:595
安卓设备版本哪里看 发布:2025-01-24 16:06:00 浏览:549
编译错误参数不可选 发布:2025-01-24 16:00:51 浏览:289
仓储软件用什么服务器 发布:2025-01-24 16:00:03 浏览:626
android协议分析 发布:2025-01-24 15:58:41 浏览:320