记一个非常有意思的项目

机缘巧合之下,和朋友聊天的时候,知道他们那有一个基于 Java 的 web 系统。于是,作为一个 Java 功底还算过得去的人,我觉得,应该可以去玩玩。 因为,作为一个 Javaer,说到 Java web 的时候,无外乎 Spring,Struts,Hibernate,或者 MyBatis。于是乎,作为复习,我拿过来看了下。不过第一眼确实是非常惊讶。 因为朋友那边没能拿到相关的文档,没有部署方式和设计方式,所以也是一头雾水。各位可以看下他的目录结构: ├── b2b-api-base ├── b2b-api-content ├── b2b-api-customer ├── b2b-api-lucene ├── b2b-api-mail ├── b2b-api-payment ├── b2b-api-product ├── b2b-api-... [阅读全文]

关于容器的新的看法

关于Java中的容器,大家因该第一个想到的是Tomcat,毕竟这应该是学习Java中的第一个容器(如果玩Java Web的话)。在经历了第一个项目和第二个项目之后,我才开始体会到容器的 必要性。 在此之前,我之前的所有的Java程序都是指定main函数的runnable jar package。这样做确实简单。而且快捷。但是有一个很明显的缺点,就是你无法控制他的生命周期。举一个很 简单的例子,如果程序挂了,除了运气比较好去top或者ps一把发现没有这个进程之外,貌似没有好的办法了(此处不考虑心跳协议)。还有一点,程序的可装配性比较差。需要在 main函数里指定加载的顺序。凡此种种,都是因为我们将程序直接泡在了jvm上,而jvm并没有在java层面上给我们过多的api接口。所以,为了改变这个状况,我们在jvm上又加了一个 容器。 所以,简单地说,容器的作用就是一个脸盆,程序就像是一个一个土豆... [阅读全文]

第一个任务 -- 店铺爬虫

关于这个项目,首先需求比较简单.或者说单一吧.唯一要做的就是将PHP传来的任务给做完.没有多余的爬取,只需要爬取一个页面上的商品描述和商店的描述.唯一好玩的一点就是需要在一周时间内 爬取180万url左右的数据.同时还要考虑对面的防刷设置.分配给的测试资源有两台16核32G的服务器. 很显然.爬虫的关键在于VPS的分配,因为一个ip访问某个网站的频率有限制.在有限的时间,要想爬取更多的网页,就需要多个vps,要多少呢.理论上,服务器的出口带宽为1000Mb,购买的VPS带宽为2Mb, 所以,考虑充分利用带宽,则需要500个.但事实上,我们的需求并没有如此之高.在实际测试中,发现最终的瓶颈在cpu上,频繁的字符串匹配,导致了cpu的飙涨.因为考虑到之后的维护,我用了整页面的 正则进行匹配,这样,之后的修改会方便很多.所以代码里会有如下的正则表达式: 看上去很... [阅读全文]

Tomcat接受HTTP请求详解

在前一篇文章中我们提到了Tomcat的启动的详细过程,当然,这只是很简单的通过代码的解释, 在Tomcat的启动的过程中还用了生命周期的方式去管理组件,这一部分内容可以参考这篇博客: I'm Tiger - Tomcat组件生命周期管理 代码详解 接下来,我来详细的分析下Tomcat的处理HTTP请求的详细过程。首先我们需要知道Tomcat中有一个叫做Connector的接口,一开始 我也以为这是接受HTTP请求的地方,因为HTTP实质上还是一个TCP数据包,所以,在不使用NIO的情况下,会建立一个Socket套接字 来进行数据的交换,所以,一开始我的方向是在Connector和他的子类中寻找,不过,很快就放弃了,因为他的接口只提供Request 和Response的访问接口,所以,我觉得因该有个地方将这个操作封装了。于是乎,我开始下断点分析。于是我... [阅读全文]

Some Confusion about the source code of Tomcat

Some day before, I began to read the source code of the tomcat First, the server starts from the main method in the org.apache.catalina.startup.BootStrap, but when I go into the code bootstrap.init(), and I was confused by the following code.Like: Just for easy to debug the tomcat, I change the code like this: The code can still work. And in th... [阅读全文]