Prüfen, ob sich das Verhalten der Methoden getServletPath und getPathInfo geändert hat

Eine Standardservletzuordnung hat nur eine Zuordnung des Zeichens /. In Konkurrenzanwendungsservern gibt der Aufruf der Methode javax.servlet.http.HttpServletRequest.getServletPath für eine Standardservletzuordnung den Wert des URI ohne den Kontextpfad zurück und der Aufruf der Methode javax.servlet.http.HttpServletRequest.getPathInfo gibt null zurück. In WebSphere Traditional gibt der Aufruf von getServletPath für eine Standardservletzuordnung eine leere Zeichenfolge zurück und der Aufruf von getPathInfo gibt das Zeichen / zurück. Wenn Sie eine Migration auf Liberty durchführen und die Servlet 3.0- oder 3.1-Featureimplementierung verwenden, gibt der Aufruf von getServletPath für eine Standardservletzuordnung eine leere Zeichenfolge zurück und der Aufruf der Methode getPathInfo gibt das Zeichen / zurück.

Sehen Sie sich beispielsweise den folgenden Code an:

< span class="Code"> @WebServlet("/")
public class TestServlet extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse res) {
System.out.println("getServletPath: " + req.getServletPath());
System.out.println("getPathInfo: " + req.getPathInfo());
}
}

In Konkurrenzanwendungsservern gibt dieser Code die folgende Ausgabe aus:

< span class="Code"> getServletPfad: /some/path/to/servlet
getPathInfo: null

Wenn dieser Code jedoch in WebSphere Traditional und Liberty mit Servlet 3.0 oder 3.1 verwendet wird, gibt er die folgende Ausgabe aus:

< span class="Code"> getServlet-Pfad:
getPathInfo: /

Wenn Sie eine Migration auf WebSphere Liberty durchführen und die Servlet 3.0- oder Servlet 3.1-Implementierung verwenden, fügen Sie der Konfigurationsdatei server.xml das Element <webContainer servletPathForDefaultMapping="true"/> hinzu. Dieses Element bewirkt, dass sich die Methoden getServletPath und getPathInfo so wie in den Konkurrenzanwendungsservern verhalten. Wenn Sie die Servlet 4.0-Implementierung verwenden, ist keine Änderung erforderlich. Die Methoden getServletPath und getPathInfo in der Servlet 4.0-Implementierung verhalten sich genauso wie in den Konkurrenzanwendungsservern.

Wenn Sie eine Migration auf WebSphere Traditional durchführen, setzen Sie die Web-Container-Eigenschaft com.ibm.ws.webcontainer.EnableDefaultServletRequestPathElements auf "true". Die Definition dieser Eigenschaft führt dazu, dass sich die Methoden getServletPath und getPathInfo so wie in den Konkurrenzanwendungsservern verhalten.

Weitere Informationen finden Sie in den folgenden Quellen: