Ich schrieb Code, der Excel-Datei mit REST JAX-RS generieren und ich bestätigte, dass die generierte Excel-Datei im GlassFish-Server-Verzeichnis ist.Wie setzt man den Antwort-Header in JAX-RS so, dass der Benutzer das Popup-Fenster zum Herunterladen für Excel sieht?
Aber mein Ziel ist, wenn Benutzer auf die Schaltfläche klicken (die Excel .xls generieren), ich möchte Download-Popup anzeigen Benutzer fragen, ob die .xls-Datei zu speichern oder zu öffnen, genau wie alle anderen Web-Dienste für das Herunterladen von Art der Dateien.
Nach meiner Suche, der Schritt ist:
erzeugen Excel .xls (DONE)
schreiben die Excel
in JAX-RS-Datei, setzen Antwort zu streamen Header zu etwas wie,
String fileName = "Blah_Report.xls"; response.setHeader ("Content-Disposition", "Anhang; Dateiname =" + Dateiname);
Meine Frage ist, ich bin alles in JAX-RS-Datei zu tun, und ich habe nicht HttpServletResponse Objekt zur Verfügung.
Nach der Antwort von Add Response Header to JAX-RS Webservice
Er sagt:
Sie einen Verweis auf die tatsächlichen HttpServletResponse über die @Context Anmerkung in Ihrem webservice injizieren können und verwenden addHeader() usw. Fügen Sie Ihre Kopfzeile hinzu.
Ich kann nicht wirklich Figur, was genau das bedeutet, ohne Codebeispiel ..
@GarretWilson Warum nicht? Was verwirrt dich? Es ist ein einfacher Header. – Tarlog
Weil ein Singleton 'MyResource'' myMethod() 'gleichzeitig von mehreren Threads aufrufen würde. Jeder Thread würde eine andere Instanz von "HttpServletResponse" haben, doch die Singleton-Variablen "anotherServletResponse" kann immer nur einen einzelnen Wert enthalten. Der einzige Weg, wie dies funktioniert, ist, wenn 'anotherServletResponse' mit einem thread-sicheren Proxy injiziert wurde, der einen lokalen Thread oder ähnliches verwendet, um die tatsächliche 'HttpServletResponse'-Instanz des aktuellen Threads zu bestimmen. –
Soweit ich mich erinnere, wird HttpServletRequestWrapper injiziert; Seine Implementierung nimmt den echten HttpServletRequest vom TLS. Deine Schätzung ist mehr oder weniger korrekt. – Tarlog