HTTP协议在java中的运用
2016-08-06 18:57
197 查看
Http协议是一种浏览器的协议
HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。
是一种客户端发起请求服务器端响应的一个过程。
以java程序为例:java通过客户端html页面
以及ajax向tomcat服务器也就是一个发布的网站。此时客户端发起的请求,就会到达服务器端,服务器端接收到数据就会响应到客户端。进行消息的传递。
今天我开始github项目的学习了解到了另外一种方式:apach的httpclient以及其他人编写的开源http请求工具;
JSONObject r = new JSONObject();
r.put("username",
"jack");
r.put("password",
"123");
//1发送请求::
Response<String> response = post(ApiURL.GET_GROUP_LIST,
r);
//2:向其他应用程序发起请求:http://www.taotao.com/index.html并且发送的json数据
return Requests.post("http://www.taotao.com/index.html")
.addHeader("User-Agent", ApiURL.USER_AGENT)
.addHeader("Referer",
url.getReferer())
.addHeader("Origin",
url.getOrigin())
.addForm("r",
r.toJSONString())
.text();
//3:请求到达我的:服务器端spring mvc的controller进行处理:
@RequestMapping(method=RequestMethod.POST)
public ModelAndView toIndex(HttpServletRequest
request,HttpServletResponse
response){
//既然他已经将值在java程序中像浏览器那样把数据放到了表单中发送给了我,这个时候我就可以接受
//到参数进而返回给他:
System.out.println("我从其他程序中获取到的http协议中的值"+request.getParameter("username"));
System.out.println("我从其他程序中获取到的http协议中的值"+request.getParameter("password"));
//由于前台是用json格式发送的数据所以我后台接受不到了需要利用新致的架构获取json类型的数据
Map<String,Object> map=getRequestMap(request);
System.out.println("通过另外一种方式获取json数据:用户名"+map.get("username"));
System.out.println("通过另外一种方式获取json数据:密码"+map.get("password"));
ModelAndView mv=new ModelAndView("index");
这就是关于不同系统之间的调用:一个发起请求一个接收请求::http请求:
例如最新的webservice是基于soap协议的不是基于http协议的,当然一种新的技术产生首先分析他采用的是什么协议,然后这种协议如何发送以及接收数据,数据是怎么传递的。
目前比较迷惑的一点是:为什么tomcat发布的java程序可以当做服务器:servlet
struts2 spring mvc框架为什么能接收到http请求。估计看完tomcat原理以及框架原理就明白了。
一切的httpclient
以及其他框架的请求都是在模拟浏览器作为客户端在请求。
Servlet的作用是接收浏览器传给服务端的请求(request),并将服务端处理完的响应(response)返回给用户的浏览器,浏览器和服务端之间通过http协议进行沟通
基于http协议传输数据到服务器一般都是首先先:拼接http请求报文:
GET /search?hl=zh-CN&source=hp&q=domety&aq=f&oq= HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint,
application/msword, application/x-silverlight, application/x-shockwave-flash, */*
Referer: <a
href="http://www.google.cn/">http://www.google.cn/</a>
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)
Host: <a
href="http://www.google.cn">www.google.cn</a>
Connection: Keep-Alive
Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g;
NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-
FxlRugatx63JLv7CWMD6UB_O_r
2:用户通过浏览过程是浏览器根据用户的选择将相关信息按http协议报文的规范组装请求的http报文,报文通过网络传输到指定的服务器,服务器通过特定的web容器接收这个报文信息,例如:tomcat,jetty,jboss这样的web容器,web容器会将http报文解析出来,如果是用户请求,最终解析出来的报文信息会用一个request对象存储起来,服务端使用这个request做完相应的处理后,服务端程序将结果信息封装到response对象里,然后将response对象交给web容器,web容器则把这个response对象转变为http协议的报文,并将报文回传给浏览器,浏览器最后解析这个响应报文,将最终结果展示给用户。
3 用户发起请求到80端口的tomcat容器======tomcat容器将浏览器的报文头解析放入到request中,将相应处理后的信息放入到response中。但是最为开发者你改如何使用容器接收到的数据,以及拿到服务器tomcat相应的数据呢??、
第四步4:
Web容器创造了servlet接口,servlet接口就是开发人员自己实现业务逻辑的地方,程序员开发servlet就好比做填空题,而填空题的语境或者说上下文提示就是由request和response对象,但是javaEE规范里的servlet接口很简单,就三个方法init,service和destory,但是这个接口太笼统,所以规范里还提供了一个HttpServlet类,这个类根据http请求类型提供了doGet,doPost等方法,servlet接口最大的特点就是根据http协议的特点进行定义,因此做servlet开发时候如果使用者对http协议特点不是特别熟悉,都会碰到或多或少令人迷惑的问题,特别是碰到一些复杂特殊的请求时候:例如文件上传,返回特殊的文件格式到浏览器,这时候使用servlet开发就不是很方便了,servlet开发还有个问题可能大家常常被忽视,就是请求的数据的类型转化,http协议传输都是文本形式,到了web容器解析后也是文本类型,如果碰到货币,数字,日期这样的类型需要我们根据实际情况进行转化,如果页面传送的信息非常多,我们就不得不做大量类型转化,这种工作没有什么技术含量,是个体力活而且很容易导致程序错误。同时java的企业开发都是围绕javabean进行,类型转化好的数据还要封装到对应的javabean里,这种转来转去的事情对于项目开发绝对不是什么好事情,所以古老的struts1为这种问题找到了一种解决方案,就是定义了一个DTO对象(数据传输对象),专门负责做这样的事情,不过到了struts2,整个替代servlet的action本身就是一个javabean。
HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。
是一种客户端发起请求服务器端响应的一个过程。
以java程序为例:java通过客户端html页面
以及ajax向tomcat服务器也就是一个发布的网站。此时客户端发起的请求,就会到达服务器端,服务器端接收到数据就会响应到客户端。进行消息的传递。
今天我开始github项目的学习了解到了另外一种方式:apach的httpclient以及其他人编写的开源http请求工具;
JSONObject r = new JSONObject();
r.put("username",
"jack");
r.put("password",
"123");
//1发送请求::
Response<String> response = post(ApiURL.GET_GROUP_LIST,
r);
//2:向其他应用程序发起请求:http://www.taotao.com/index.html并且发送的json数据
return Requests.post("http://www.taotao.com/index.html")
.addHeader("User-Agent", ApiURL.USER_AGENT)
.addHeader("Referer",
url.getReferer())
.addHeader("Origin",
url.getOrigin())
.addForm("r",
r.toJSONString())
.text();
//3:请求到达我的:服务器端spring mvc的controller进行处理:
@RequestMapping(method=RequestMethod.POST)
public ModelAndView toIndex(HttpServletRequest
request,HttpServletResponse
response){
//既然他已经将值在java程序中像浏览器那样把数据放到了表单中发送给了我,这个时候我就可以接受
//到参数进而返回给他:
System.out.println("我从其他程序中获取到的http协议中的值"+request.getParameter("username"));
System.out.println("我从其他程序中获取到的http协议中的值"+request.getParameter("password"));
//由于前台是用json格式发送的数据所以我后台接受不到了需要利用新致的架构获取json类型的数据
Map<String,Object> map=getRequestMap(request);
System.out.println("通过另外一种方式获取json数据:用户名"+map.get("username"));
System.out.println("通过另外一种方式获取json数据:密码"+map.get("password"));
ModelAndView mv=new ModelAndView("index");
这就是关于不同系统之间的调用:一个发起请求一个接收请求::http请求:
例如最新的webservice是基于soap协议的不是基于http协议的,当然一种新的技术产生首先分析他采用的是什么协议,然后这种协议如何发送以及接收数据,数据是怎么传递的。
目前比较迷惑的一点是:为什么tomcat发布的java程序可以当做服务器:servlet
struts2 spring mvc框架为什么能接收到http请求。估计看完tomcat原理以及框架原理就明白了。
一切的httpclient
以及其他框架的请求都是在模拟浏览器作为客户端在请求。
Servlet的作用是接收浏览器传给服务端的请求(request),并将服务端处理完的响应(response)返回给用户的浏览器,浏览器和服务端之间通过http协议进行沟通
基于http协议传输数据到服务器一般都是首先先:拼接http请求报文:
GET /search?hl=zh-CN&source=hp&q=domety&aq=f&oq= HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint,
application/msword, application/x-silverlight, application/x-shockwave-flash, */*
Referer: <a
href="http://www.google.cn/">http://www.google.cn/</a>
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)
Host: <a
href="http://www.google.cn">www.google.cn</a>
Connection: Keep-Alive
Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g;
NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-
FxlRugatx63JLv7CWMD6UB_O_r
2:用户通过浏览过程是浏览器根据用户的选择将相关信息按http协议报文的规范组装请求的http报文,报文通过网络传输到指定的服务器,服务器通过特定的web容器接收这个报文信息,例如:tomcat,jetty,jboss这样的web容器,web容器会将http报文解析出来,如果是用户请求,最终解析出来的报文信息会用一个request对象存储起来,服务端使用这个request做完相应的处理后,服务端程序将结果信息封装到response对象里,然后将response对象交给web容器,web容器则把这个response对象转变为http协议的报文,并将报文回传给浏览器,浏览器最后解析这个响应报文,将最终结果展示给用户。
3 用户发起请求到80端口的tomcat容器======tomcat容器将浏览器的报文头解析放入到request中,将相应处理后的信息放入到response中。但是最为开发者你改如何使用容器接收到的数据,以及拿到服务器tomcat相应的数据呢??、
第四步4:
Web容器创造了servlet接口,servlet接口就是开发人员自己实现业务逻辑的地方,程序员开发servlet就好比做填空题,而填空题的语境或者说上下文提示就是由request和response对象,但是javaEE规范里的servlet接口很简单,就三个方法init,service和destory,但是这个接口太笼统,所以规范里还提供了一个HttpServlet类,这个类根据http请求类型提供了doGet,doPost等方法,servlet接口最大的特点就是根据http协议的特点进行定义,因此做servlet开发时候如果使用者对http协议特点不是特别熟悉,都会碰到或多或少令人迷惑的问题,特别是碰到一些复杂特殊的请求时候:例如文件上传,返回特殊的文件格式到浏览器,这时候使用servlet开发就不是很方便了,servlet开发还有个问题可能大家常常被忽视,就是请求的数据的类型转化,http协议传输都是文本形式,到了web容器解析后也是文本类型,如果碰到货币,数字,日期这样的类型需要我们根据实际情况进行转化,如果页面传送的信息非常多,我们就不得不做大量类型转化,这种工作没有什么技术含量,是个体力活而且很容易导致程序错误。同时java的企业开发都是围绕javabean进行,类型转化好的数据还要封装到对应的javabean里,这种转来转去的事情对于项目开发绝对不是什么好事情,所以古老的struts1为这种问题找到了一种解决方案,就是定义了一个DTO对象(数据传输对象),专门负责做这样的事情,不过到了struts2,整个替代servlet的action本身就是一个javabean。
相关文章推荐
- java设置HTTP协议请求(实现断点续传)
- java的http协议文件上传 (一)
- Java基础之Http协议的理解与总结
- Java实现HTTP协议的请求
- java实现HTTP协议的请求
- 突破防火墙——基于Http协议的Java隧道通讯
- [JAVA]使用Jersey处理Http协议中的Multipart
- Java基础之Http协议的理解与总结 推荐
- 11 java 王少飞-HTTP协议
- HTTP协议包 JAVA解析
- java的http协议文件上传 (二)
- Java中深度剖析Http协议
- Http协议客户端的JAVA简单实现
- 哥,如何运用java取得某一链接网址中所有的链接网址并存储?然后我再调用HttpURLConnection判断链接有效性
- Java处理http协议相关初步(三)——线程池的使用分析
- 一个下载SVN源码+http协议的java实现
- HTTP协议----(2)Java程序检测HTTP服务是否打开
- Java处理http协议相关初步(二)——httpserver
- Android学习笔记20:Http协议及Java Web编程
- 修改端口Tomcat配置https协议、以及http协议自动REDIRECT到HTTPS-java教程