检查 getServletPath 和 getPathInfo 方法是否有行为更改

缺省 servlet 映射仅包含 / 字符的映射。在 WebLogic 中,对缺省 servlet 映射的 javax.servlet.http.HttpServletRequest.getServletPath 方法的调用会返回空字符串,而对 javax.servlet.http.HttpServletRequest.getPathInfo 方法的调用会返回 null

在 WebSphere Traditional 中,对缺省 servlet 映射的 getServletPath 的调用会返回空字符串,而对 getPathInfo 方法的调用会返回 / 字符。

同样,如果要迁移到 Liberty 并使用 Servlet 3.0 或 3.1 功能部件实现,那么对缺省 servlet 映射的 getServletPath 的调用会返回空字符串,而对 getPathInfo 方法的调用会返回 / 字符。但是,如果使用 Servlet 4.0 功能部件,那么对 getServletPath 的调用会返回 / 字符,而对 getPathInfo 的调用会返回 null

例如,请考虑以下代码:

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

在 WebLogic 中,此代码将产生以下输出:

getServletPath:
getPathInfo: null

在 WebSphere Traditional 与具有 Servlet 3.0 或 3.1 的 Liberty 中,此代码将产生以下输出:

getServletPath:
getPathInfo: /

在具有 Servlet 4.0 的 Liberty 中,此代码将产生以下输出:

getServletPath: /
getPathInfo: null

如果要迁移到 WebSphere Traditional 或者具有 Servlet 3.0 或 3.1 实现的 Liberty,请确保代码使 getPathInfo 返回 / 字符,而不是 null

如果要迁移到具有 Servlet 4.0 实现的 Liberty,请确保代码使 getServletPath 返回 / 字符,而不是空字符串。

有关更多信息,请参阅: