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"));

        }

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

 

你可能感兴趣的:(tomcat)