免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1074 | 回复: 0
打印 上一主题 下一主题

TOMCAT 出现 expired ... 的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-02 01:19 |只看该作者 |倒序浏览
今天解决的一个问题, 本来以为是 TOMCAT 的问题, 后来证明是我自己学习不深入.
我的程序没执行完,不知什么缘故就被 TOMCAT 管理线程回收了.在一些特定条件下问题重现率100%.
一开始认为是 TOMCAT 的问题,后来经过一步步地调试,终于调出来了我程序的一个BUG.下面晒一下我的代码:
下面是有错误的代码:

    public String makeResultItemOutput(String output)
    {
         Pattern fixp = Pattern.compile("\\[FIX:(\\d+)\\]");
        if (output == null)
            return null;
        String str = output;
        Matcher m = fixp.matcher(str);
        while (m.find())
        {
            String num = m.group(1);
            num = " + num
                    + "');\">点此查看";
            str = m.replaceFirst(num);
        }
        return str;
    }
原意是想把一个字符串中符合正规条件的子串全换成一个链接, 链接地址是根据这个字串中的一个字段来决定的. 程序的执行结果可能有些经验的人会知道, 因为 matcher 中的字符始终没变,都是 str. 所以每次都能找到. 然后每次都替换, 最后的结果可想而知了, 死循环. TOMCAT 查觉到了, 所以就在后台报错. 实际也没杀掉, 只是因为死循环, CPU 占 100%, 没响应, 以为是被 KILL 了.
我也有一点比较奇怪: 当这个字符串只能匹配一次正则时, 程序运行没有问题. 但有两个以上时会死循环.
下面贴上正确代码:
    public String makeResultItemOutput(String output)
    {
        Pattern fixp = Pattern.compile("\\[FIX:(\\d+)\\]");
        if (output == null)
            return null;
        String str = output;
        while (true)
        {
            Matcher m = fixp.matcher(str);
            if (m.find())
            {
                String num = m.group(1);
                // System.out.println(num);
                num = "doOpen('/diagnose/getFixNumberContent.do?fixNumber=" + num
                        + "');\">点此查看";
                str = m.replaceFirst(num);
                // System.out.println(str);
            }
            else
                return str;
        }
    }
把 fixp.matcher() 放到循环里了, 然后每次都会重新 match 一下新生成的字符串.


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/10921/showart_514483.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP