对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的树形结构,可以通过调用对象的成员的方法来访问这些内容。

posted @ 2018-04-15 18:20  masking_timeflows  阅读(135)  评论(0编辑  收藏  举报