Проверка наличия изменений в алгоритме работы методов getServletPath и getPathInfo

Связь с сервлетом по умолчанию содержит только символ /. В других серверах приложений вызов метода javax.servlet.http.HttpServletRequest.getServletPath для связи с сервлетом по умолчанию возвращает значение URI запроса без пути контекста, а вызов метода javax.servlet.http.HttpServletRequest.getPathInfo возвращает null. В WebSphere traditional вызов getServletPath для связи с сервлетом по умолчанию возвращает пустую строку, а вызов метода getPathInfo возвращает символ /. В случае миграции на Liberty при использовании реализации компонента Servlet 3.0 или 3.1 вызов getServletPath для связи с сервлетом по умолчанию возвращает пустую строку, а вызов метода getPathInfo возвращает символ /.

Для примера рассмотрим следующий фрагмент кода:

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

В других серверах приложений этот код создаст следующий вывод:

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

В WebSphere traditional или Liberty с компонентом Servlet версии 3.0 или 3.1 этот код создаст следующий вывод:

< span class="Code"> getServletПуть:
getPathInfo: /

Если выполняется миграция на WebSphere Liberty с реализацией Servlet 3.0 или 3.1, добавьте элемент <webContainer servletPathForDefaultMapping="true"/> в файл конфигурации server.xml. После добавления этого элемента методы getServletPath и getPathInfo будут работать как в других серверах приложений. Если применяется реализация Servlet 4.0, то никаких изменений вносить не требуется. Методы getServletPath и getPathInfo работают в Servlet 4.0 так же, как в других серверах приложений.

Если выполняется миграция на WebSphere Traditional, установите для свойства WebContainer com.ibm.ws.webcontainer.EnableDefaultServletRequestPathElements значение true. Если установлено это значение, методы getServletPath и getPathInfo будут работать как в других серверах приложений.

Дополнительная информация: