Per HTTP Request auf Ressourcen innerhalb eines JARs zugreif

Status
Nicht offen für weitere Antworten.
S

Sebbi

Gast
Hallo,

ich habe folgendes Problem:

Ich verwende Tomcat und habe 2 Web-Projekte. Das eine liegt im /WEBINF/lib des anderen als JAR file.
Soweit, so gut. Jedoch verwende ich in beiden Projekten statische JS files, die ich nicht doppelt speichern möchte. Deshalb meine Frage:
Ist es möglich auf statische Ressourcen (JS, Images, CSS etc.), die in einem JAR Archiv liegen, per URL vom Webbrowser bzw. HTML include ( also HTTP request) aus zuzugreifen?

Danke

Sebastian
 
G

Guest

Gast
Das sollte gehen.

Die Ressource forderst du über ein Servlet an, z.B.:
Code:
[img]<%= request.getContextPath()+"/RessourceServlet?filename=meineDatei.jpg" %>[/img]

Im Servlet musst du dann den Request-Parameter auslesen, die Datei anfordern, den MIME-Type am Response setzen und die Daten in den OutputStream des Servlet stecken.

So müsste das Servlet funktionieren (nicht getestet):
Code:
protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException {
    String filename = request.getParameter("filename");
    URL fileUrl = getClass().getResource(filename); 
    if(fileUrl != null) {
        URLConnection conn = fileUrl.openConnection();
        response.setContentType(conn.getContentType());
        InputStream in = conn.getInputStream();
        OutputStream out = response.getOutputStream();
        byte[] buf = new byte[1024];
        int count = 0;
        while ((count = in.read(buf)) >= 0) {
            out.write(buf, 0, count);
        }
        out.close();
        in.close();
    }
}
 

HLX

Top Contributor
Gast war ich. Forum hat wohl meinen Keks nicht erkannt.

EDIT: Beachte zur Sicherheit noch: Auf die o.g. Weise ist theoretisch JEDE Ressource in deinem Classpath aus dem Browser zugreifbar. Ggf. solltest du Pfade im Requestparameter untersagen.
 
S

Sebbi

Gast
Danke, so ähnlich habe ich es gemacht. Funktioniert gut :)
Doch zwei Fragen bleiben noch:

1. Wie kann ich erkennen, dass der Browser die Datei schon erhalten hat, um danach ggf. ein NOCHANGED Header (oder so ähnlich) setzen? Machen das nicht die Webbrowser normal immer so? Im Moment werden immer alle Resourcen ausgeliefert.

2. Ist es auch möglich JSP Dateien dadurch zu 'serven'? Müsste ich ja dann eigentlich precompilen und die Classes mit ins JAR stecken oder?

Danke
Sebastian
 

HLX

Top Contributor
Sebbi hat gesagt.:
1. Wie kann ich erkennen, dass der Browser die Datei schon erhalten hat, um danach ggf. ein NOCHANGED Header (oder so ähnlich) setzen? Machen das nicht die Webbrowser normal immer so? Im Moment werden immer alle Resourcen ausgeliefert.
Hmm...das einzige was mir hier einfällt, wäre eine Information im Cookie abzulegen oder ein Session-Attribut zu setzen.

Sebbi hat gesagt.:
2. Ist es auch möglich JSP Dateien dadurch zu 'serven'? Müsste ich ja dann eigentlich precompilen und die Classes mit ins JAR stecken oder?
Der Browser kann weder die JSP-Dateien noch die daraus generierten Servlet-Klassen interpretieren. Der Inhalt von JSPs wird vom Servlet Container in HTML-Code umgewandelt, bevor er an den Browser geschickt werden. Wenn du die Klassen als Ressourcen anforderst erhälst du lediglich unleserlichen Binärcode.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M XML http request zeigt die eigene Website als response Web Tier 2
I Jersey ws und http gleicher Pfad Web Tier 25
P HTTP Respnse 400 Web Tier 21
P HTTP Response 400 Web Tier 1
feinperligekohlensaeure JSF JSF + Tomcat 9 | HTTP Status 404 |(com.sun.faces.config.ConfigureListener?) Web Tier 1
L Erstes JSF Beispiel [http-apr-8080-exec-8] Web Tier 10
H Servlet Servlet nimmt HTTP-GET mit Parameter entgegen Web Tier 2
P Servlet wird nicht gefunden - HTTP Error 503 Web Tier 7
H JSF - falsche HTTP-Adresse im Browser Web Tier 8
D HTTP 404 Status bei JSF Web Tier 5
S Struts - Http Port ändern Web Tier 11
P Simpler HTTP-Container in JBOSS - Geht das? Web Tier 8
F COMET/Long Pulling/HTTP Stream Web Tier 2
Z Servlet Response HTTP-Status 200 wird nicht übertragen Web Tier 3
Q browserfenster schließen nach HTTP-Authentifizierung Web Tier 3
K Http Status Code abfragen Web Tier 8
E Java Servlet doPost request, Mehrere Parameter mit demselben Namen aus Tabellenzeilen Web Tier 2
jann Servlet Bei jedem Request wird eine neue Session erstellt. Web Tier 6
M request.getUserPrincipal() Typecasting Web Tier 1
BuckRogers JPA Datenbankabfrage bei jedem Request?! Web Tier 6
S JSF CommandButton soll keine Request starten! Web Tier 2
X Managed Bean Scope zwischen Request und Session gesucht Web Tier 6
S JSF Request länger haltbar machen *grins* oder injection.. Web Tier 6
lukas24680 Servlet pro Request Web Tier 2
7 kein Absatz mittels request.getParameter()?? Web Tier 8
borobudur Servlet Business-Logik wird bei jedem Request neu erstellt Web Tier 13
S Ajax Request verhindert forward? Web Tier 8
ruutaiokwu request.getParameter() Web Tier 3
J Request weiterleiten Web Tier 6
K Struts request Zugriff Web Tier 4
I Beim zurück-Link wird immer ein Request ausgeführt Web Tier 5
F Problem mit der Methode request.getRemotePort() Web Tier 2
F Object Request Web Tier 6
L Umlaute von Formular mit request holen Web Tier 16
P request.getParameter("name") von Formular auf JSP-Seite leer Web Tier 5
P Rausfinden, wo request herkam Web Tier 4
R Request Parameter kopieren und setzen Web Tier 3
L JSF Request Scope und createValueBinding() Web Tier 1
D request.contextPath in Java-Klasse ausführen Web Tier 5
E Problem mit request.getParameter Web Tier 5
F richfaches:datascroller mit request-scope Web Tier 6
F JSF: Beans in Session oder Request? Web Tier 4

Ähnliche Java Themen

Neue Themen


Oben