目前,很多关于技术的书,都在泛泛而谈空荡的理论,兜来兜去都是外在的东西,不痛不痒。挠痒总是不对位置。使用java四年多,从当年听到师兄的激昂陈词然后下定决心到现在几乎沉浸在java的浩如烟海的技术条框、不断推成出新的java框架。工作几年,感触很多,学会了怎么使用API,学会了怎么模仿别人的代码,也厌倦了一些表面的条框理论。特别针对Java_Web开发,Servlet的使用,Struts的使用,JSP的使用,已经泛滥,但是很难揪出个所以然。因为之前一直有在关注君山的博客http://xulingbo.net/,因此在君山提出《深入分析Java Web技术内幕》,第一时间入手了,初步浏览了一下此书的结构和自己感兴趣的章节。可以感觉到作者不是简简单单的讲述一个技术或概念,分析和讲解十分深入,可以看出作者长期积累的深厚功底。
由于此次只是针对一个章节,深入Web请求过程。对于JavaWeb的请求过程,相信java程序员都能描述个大概,但是能深入分析的并不多。看书其实如写作有雷同之处,就是先看骨架,心里有个低。对于web请求的,君山是怎么样带我们一步一步深入web请求的?
1、 B/S网络架构概述
概述而已,如要深入,可以在概述的基础上进行google。
2、 如何发起一个请求
只要你上过网,你就已经发起过web请求,问题是,你懂你发起的web请求是怎么样的么?你不想通过工具看看么?或者你又想知道不同的发起方式?
3、 HTTP协议解析
作为java程序员的你,除了使用httpClient发起web请求,你能自己发起请求么? 当然,你需要了解http协议,文章中已经说明的非常清楚。
Socket socket = new Socket("127.0.0.1", "80");
OutputStream os= socket.getOutputStream();
InputStreamins = socket.getInputStream();
StringBuffer sb=new StringBuffer();
sb.append("GET /index.jsp HTTP/1.1rn");//注意rn为回车换行
sb.append("Accept-Language: zh-cnrn");
sb.append("Connection: Keep-Alivern");
sb.append("Host: 192.168.0.106rn");
sb.append("Content-Length: 37rn");
sb.append("rn");
sb.append("userName=new_andy&password=new_andyrn");
sb.append("rn");
//向Web服务器发送一个HTTP请求包
os.write(sb.toString().getBytes());
还有一点,缓存,为什么有时候你要刷新页面?为什么有时候你明明断网了,输入www.baidu.com却可以打开网页?但是再点击却不能使用? 你有想过么?浏览器的缓存其实没那么复杂,但是,你得去了解。
4、 DNS域名解析
DNS域名解析的话题实在有点大,对作者来说,想要片片俱到实在有点难,但是,作为读者的我们,可能更希望了解一下输入www.baidu.com的整个DNS域名解析过程。当然,需要了解更多,除了读这一章节之外需要更懂的搜集资料。
5、CDN工作机制
简单地说,内容分发网络(CDN)是一个经策略性部署的整体系统,包括分布式存储、负载均衡、网络请求的重定向和内容管理4个要件,而内容管理和全局的网络流量管理(Traffic Management)是CDN的核心所在。通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。
此章节我特别关注了负载均衡,其中谈到硬件的负载均衡,目前我们公司使用是F5,一主一备,速度和性能、网络丢包率方面都非常可靠。当然,硬件负载均衡非常昂贵。关于软件的负载均衡也已经有了非常多的解决方案。
还是那句话,看文章如同写文章,能有个大纲你就能了解作者的思路。君山的思路非常清晰,就是一步一步把你带入“深渊”,不在表面徘徊,同时也注意不让你太深入,把你绕进去也不好。同时,也可以引发你更多的思维方式,真的值得一看。同时你要养成好的习惯,看到某点的时候,可以去查看更多的资料,因为每个人的思考方式不一样,可能阐述同一个问题,有些人的方式你觉得深奥难以理解,但是有些人的方式你却觉得拿捏的恰到好处。特别针对难点的时候,多看看别人的想法。