Приложение не генерирует отчет на сервере

1

У меня есть отчет JasperReports, созданный с помощью веб-приложения Java. Приложение, расположенное на моей странице localhost: 8084/app/pages.jsp (где находится форма, отправляющая на сервлет), генерирует отчет отлично, возникла проблема, когда при создании отчета служил сайт site.com/app/pages.jsp получил этот результат, кажется, что сервер не интерпретирует этот файл. pdf или ее поколение.

это Linux-сервер, на котором работает apache

Изображение 174551

  • 3
    ваш сервер не выводил соответствующий заголовок Content-type, поэтому ваша среда отображения (браузер?) рассматривает ваш pdf как text / plain.
  • 0
    правильно! в Firefox он имеет такой результат изображения, а в IE он загружает файл *. текст. Я должен установить что-то на сервере или изменить какие-либо разрешения? Спасибо!
Показать ещё 2 комментария
Теги:
servlets
jasper-reports

1 ответ

1
Лучший ответ

Это происходит из старого проекта, вы добавляете response.setContentType("application/pdf"); и записывать как вывод байтов файла.

public class ReportSintesiServlet extends HttpServlet {
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("application/pdf");
        Lookup<IReportGeneration> l = new Lookup<IReportGeneration>(true, IReportGeneration.class);
        IReportGeneration g = null;
        try {
            g = l.lookup();
        } catch (Exception ex) {
            return;
        }
        if (g != null) {
            String param = request.getParameter("idc");
            System.out.println("genero il report per idc " + param);
            Integer idc = Integer.parseInt(param);
            byte[] doc = (byte[]) g.generaSintesiAccordoIniziale(idc);
            if (doc != null) {
                FilePathManager fpm = new FilePathManager();
                String pathtofile = fpm.pathToNuovaSintesi(idc);
                File temp = new File(pathtofile);
                FileUtil.writeBytesToFile(temp, doc);
                response.addHeader("Content-Disposition", "attachment; filename=" + temp.getName());
                response.setContentLength((int) temp.length());
                FileInputStream fileInputStream = new FileInputStream(temp);
                OutputStream responseOutputStream = response.getOutputStream();
                int bytes;
                while ((bytes = fileInputStream.read()) != -1) {
                    responseOutputStream.write(bytes);
                }
            }
        }
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    public String getServletInfo() {
        return "Short description";
    }
}

PS: Я удалил некоторые фрагменты кода, которые в этом случае не помогли, так как вы можете видеть, что вы пропустили всю часть логики для управления ошибками.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню