서블릿에서 제어권을 다른 페이지로 넘길때 RequiestDispatcher.forward(..) 메소드를 이용한다. dispatcher 인스턴스를 얻는 두가지 경로가 존재하는데 하나는 ServletRequest를 통해서, 그리고 다른 하나는 ServletContext를 통해서이다.
제어권을 넘겨받을 페이지의 uri 를 getRequestDispatcher(...) 메소드의 파라미터로 전달하는데 유의할 점이 있다.
http://www.xxxx.com/MyApp/chap03/index.jsp
//ContextName
assertEquals("/MyApp", servletConfig.getServletContext().getContextPath());
//requestURI
assertEquals("/MyApp/chap03/index.jsp", request.getRequestURI());
ServletContext.getRequestDispatcher(param1);
ServletRequest.getRequestDispatcher(param2);
ServletContext 인스턴스의 getRequestDispatcher 에 전달되는 param1 은 절대경로 "/" 으로 시작해야 함. 그렇지 않으면 IllegalArgumentException이 던져진다.
param2 는 param1과 같이 절대 경로로 시작할 수도 있고 상대 경로로 시작할 수도 있다.
현재의 페이지 index.jsp 가 chap03에 위치할 때
assertEquals("/MyApp/chap03/index.jsp", request.getRequestURI());
같은 디렉토리 내의 /MyApp/chap03/result.jsp 로 이동을 하려면 다음의 세가지 방법이 가능하다.
ServletContext.getRequestDispatcher("/chap03/result.jsp");
ServletRequest.getRequestDispatcher("/chap03/result.jsp");
ServletRequest.getRequestDispatcher("result.jsp"); // 상대 경로 OK!
* getRequiestDispatcher에 전달되는 uri는 contextPath 값이 빠지는 점에 유의.
만일 하위 경로에 있는 /MyApp/chap03/user/user.jsp 로 이동해야 한다면
ServletContext.getRequestDispatcher("/chap03/user/user.jsp");
ServletRequest.getRequestDispatcher("/chap03/user/user.jsp");
ServletRequest.getRequestDispatcher("user/user.jsp");
이 가능하다.
현재 디렉토리(/MyApp/chap03 )에서 상위 디렉토리(/MyApp)로 이동한다면
ServletContext.getRequestDispatcher("/MyApp");
ServletRequest.getRequestDispatcher("/MyApp");
ServletRequest.getRequestDispatcher("../");
으로 할 수 있다.
상대 경로를 줄 때 ../ 는 ServletContext가 나타내는 디렉토리까지만 이동이 가능하다. 만일 그 이상 상위의 디렉토리에까지 이르게 된다면 NullPointerException 이 던져진다.
제어권을 넘겨받을 페이지의 uri 를 getRequestDispatcher(...) 메소드의 파라미터로 전달하는데 유의할 점이 있다.
http://www.xxxx.com/MyApp/chap03/index.jsp
//ContextName
assertEquals("/MyApp", servletConfig.getServletContext().getContextPath());
//requestURI
assertEquals("/MyApp/chap03/index.jsp", request.getRequestURI());
ServletContext.getRequestDispatcher(param1);
ServletRequest.getRequestDispatcher(param2);
ServletContext 인스턴스의 getRequestDispatcher 에 전달되는 param1 은 절대경로 "/" 으로 시작해야 함. 그렇지 않으면 IllegalArgumentException이 던져진다.
param2 는 param1과 같이 절대 경로로 시작할 수도 있고 상대 경로로 시작할 수도 있다.
현재의 페이지 index.jsp 가 chap03에 위치할 때
assertEquals("/MyApp/chap03/index.jsp", request.getRequestURI());
같은 디렉토리 내의 /MyApp/chap03/result.jsp 로 이동을 하려면 다음의 세가지 방법이 가능하다.
ServletContext.getRequestDispatcher("/chap03/result.jsp");
ServletRequest.getRequestDispatcher("/chap03/result.jsp");
ServletRequest.getRequestDispatcher("result.jsp"); // 상대 경로 OK!
* getRequiestDispatcher에 전달되는 uri는 contextPath 값이 빠지는 점에 유의.
만일 하위 경로에 있는 /MyApp/chap03/user/user.jsp 로 이동해야 한다면
ServletContext.getRequestDispatcher("/chap03/user/user.jsp");
ServletRequest.getRequestDispatcher("/chap03/user/user.jsp");
ServletRequest.getRequestDispatcher("user/user.jsp");
이 가능하다.
현재 디렉토리(/MyApp/chap03 )에서 상위 디렉토리(/MyApp)로 이동한다면
ServletContext.getRequestDispatcher("/MyApp");
ServletRequest.getRequestDispatcher("/MyApp");
ServletRequest.getRequestDispatcher("../");
으로 할 수 있다.
상대 경로를 줄 때 ../ 는 ServletContext가 나타내는 디렉토리까지만 이동이 가능하다. 만일 그 이상 상위의 디렉토리에까지 이르게 된다면 NullPointerException 이 던져진다.
'Dev' 카테고리의 다른 글
[ DBUnit ] How to reset auto incremental column (0) | 2007.12.24 |
---|---|
JavaScript에서 this의 의미 (5) | 2007.12.22 |
fairly considerable SWT articles (0) | 2007.12.22 |