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

  • 相关阅读:
    CSS 总结
    C#实现网页表单自动提交
    解析XML【C#】
    用正则表达式替换指定标签中的内容
    C#实现在winfrom程序中下载文件
    DataGridView添加复选框并向其中绑定值
    二进制数与十六进制数之间如何互相转换
    MySql数据库表类型MYISAM与InnoDB的区别
    php引用(&)变量引用,函数引用,对象引用和参数引用用法
    从git中删除 .idea 目录
  • 原文地址:https://www.cnblogs.com/masking-timeflows/p/8848693.html
Copyright © 2011-2022 走看看