Sprawdź, czy występują zmiany w działaniu związane z metodami getServletPath i getPathInfo

Odwzorowanie domyślnego serwletu uwzględnia jedynie odwzorowanie znaku /. W przypadku konkurencyjnych serwerów aplikacji wywołanie metody javax.servlet.http.HttpServletRequest.getServletPath na potrzeby odwzorowania domyślnego serwletu zwraca wartość identyfikatora URI żądania bez ścieżki kontekstu, a wywołanie metody javax.servlet.http.HttpServletRequest.getPathInfo zwraca wartość NULL. W przypadku serwera WebSphere traditional wywołanie metody getServletPath na potrzeby odwzorowania domyślnego serwletu zwraca pusty łańcuch, a wywołanie metody getPathInfo zwraca znak /. Podobnie w przypadku migracji na serwer Liberty oraz w przypadku korzystania z implementacji składnika Servlet w wersji 3.0 lub 3.1 wywołanie metody getServletPath na potrzeby odwzorowania domyślnego serwletu zwraca pusty łańcuch, a wywołanie metody getPathInfo zwraca znak /.

Przykładowy kod do rozpatrzenia:

< 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());
}
}

Na konkurencyjnych serwerach aplikacji ten kod zwróci następujące dane wyjściowe:

< span class="Code"> getServletŚcieżka: /some/path/to/servlet
getPathInfo: null

Jednak na serwerach WebSphere traditional i Liberty ze składnikiem Servlet w wersji 3.0 lub 3.1 kod zwróci następujące dane wyjściowe:

< span class="Code"> getServletŚcieżka:
getPathInfo: /

W przypadku migracji na serwer WebSphere Liberty oraz w przypadku korzystania z implementacji składnika Servlet w wersji 3.0 lub 3.1 należy dodać element <webContainer servletPathForDefaultMapping="true"/> do pliku konfiguracyjnego server.xml. Dodanie tego elementu spowoduje to, że metody getServletPath i getPathInfo będą działać tak, jakby były wywoływane na konkurencyjnych serwerach aplikacji. W przypadku korzystania z implementacji składnika Servlet 4.0 nie trzeba nic zmieniać. Metody getServletPath i getPathInfo w implementacji składnika Servlet 4.0 działają tak samo jak na konkurencyjnych serwerach aplikacji.

W przypadku migracji na serwer WebSphere traditional należy ustawić łańcuch true (prawda) jako wartość właściwości kontenera WWW com.ibm.ws.webcontainer.EnableDefaultServletRequestPathElements. Ustawienie tej właściwości spowoduje, że metody getServletPath i getPathInfo będą działać tak, jak na konkurencyjnych serwerach aplikacji.

Informacje dodatkowe: