import java.io.*; import java.net.URL; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.io.FileUtils; public class PdfDownloaderServlet extends HttpServlet { private static final ConcurrentHashMap downloadMap = new ConcurrentHashMap<>(); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String pdfUrl = request.getParameter("url"); if (pdfUrl == null || pdfUrl.isEmpty()) { response.sendError(HttpServletResponse.SC_BAD_REQUEST, "PDF URL is missing."); return; } String uniqueId = UUID.randomUUID().toString(); downloadMap.put(uniqueId, pdfUrl); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(" "); out.println("

Your PDF download link:

"); String downloadLink = request.getContextPath() + "/download?id=" + uniqueId; out.println("" + downloadLink + ""); out.println(""); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } public class PdfDownloadServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String uniqueId = request.getParameter("id"); String pdfUrl = PdfDownloaderServlet.downloadMap.get(uniqueId); if (pdfUrl == null) { response.sendError(HttpServletResponse.SC_NOT_FOUND, "PDF not found."); return; } InputStream in = new URL(pdfUrl).openStream(); OutputStream out = response.getOutputStream(); response.setContentType("application/pdf"); response.setHeader("Content-Disposition", "attachment; filename=\"downloaded.pdf\""); byte[] buffer = new byte[4096]; int bytesRead; while ((bytesRead = in.read(buffer)) != -1) { out.write(buffer, 0, bytesRead); } in.close(); out.flush(); } }