Не удалось создать несколько документов, используя ServletOutputStream в Java [duplicate]

Порядок, в котором указаны взаимозависимые связанные библиотеки, неверен.

Порядок, в котором связаны библиотеки, имеет значение, если библиотеки зависят друг от друга. В общем случае, если библиотека A зависит от библиотеки B, тогда libA ДОЛЖЕН появляться перед libB в флагах компоновщика.

Например:

// B.h
#ifndef B_H
#define B_H

struct B {
    B(int);
    int x;
};

#endif

// B.cpp
#include "B.h"
B::B(int xx) : x(xx) {}

// A.h
#include "B.h"

struct A {
    A(int x);
    B b;
};

// A.cpp
#include "A.h"

A::A(int x) : b(x) {}

// main.cpp
#include "A.h"

int main() {
    A a(5);
    return 0;
};

Создайте библиотеки:

$ g++ -c A.cpp
$ g++ -c B.cpp
$ ar rvs libA.a A.o 
ar: creating libA.a
a - A.o
$ ar rvs libB.a B.o 
ar: creating libB.a
a - B.o

Скомпилируйте:

$ g++ main.cpp -L. -lB -lA
./libA.a(A.o): In function `A::A(int)':
A.cpp:(.text+0x1c): undefined reference to `B::B(int)'
collect2: error: ld returned 1 exit status
$ g++ main.cpp -L. -lA -lB
$ ./a.out

Чтобы повторить снова, порядок имеет значение!

1
задан Chen Xiaoshen 18 October 2013 в 05:13
поделиться

3 ответа

Хотя ServletResponse не предназначен для этого, мы могли бы программно настроить его для отправки нескольких файлов, которые, по-видимому, обрабатывают все клиентские браузеры, кроме IE. Ниже приведен фрагмент кода кода.

response.setContentType("multipart/x-mixed-replace;boundary=END");
ServletOutputStream out = response.getOutputStream();
out.println("--END");
for(File f:files){
      FileInputStream fis = new FileInputStream(file);
      BufferedInputStream fif = new BufferedInputStream(fis);
      int data = 0;
      out.println("--END");
      while ((data = fif.read()) != -1) {
        out.write(data);
      }
      fif.close();
      out.println("--END");
      out.flush();
}
out.flush();
out.println("--END--");
out.close();

Это не будет работать в браузерах IE. N.B - Try Catch блоки не включены

3
ответ дан aksappy 27 August 2018 в 22:30
поделиться

Код, разработанный Джейсоном Хантером для обработки запросов и ответов сервлетов, имеющих несколько частей, был дефактоном с годами. Вы можете найти его на servlets.com

1
ответ дан Hussain Pirosha 27 August 2018 в 22:30
поделиться

Нет, вы не можете этого сделать. Причина в том, что всякий раз, когда вы хотите отправлять какие-либо данные в запрос, вы используете пар, доступный по запросу, и извлекаете эти данные с помощью request.getRequestParameter("streamParamName").getInputStream(), также обратите внимание, если вы уже потребляли этот поток, как только вы не сможете его получить снова ,

Пример, упомянутый выше, - это настройка, которую google также использует при отправке многостраничной электронной почты с несколькими вложениями. Чтобы достичь этого, они определяют границы для каждого приложения, и клиент должен заботиться об этих границах при получении этой информации и ее рендеринга.

0
ответ дан Rupesh 27 August 2018 в 22:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: