檢查 getServletPath 和 getPathInfo 方法中的行為變更

預設 Servlet 對映具有只含 / 字元的對映。在競爭應用程式伺服器中,預設 Servlet 對映的 javax.servlet.http.HttpServletRequest.getServletPath 方法的呼叫會傳回要求 URI 的值減去環境定義路徑的值,javax.servlet.http.HttpServletRequest.getPathInfo 方法的呼叫會傳回 null。在 WebSphere Traditional 中,預設 Servlet 對映的 getServletPath 的呼叫會傳回空字串,getPathInfo 方法的呼叫會傳回 / 字元。同樣,如果要移轉至 Liberty 並使用 Servlet 3.0 或 3.1 特性實作,則預設 Servlet 對映的 getServletPath 的呼叫會傳回空字串,getPathInfo 方法的呼叫會傳回 / 字元。

例如,請考量下列程式碼:

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

在競爭應用程式伺服器中,此程式碼將產生下列輸出:

getServletPath: /some/path/to/servlet
getPathInfo: null

但是,在 WebSphere Traditional 和具有 Servlet 3.0 或 3.1 的 Liberty 中,程式碼將產生下列輸出:

getServletPath:
getPathInfo: /

如果要移轉至 WebSphere Liberty 並使用 Servlet 3.0 或 3.1 實作,請將 <webContainer servletPathForDefaultMapping="true"/> 元素新增至 server.xml 配置檔。新增此元素將導致 getServletPathgetPathInfo 方法的行為方式如同它們在競爭應用程式伺服器中的行為方式。如果使用的是 Servlet 4.0 實作,則無需變更。Servlet 4.0 實作中的 getServletPathgetPathInfo 的行為與在競爭應用程式伺服器中的行為相同。

如果要移轉至 WebSphere Traditional,請將 WebContainer com.ibm.ws.webcontainer.EnableDefaultServletRequestPathElements 內容設定為 true。設定此內容將導致 getServletPathgetPathInfo 方法的行為方式如同它們在競爭應用程式伺服器中的行為方式。

如需相關資訊,請參閱: