对web开发的个人反省
Tomcat概括:
Tomcat为一款开源的应用服务器,用如下简单的流程来表示:
至于与浏览器端的交互,我们可以写一个简单的myTomcat来盗取浏览器发送给Tomcat的信息,具体代码如下:
package tom; import java.net.*; import java.io.*; public class mytomcat { public static void main(String args[]) { try{ ServerSocket ss=new ServerSocket(8080); System.out.println("Sever startup in 1428ms"); Socket s=ss.accept(); InputStream is=s.getInputStream(); InputStreamReader isr=new InputStreamReader(is); BufferedReader br=new BufferedReader(isr); System.out.println(br.readLine()); System.out.println(br.readLine()); System.out.println(br.readLine()); System.out.println(br.readLine()); System.out.println(br.readLine()); System.out.println(br.readLine()); System.out.println(br.readLine()); System.out.println(br.readLine()); }catch(Exception e){} } }
通过对打印信息的分析,可以得出诸多结论,其中时间戳这个概念最为有意思,访问了浏览器,便会被浏览器所记忆,浏览器作为不稳定连接,每次都会以“时间戳”返回个服务器。如果我们自己写一个myIE。若是在一个网站投票,设定好将要投的字符串,然后每次修改时间戳,就会实现刷票功能。
同时我们写一个简单的myIE程序,也可以骗取Tomcat发给浏览器的信息。这些信息基本意义都是与发送信息相对,代码如下:
package myir; import java.net.*; import java.io.*; public class MyIE { public static void main(String args[]) { try { Socket s=new Socket("127.0.0.1",8080); OutputStream os =s.getOutputStream(); OutputStreamWriter osw=new OutputStreamWriter(os); PrintWriter pw=new PrintWriter(osw,true); pw.println("GET /test.html HTTP/1.1"); pw.println("Accept: */*"); pw.println("Accept-Language: zh-CN"); pw.println("User-Agent:Mozilla/4.0 (compatible; MSIE 8.0;" + "Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR" + "3.5.30729; .NET CLR 3.0.30729; .NET)"); pw.println("Accept: */*"); pw.println("Accept: */*"); } } }
这样来讲,tomcat的整个机理便没那没难以理解了。
Servelt概括:
Servlet为web后台的衍生技术,它是java中的一个类,一般来说,当我们在运行Tomcat的时候,有用户访问浏览器,servelt就调用java的calss文件。因为是运行结果,所以在页面的提前设计中,我们也不知道会得到什么样的内容,所以通常吧这样的页面叫做动态页面。
另外有个问题,如果有用户访问浏览器,servelt就得调用一次class文件,得生成对象,然后调用,然后再经过jvm删除掉,这样显然是低效的做法,因此tomcat的开发者的设计是,
之前就把servelt的类创建成对象放在内存中,这样再用户访问的时候我们就可以直接调用这个对象了。
然而,这样的方式又会衍生出两个问题,(1)如果一个系统中,servelt的数量过多,必然有一些无用的,或很少用到的,生成太多会造成冗余。(2)当多个用户同时访问servelt,一个对象是不够用的,必然得使用多线程。
针对这两个问题解决的方法是,servelt会再第一次被调用的时候创建对象,这样就很巧妙的解决了以上问题。
XML概述:
当今的数据库都是二维表存放数据的,而xml是用树形结构存放数据的,加之xml的共用性,所以说xml可作为轻量级数据库。实现两个不同数据库传输的媒介。而在非数据库领域里,xml也可以用来协调不同计算机语言,不同服务器之间的数据融合。
Xml文件负责存放数据,DTD和schema负责约束,css和xsl负责转换成表现形式,dom和sax负责解析,这些技术完整的构成了xml体系。
DOM的思想是将xml的内容形成一个对象读取到内存中,这个对象映射这xml的树形结构,可以通过调用对象的成员的方法来访问这些内容。