Verificaţi pentru o modificare de comportament în metodele getServletPath şi getPathInfo

O mapare de servlet implicită are o mapare doar a caracterului /. În serverele de aplicaţii competitive, un apel la metoda javax.servlet.http.HttpServletRequest.getServletPath pentru o mapare de servlet implicită returnează valoarea URI-ul cererii minus calea de context, iar un apel la metoda javax.servlet.http.HttpServletRequest.getPathInfo returnează null. În WebSphere tradiţional, un apel la getServletPath pentru o mapare de servlet implicită va întoarce un şir gol, iar un apel la getPathInfo va returna caracterul /. Similar, dacă migraţi la Liberty şi utilizaţi implementările caracteristicii Servlet 3.0 sau 3.1, un apel la getServletPath pentru o mapare de servlet implicită va întoarce un şir gol, iar un apel la getPathInfo va returna caracterul /.

De exemplu, luaţi în considerare următorul cod:

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

În serverele de aplicaţii competitive, acest cod va avea următoarea ieşire:

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

Dar, în WebSphere tradiţional şi Liberty cu Servlet 3.0 sau 3.1, codul va avea următoarea ieşire:

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

Dacă migraţi la WebSphere Liberty şi utilizaţi implementările Servlet 3.0 sau 3.1, adăugaţi elementul <webContainer servletPathForDefaultMapping="true"/> la fişierul de configuraţie server.xml. Adăugarea acestui element va face ca metodele getServletPath şi getPathInfo să se comporte ca în serverele de aplicaţii competitive. Dacă utilizaţi implementarea Servlet 4.0, nu este nevoie de nicio implementare. getServletPath şi getPathInfo în implementarea Servlet 4.0 se comportă la fel ca în serverele de aplicaţii competitive.

Dacă migraţi la WebSphere traditional, setaţi proprietatea WebContainer com.ibm.ws.webcontainer.EnableDefaultServletRequestPathElements la true. Setarea acestei proprietăţi va face ca metodele getServletPath şi getPathInfo să se comporte la fel ca în serverele de aplicaţii competitive.

Pentru informaţii suplimentare, vedeţi: