Tomcat源码学习一

系统 1801 0

  这段时间工作不太忙,所以抽时间学习了TOMCAT,

  TOMCAT实际就是负责保持TCP连接传递到部署的项目中。浏览器实质就是TCP发送器。将用户的请求封装成TCP发送请求。当然格式是双方协定的。使用的socket连接。请求内容为空格和换行符分割。看了下源码解析请求头,觉得写得好精致啊。讲请求转换为byte数组。然后转化为char值直接比较他们的值大小。如果和换行符或者空格char相同则提出。

      
        int
      
          ix = 0
      
        ;

            
      
      
        int
      
          ox = 0
      
        ;

            String key 
      
      = 
      
        null
      
      
        ;

            String value 
      
      = 
      
        null
      
      
        ;

            
      
      
        while
      
       (ix <
      
         data.length) {

                
      
      
        byte
      
       c = data[ix++
      
        ];

                
      
      
        switch
      
       ((
      
        char
      
      
        ) c) {

                
      
      
        case
      
       '&'
      
        :

                    value 
      
      = 
      
        new
      
       String(data, 0
      
        , ox, encoding);

                    
      
      
        if
      
       (key != 
      
        null
      
      
        ) {

                        key 
      
      = 
      
        null
      
      
        ;

                    }

                    ox 
      
      = 0
      
        ;

                    
      
      
        break
      
      
        ;

                
      
      
        case
      
       '='
      
        :

                    key 
      
      = 
      
        new
      
       String(data, 0
      
        , ox, encoding);

                    ox 
      
      = 0
      
        ;

                    
      
      
        break
      
      
        ;

                
      
      
        case
      
       '+'
      
        :

                    data[ox
      
      ++] = (
      
        byte
      
      )' '
      
        ;

                    
      
      
        break
      
      
        ;

                
      
      
        case
      
       '%'
      
        :

                    data[ox
      
      ++] = (
      
        byte
      
      )((convertHexDigit(data[ix++]) << 4
      
        )

                                    
      
      + convertHexDigit(data[ix++
      
        ]));

                    
      
      
        break
      
      
        ;

                
      
      
        default
      
      
        :

                    data[ox
      
      ++] =
      
         c;

                }

            }

            
      
      
        //
      
      
        The last value does not end in '&'.  So save it now.
      
      
        if
      
       (key != 
      
        null
      
      
        ) {

                value 
      
      = 
      
        new
      
       String(data, 0, ox, encoding);        
    

 

  解析请求资源。根据资源名获取类名。然后导入class文件URLLoader。然后执行方法。提起要继承HttpServlet 执行service()方法。

  还有一个好东西就是它的一场信息管理ResourceBundle读取一场信息配置文件根据每个包构成一个单例 放入一个静态HashMap中使用的使用通过包名获取。非常灵活。而ResourceBundle可以自动的获取服务器运行环境获取相应的配置文件。比如获取LocalStrings文件,如果在中国地区,包下面还有一个LocalStrings_zh_CN的配置文件,将会优先读取。

      
        /**
      
      
         异常信息如何使用

     * The string manager for this package.

     
      
      
        */
      
      
        private
      
       StringManager sm =
      
        

        StringManager.getManager(Constants.Package);



        
      
      
        /**
      
      
        

     * 用于加载 properties 文件 国际化文件

     * 当在中文操作系统下,如果myres_zh_CN.properties、myres.properties两个文件都存在

     * ,则优先会使用myres_zh_CN

     * .properties,当myres_zh_CN.properties不存在时候,会使用默认的myres.properties。

     * 

     * 没有提供语言和地区的资源文件是系统默认的资源文件。

     * 资源文件都必须是ISO-8859-1编码,因此,对于所有非西方语系的处理,都必须先将之转换为Java Unicode

     * Escape格式。转换方法是通过JDK自带的工具native2ascii.

     
      
      
        */
      
      
        private
      
      
         ResourceBundle bundle;

     
      
      
        private
      
      
         Demo1(String packageName) {

            String bundleName 
      
      = packageName + ".LocalStrings"
      
        ;

            bundle 
      
      =
      
         ResourceBundle.getBundle(bundleName);

        }

    
      
      
        public
      
      
        static
      
      
        void
      
      
         main(String[] args) {

        Demo1 c 
      
      = 
      
        new
      
       Demo1("com.util"
      
        );

        System.out.println(c.bundle.getString(
      
      "Hello"
      
        ));

        }
      
    

  看的比较马虎。有新的在记录吧。

 

Tomcat源码学习一


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论