getServletPath 및 getPathInfo 메소드에서 동작 변경 확인

기본 서블릿 맵핑은 / 문자만을 맵핑합니다. 경쟁 애플리케이션 서버에서, 기본 서블릿 맵핑을 위한 javax.servlet.http.HttpServletRequest.getServletPath 메소드 호출에서는 요청 URI - 컨텍스트 경로 값을 리턴하고 javax.servlet.http.HttpServletRequest.getPathInfo 메소드 호출에서는 널을 리턴합니다. 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 구성 파일로 추가하십시오. 이 요소를 추가하면 getServletPathgetPathInfo 메소드가 경쟁 애플리케이션 서버에서와 같이 동작합니다. Servlet 4.0 구현을 사용 중인 경우 변경할 필요가 없습니다. Servlet 4.0 구현에서 getServletPathgetPathInfo는 경쟁 애플리케이션 서버에서와 동일하게 동작합니다.

WebSphere traditional로 마이그레이션 중인 경우 WebContainer com.ibm.ws.webcontainer.EnableDefaultServletRequestPathElements 특성을 true로 설정하십시오. 이 특성을 설정하면 getServletPathgetPathInfo 메소드가 경쟁 애플리케이션 서버에서와 같이 동작합니다.

추가 정보는 다음을 참조하십시오.