Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Glassfish 4.0集群+mod_jk。Servlet流式内容问题_Java_Jakarta Ee_Servlets_Glassfish_Mod Jk - Fatal编程技术网

Java Glassfish 4.0集群+mod_jk。Servlet流式内容问题

Java Glassfish 4.0集群+mod_jk。Servlet流式内容问题,java,jakarta-ee,servlets,glassfish,mod-jk,Java,Jakarta Ee,Servlets,Glassfish,Mod Jk,我正在尝试使用Apache2.2和mod_jk建立一个包含2个实例的glassfish 4.0集群,以实现负载平衡。除了用于提供图像的servlet之外,其他一切都正常工作 当我在一个实例上访问这个servlet时,我可以毫无问题地获得图像内容,见下图 不幸的是,由于我的名声不好,我无法发布这张图片 但当我通过负载平衡访问这个servlet时,我会在内容上获得垃圾数据,如下图所示 同样,我无法发布图像,但基本上图像的顶部是可以的,但是从中间到底部的图像部分混合了颜色 我注意到,这个问题不会发生在

我正在尝试使用Apache2.2和mod_jk建立一个包含2个实例的glassfish 4.0集群,以实现负载平衡。除了用于提供图像的servlet之外,其他一切都正常工作

当我在一个实例上访问这个servlet时,我可以毫无问题地获得图像内容,见下图

不幸的是,由于我的名声不好,我无法发布这张图片

但当我通过负载平衡访问这个servlet时,我会在内容上获得垃圾数据,如下图所示

同样,我无法发布图像,但基本上图像的顶部是可以的,但是从中间到底部的图像部分混合了颜色

我注意到,这个问题不会发生在小图像上——高达10KB——而只会发生在大于10KB的图像上

我还注意到,另一个提供文本内容的servlet也有类似的问题,但在这种情况下,servlet只发送文件的一部分,而请求需要1.5分钟才能得到32.6KB的响应

以下是负责为图像内容提供服务的servlet代码部分:

try{
    // Open streams.
    input = new BufferedInputStream(new FileInputStream(fimage),
    DEFAULT_BUFFER_SIZE);
    output = new BufferedOutputStream(response.getOutputStream(),
        DEFAULT_BUFFER_SIZE);

    // Write file contents to response.
    byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
    int length;
    while ((length = input.read(buffer)) > 0) {
        output.write(buffer, 0, length);
    }

    output.flush();
    }

    } catch (Exception e) {
        // Tratamento de erros
    logger.log(Level.SEVERE, "Falha ao servir imagem", e);
    try {
        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
    return;
    } catch (IOException ex) {
        logger.log(Level.SEVERE, "Falha ao responder erro", ex);
    }
} finally {
    // Close stream
        if (input != null)
        try {
        input.close();
        } catch (IOException e) {
        logger.log(Level.SEVERE, "Falha ao fechar input", e);
        }
    }
以下是httpd.conf上的条目

LoadModule jk_module modules/mod_jk.so

JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel debug
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"

#HTTPS Configuration
JkExtractSSL On
JkHTTPSIndicator HTTPS
JkSESSIONIndicator SSL_SESSION_ID
JkCIPHERIndicator SSL_CIPHER
JkCERTSIndicator SSL_CLIENT_CERT

JkMount /olhameubebe/* loadbalancer

Listen 443
<VirtualHost _default_:443> 
    ServerAdmin some@email.com 
    DocumentRoot "Your Root folder location" 
    ServerName www.domain.com:443 
    ServerAlias domain.com:443 
    ErrorLog "logs/anyFile-error.log" 
    CustomLog "logs/anyFile-access.log" common 
    SSLEngine on
    SSLCertificateFile "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/bin/server.crt"
    SSLCertificateKeyFile "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/bin/server.key" 
    JkMount /olhameubebe/* loadbalancer
</VirtualHost>
我正在windows上进行此测试,在日志文件中未看到任何错误/警告

有人知道我做错了什么吗

提前谢谢

有人知道出了什么问题吗

*编辑:


经过大量尝试和实验,在我从响应头中删除内容长度后,问题似乎得到了解决

所以我不得不从servlet的代码中注释这一行:

//response.setHeader("Content-Length", String.valueOf(fimage.length()));
//response.setHeader("Content-Length", String.valueOf(fimage.length()));

经过大量尝试和实验,在我从响应头中删除内容长度后,问题似乎得到了解决

所以我不得不从servlet的代码中注释这一行:

//response.setHeader("Content-Length", String.valueOf(fimage.length()));
//response.setHeader("Content-Length", String.valueOf(fimage.length()));