как с этим бороться ?
в web-приложении на tomcat8 вызывается сервлет (по https) - сгенерировать PDF и вернуть файл в коде это выглядит примерно так
protected void processRequest(HttpServletRequest request, HttpServletResponse response) {
try {
String realPath = getServletContext().getRealPath("/");
LOG.info("Request PDF");
Config config = new Config(request, realPath);
PdfFile pdfFile = new PdfFile(config);
String fileName = new URI(null, null, pdfFile.getFileName(), null).toASCIIString();
String content = String.format("attachment;filename*=%s''%s", Factory.DEFAULT_CHARSET, fileName);
response.setHeader("Content-Disposition", content);
response.setContentType("application/pdf");
response.getOutputStream().write(pdfFile.getBytes());
LOG.info("{} done", pdfFile);
} catch (Exception e) {
LOG.error("Request: {}", request.getQueryString(), e);
returnError(response);
}
}
на стороне сервера настройки https (как мне кажется сделаны по умолчанию)
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="C:/keystore" keystorePass="password" keystoreType="JKS" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
</Host>
</Engine>
</Service>
</Server>
в web.xml описаны только сервлеты с маппингами
периодически получаем ошибку, она хаотична - может долгое время все работать, а затем она появляется, от данных, на которых генерится и получается файл, ошибка не зависит - то есть, то нет.. на стороне пользователя это выглядит как "файл качается" и, где-то в процессе подвисает..
java.net.SocketTimeoutException
org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:356)
org.apache.catalina.connector.OutputBuffer.appendByteArray(OutputBuffer.java:785)
org.apache.catalina.connector.OutputBuffer.append(OutputBuffer.java:714)
org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:391)
org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:369)
org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:96)
org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89)
com.gosniias.server.pdf.engine.PdfWorker.makePdf(PdfWorker.java:37)
com.gosniias.server.pdf.engine.Factory.makePdf(Factory.java:33)
com.gosniias.server.pdf.MakePdf.processRequest(MakePdf.java:66)
com.gosniias.server.pdf.MakePdf.doGet(MakePdf.java:36)
javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478)
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Unknown Source)]
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости