Zkontrolovat změnu chování v metodách getServletPath a getPathInfo

Výchozí mapování servletu má mapování pouze znaku /. Na konkurenčních aplikačních serverech vrátí volání metody javax.servlet.http.HttpServletRequest.getServletPath kvůli výchozímu mapování servletu hodnotu identifikátoru URI požadavku bez kontextové cesty a volání metody javax.servlet.http.HttpServletRequest.getPathInfo vrátí hodnotu null. V produktu WebSphere traditional vrátí volání metody getServletPath kvůli výchozímu mapování servletu prázdný řetězec a volání metody getPathInfo vrátí znak /. Podobně platí, že pokud migrujete na server Liberty a používáte implementace funkce servletu 3.0 nebo 3.1, volání metody getServletPath kvůli výchozímu mapování servletu vrátí prázdný řetězec a volání metody getPathInfo vrátí znak /.

Zvažte například následující kód:

< 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 konkurenčních serverech bude mít tento kód následující výstup:

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

Na serverech WebSphere traditional a Liberty se servletem 3.0 nebo 3.1 bude mít kód následující výstup:

< span class="Code"> getServletCesta:
getPathInfo: /

Pokud migrujete na server WebSphere Liberty a používáte implementaci servlet 3.0 nebo 3.1, přidejte prvek <webContainer servletPathForDefaultMapping="true"/> do konfiguračního souboru server.xml. Přidání tohoto prvku způsobí, že se metody getServletPath a getPathInfo budou chovat stejně jako na konkurenčních aplikačních serverech. Používáte-li implementaci servletu 4.0, není třeba provádět žádnou změnu. Metody getServletPath a getPathInfo se v servletu 4.0 chovají stejně jako na konkurenčních aplikačních serverech.

Pokud migrujete na produkt WebSphere traditional, nastavte vlastnost com.ibm.ws.webcontainer.EnableDefaultServletRequestPathElements webového kontejneru na hodnotu true. Nastavení této vlastnosti způsobí, že se metody getServletPath a getPathInfo budou chovat stejně jako na konkurenčních aplikačních serverech.

Další informace viz: