Jsp, doPost, url ermitteln

schlumsch

Aktives Mitglied
Hallo,

kleines Problem(chen). Ich möchte in meinem Servlet in der Methode doPost die url ermitteln, aus welcher doPost aufgerufen wurde. Sprich ich brauche den namen meiner Jsp, damit ich am Ende der Verarbeitung aus doPost heraus wieder auf meine ursprüngliche jsp redirecten kann. Wo finde ich das im request?
Versucht habe ich schon
Java:
		String xxx = req.getRequestURI();
		String x2 = req.getContextPath();
		String x3 = req.getRemoteAddr();
		String x4 = req.getRemoteHost();

thx & Gruß
 
M

MiDniGG

Gast
So spontan würde ich den Namen der JSP einfach als Parameter übergeben...
Was anderes fällt mir jetzt nicht ein. :)
 
J

JohannisderKaeufer

Gast
Ein kleines Beispiel

die Datei index.html im Webcontent Folder
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="hello">hello</a>
</body>
</html>

Ein einfaches Servlet das den Request Header wiedergibt.
Java:
package test;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/HelloWorld")
public class HelloWorld extends HttpServlet {
    private static final long serialVersionUID = 1L;

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

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

    void doService(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        PrintWriter writer = new PrintWriter(response.getOutputStream());
        writer.print("<html><body><ul>");
        Enumeration<String> en = request.getHeaderNames();

        while (en.hasMoreElements()) {
            String text = en.nextElement();
            writer.print("<li>" + text + ": " + request.getHeader(text)
                    + "</li>");
        }
        writer.print("</ul></body></html>");
        writer.flush();
        writer.close();
    }

}

Die passende web.xml
[XML]<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>TEST</display-name>
<servlet>
<servlet-name>helloworld</servlet-name>
<servlet-class>test.HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloworld</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>[/XML]

Nachdem aus der index.html (TEST/index.html) auf den hello-Link geklickt wird, welcher das Servlet ausgibt ergibt sich folgende Ausgabe.

Code:
    * host: localhost:8080
    * user-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.10) Gecko
    * accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    * accept-language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
    * accept-encoding: gzip,deflate
    * accept-charset: UTF-8,*
    * keep-alive: 115
    * connection: keep-alive
    * referer: http://localhost:8080/TEST/index.html

Siehe da der letzte Punkt ist die Adresse von der aus das Servlet aufgerufen wurde.
Der sogenannte referer. Diesen findet man genauergesagt mit request.getHeader("referer");.
Sofern er vom aufrufenden Browser mitgeschickt wird und von keiner Firewall entfernt wird. Oder die URL in den Browser eingetippt wird.

Das Header "beschnitten" werden ist halt so! Denn wen geht es an welchen Browser ich benutze oder welches Betriebssystem mit welchen eklatanten Sicherheitslücken.
 
M

maki

Gast
@JohannisderKaeufer

Das passt aber nicht mit dem MVC/Model 2 Konzept zusammen, da linkt man nie direkt auf die JSP sondern geht immer über ein Servlet (Controller), daher würde der Referer nur auf die Servlet URL zeigen ;)
 

Cage Hunter

Aktives Mitglied
Viele Beispiele zeigen diese Thematik auf, indem sie das Servlet-Mapping einfach auf "alles" legen, sprich "*"
Wenn nun im Root nach "xyz.jsp" gefragt wird, steht dies auch in req.getRequestURI() drin und das Servlet kann entsprechend weiterleiten
 

Atze

Top Contributor
@JohannisderKaeufer

Das passt aber nicht mit dem MVC/Model 2 Konzept zusammen, da linkt man nie direkt auf die JSP sondern geht immer über ein Servlet (Controller), daher würde der Referer nur auf die Servlet URL zeigen ;)

das lässt sich doch im servlet sicher lesen und wieder reinschreiben, oder überschreibt das servlet das wieder?
 
M

maki

Gast
das lässt sich doch im servlet sicher lesen und wieder reinschreiben, oder überschreibt das servlet das wieder?
Die Referer URL ist nix weiter als das was im Browser in der URL Leiste steht, wenn das itrgendetwas mit .JSP steht, nutzt man kein MVC/Model 2 ;)
MiDniGG hatte schon die richtige Idee, obwohl ich nicht den Namen der JSP reinschreiben würde, sondern ein command Parameter anhand dessen dann entschieden wird wohin der Request geforwarded wird.
 

Atze

Top Contributor
Die Referer URL ist nix weiter als das was im Browser in der URL Leiste steht, wenn das itrgendetwas mit .JSP steht, nutzt man kein MVC/Model 2 ;)
MiDniGG hatte schon die richtige Idee, obwohl ich nicht den Namen der JSP reinschreiben würde, sondern ein command Parameter anhand dessen dann entschieden wird wohin der Request geforwarded wird.

ja, wenn man zb über struts actions (.do) geforwarded wird sieht man da ja auch nix, das stimmt schon. aber man ist ja nicht gezwungen nach dem modell 2 zu designen, nichtmal simples mvc wird in vielen anwendungen eingehalten. habs ja nur erwähnt, weils möglich wäre! :)
 

Ähnliche Java Themen

Neue Themen


Oben