Tomcat源码学习一

  这段时间工作不太忙,所以抽时间学习了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"));
        }

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

 

posted @ 2014-09-23 20:19  灵台方寸小道士  阅读(262)  评论(0编辑  收藏  举报