|
楼主 |
发表于 2014-12-24 09:43
|
显示全部楼层
本帖最后由 kevinzhang19701 于 2014-12-24 18:29 编辑
5. 技术要点
5.1 花生壳解析
孩纸们都知道DNS的作用,简单滴说就是将域名字符串转换成IP地址。各级DNS都有配对表,自己找不到配对的,就向上级DNS询问,直到找到或者返回失败,最后更新自己的配对表(动态的或者静态的)。如果用Whois查询我购买的域名的话,就可以看到其实这个域名并不属于我,而是属于Oray公司,再由Oray公司租给我使用。DNS能够正确找到并翻译成IP地址,不过,这个IP是Oray的,而不是我光猫上的那个。
花生壳客户端安装在我的笔记本电脑上后,会产生一个指纹。客户端用这个指纹向其服务器汇报自己的位置信息(包含了光猫的动态IP地址、端口占用信息)。当外网访客访问我购买的域名的时候,DNS解析到Oray的IP地址,由服务器查到我光猫的位置,然后转发所有的数据包。那么孩纸们会问,80端口被封了,数据包怎么穿透呢?道理很简单,根本没用80端口。
花生壳客户端会随机试探高段端口号,找到一个未被光猫封掉的,就向服务器汇报这个端口号,让所有转发进来的数据包通过这个端口号进来。数据包返回,按照同样的路径。
如此这般,外网访客访问域名的时候(默认80端口),其实所有数据包是转发到我的光猫IP地址的某个大数字端口上。孩纸们,现在知道天朝网络慢的原因了吧。其实,这也是冰山一角,待以后我给你们解释我们伟大的放火长城的时候,再深入讨论(你没看错,是放火,天朝网民火很大)。
5.2 Tomcat & Java
WIKIPEDIA是这么定义的:Apache Tomcat (or simply Tomcat, formerly also Jakarta Tomcat) is an open source web server and servlet container developed by the Apache Software Foundation (ASF). Tomcat implements several Java EE specifications including Java Servlet, JavaServer Pages (JSP), Java EL, and WebSocket, and provides a "pure Java" HTTP web server environment for Java code to run in.
所以,我们选用Tomcat不仅仅因为她是一个性能不错的Web Server和Servlet container,还在于她遵循J2EE规范,是孩纸们未来步入J2EE的一个入口,而J2EE的跨平台特性是目前.Net无法比拟的。如果未来服务器访问频繁的话,可以在Tomcat前面装上Apache,让静态和动态内容分开处理。
在安装Tomcat前,需要先安装Java环境。同样道理,选用最新版本的Java SE 8u25。砖家们一直对Java技术褒贬不一,不过这些并不妨碍Java成为伟大的跨平台开发技术(微软的C#或多或少都在东施效颦)。物联网作为一个热词,最近一二年在孩纸们间流行,其实在20年前Sun基于Java的Jini技术就已经构想了万物相连的远景,只是Sun太过贪婪,此是后话,暂且按下不表。
Tomcat各版本的目录和文件结构都相同,这是向下兼容的好处。更新Tomcat后,只要把文件拷贝过来就行。注意下列几个目录与文件:
(a) conf\server.xml,这个是配置文件,里面重要的是定义了Web server的端口。Tomcat默认8080,本项目修改成80(其他端口也可以,不过尽量选用高段端口,避开常用的)。
(b) webapps\ROOT,这个目录是网页的老家。这里的index.html是默认情况下的首页文件。
(c) webapps\ROOT\WEB-INF,这个目录下面都是项目文件,重要的有web.xml、classes目录和lib目录。web.xml文件里面主要涉及各个servlet程序的配置。classes目录里面保存的是我们的3个servlet编译好的class文件。lib里面存放着的是MySQL的Connector/J的jar接口文件,没有她servlet就没法与MySQL数据沟通。
(d) bin\startup.sh和shutdown.sh(对应Windows系统下startup.bat和shutdown.bat)是启动和关闭Tomcat的两个shell文件。
5.3 Servlet/JSP
WIKIPEDIA如此说:Technically speaking, a "servlet" is a Java class in Java EE that conforms to the Java Servlet API, a standard for implementing Java classes which respond to requests. Servlets could in principle communicate over any client–server protocol, but they are most often used with the HTTP protocol. Thus "servlet" is often used as shorthand for "HTTP servlet". Thus, a software developer may use a servlet to add dynamic content to a web server using the Java platform. The generated content is commonly HTML, but may be other data such as XML. Servlets can maintain state in session variables across many server transactions by using HTTP cookies, or URL rewriting.
Architecturally, JSP may be viewed as a high-level abstraction of Java servlets. JSPs are translated into servlets at runtime; each JSP servlet is cached and re-used until the original JSP is modified.
上述解释了servlet与JSP的区别和关系,本项目没有使用JSP,是因为在显示这部分我们着力不多。无论是来自于外网的访客,还是来自于内网的W5100,他们都向Web server提交HTTP请求,而接管这些请求的是Tomcat。Tomcat将普通的HTML请求,直接返回给客户端,如果遇到servlet调用,那么直接将控制权交给servlet。这种客户端使用Browser(浏览器),服务器端Web Server的运作结构,被称为Browser/Server模式(简称B/S)。这种模式的好处是,我们对客户端的维护将降到极点(只要有浏览器就能用我们的项目),开发人员将更多滴关注服务器端,避免被客户端干扰,也减少了客户端维护的成本。当然一剑双刃,B/S模式严重依赖服务器的数据,且所有计算均在服务器端,服务器一旦挂掉,所有客户端均死翘翘了。
所有的servlet均是Java程序,本项目使用NetBeans这个IDE来开发。用IDE的好处,就像使用DFRobot I/O板一样,可以偷懒一点,让我们更多滴关注项目逻辑本身,快速切入主题,而不要被其他东西干扰。Servlet的介绍可以写一本超过1000页的教科书,这里不打算做过多讨论。幸运的是IDE里面有现成的servlet模板,我们将自己的逻辑代码嵌入即可。另一个高大上的IDE是Eclipse,正如她的名字那样是针对Sun的,哈哈哈,查查字典就知道了。
由于我们使用servlet去与数据库MySQL打交道,以完成数据的查询和写入的工作,因此孩纸们要快速学习一点SQL语言。
5.4 SQL
估计看到这里,孩纸们是不是感觉头晕了吧。要的就是这个恶心效果,哈哈哈,不要小看了一个小小的采集温度和点亮4个LED的项目。老夫一直是小题大做滴大湿啊,跟着老夫定然让你头晕目眩,自我感觉极端爆表。
SQL的定义: Structured Query Language is a special-purpose programming language designed for managing data held in a relational database management system(RDBMS), or for stream processing in a relational data stream management system(RDSMS).
|
|