JAVA里面的HTTP是什么?

Python016

JAVA里面的HTTP是什么?,第1张

java本身不提供http功能。

http是一个应用层协议,底层用到了TCP。Java提供了TCP协议,但是没有http的实现。

但是,可以在网上找到开源的http client/server实现。例如apache-common-http之类的包。

1.修改web.xml文件

<!-- 模拟HTTP的调用,写的一个http接口 --><servlet><servlet-name>TestHTTPServer</servlet-name><servlet-class>com.atoz.http.SmsHTTPServer</servlet-class></servlet><servlet-mapping><servlet-name>TestHTTPServer</servlet-name><url-pattern>/httpServer</url-pattern></servlet-mapping>

2.新建SmsHTTPServer.java文件

package com.atoz.http

import java.io.IOExceptionimport java.io.PrintWriter

import javax.servlet.ServletExceptionimport javax.servlet.http.HttpServletimport javax.servlet.http.HttpServletRequestimport javax.servlet.http.HttpServletResponse

import com.atoz.action.order.SendSMSActionimport com.atoz.util.SpringContextUtil

public class SmsHTTPServer extends HttpServlet { private static final long serialVersionUID = 1L

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/htmlcharset=utf-8") request.setCharacterEncoding("utf-8") response.setCharacterEncoding("utf-8") PrintWriter out = response.getWriter() String content = request.getParameter("content") //String content = new String(request.getParameter("content").getBytes("iso-8859-1"), "utf-8") String mobiles = request.getParameter("mobiles")String businesscode = request.getParameter("businesscode")String businesstype = request.getParameter("businesstype")if (content == null || "".equals(content) || content.length() <= 0) { System.out.println("http call failed,参数content不能为空,程序退出")} else if (mobiles == null || "".equals(mobiles) || mobiles.length() <= 0) { System.out.println("http call failed,参数mobiles不能为空,程序退出")} else { /*SendSMSServiceImpl send = new SendSMSServiceImpl()*/ SendSMSAction sendSms = (SendSMSAction) SpringContextUtil.getBean("sendSMS") sendSms.sendSms(content, mobiles, businesscode, businesstype) System.out.println("---http call success---")} out.close()}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response)} }

3.调用http接口

String content = "测试" content = URLEncoder.encode(content, "utf-8") String url = "http://localhost:8180/atoz_2014/httpServer?content=" + content + "&mobiles=15301895007" URL httpTest try {httpTest = new URL(url) BufferedReader in try { in = new BufferedReader(new InputStreamReader( httpTest.openStream()))String inputLine = nullString resultMsg = null//得到返回信息的xml字符串 while ((inputLine = in.readLine()) != null) if(resultMsg != null){ resultMsg += inputLine }else { resultMsg = inputLine } in.close() } catch (MalformedURLException e) { e.printStackTrace() } } catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace() }

打字不易,望采纳,谢谢

首先,我们先看一下http的头信息到底是什么:

HTTP(HyperTextTransferProtocol) 即超文本传输协议,目前网页传输的的通用协议。HTTP协议采用了请求/响应模型,浏览器或其他客户端发出请求,服务器给与响应。就整个网络资源传输而 言,包括message-header和message-body两部分。首先传递message- header,即http header消息。http header 消息通常被分为4个部分: general header, request header, response header, entity header。但是这种分法就理解而言,感觉界限不太明确,根据日常使用,大体分为Request和Response两部分。

在通常的servlet/jsp应用中,我们只是从http的header中取得信息,如果要设置信息,需要用到HttpClient,具体的设置方法如下:

HttpResponse response = null

HttpGet get = new HttpGet(url)

get.addHeader("Accept", "text/html")

get.addHeader("Accept-Charset", "utf-8")

get.addHeader("Accept-Encoding", "gzip")

get.addHeader("Accept-Language", "en-US,en")

get.addHeader("User-Agent", "Mozilla/5.0 (X11Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.160 Safari/537.22")

response = client.execute(get)

HttpEntity entity = response.getEntity()

Header header = entity.getContentEncoding()

if (header != null)

{

HeaderElement[] codecs = header.getElements()

for (int i = 0i <codecs.lengthi++)

{

if (codecs[i].getName().equalsIgnoreCase("gzip"))

{

response.setEntity(new GzipDecompressingEntity(entity))

}

}

}

return response

其中,client为一个HttpClient的实力,创建方式如:

SchemeRegistry schemeRegistry = new SchemeRegistry()

schemeRegistry.register(new Scheme("http", 80, PlainSocketFactory.getSocketFactory()))

schemeRegistry.register(new Scheme("https", 443, SSLSocketFactory.getSocketFactory()))

PoolingClientConnectionManager cm = new PoolingClientConnectionManager(schemeRegistry)

cm.setMaxTotal(200)

cm.setDefaultMaxPerRoute(2)

HttpHost googleResearch = new HttpHost("research.google.com", 80)

HttpHost wikipediaEn = new HttpHost("en.wikipedia.org", 80)

cm.setMaxPerRoute(new HttpRoute(googleResearch), 30)

cm.setMaxPerRoute(new HttpRoute(wikipediaEn), 50)

DefaultHttpClient client = new DefaultHttpClient(cm)