private void displayGroovyPage( final HttpServletRequest request, final HttpServletResponse response, final APISession apiSession, final PageResourceProvider pageResourceProvider) throws CompilationFailedException, InstantiationException, IllegalAccessException, IOException, BonitaException { final ClassLoader originalClassloader = Thread.currentThread().getContextClassLoader(); final GroovyClassLoader pageClassloader = customPageService.getPageClassloader(apiSession, pageResourceProvider); try { Thread.currentThread().setContextClassLoader(pageClassloader); final Class<PageController> pageClass = customPageService.registerPage(pageClassloader, pageResourceProvider); final PageController pageController = customPageService.loadPage(pageClass); pageResourceProvider.setResourceClassLoader(pageClassloader); pageController.doGet( request, response, pageResourceProvider, new PageContext(apiSession, getCurrentLocale(request), getCurrentProfile(request))); } finally { Thread.currentThread().setContextClassLoader(originalClassloader); } }
@Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1. 클라이언트가 요청한 URL을 먼저 알아낸다.(서블릿 경로 알아냄) // 예) http://localhost:9999/web01/score/step05/list.do // getServletPath()의 리턴 값: /score/step05/list.do String pageUrl = request.getServletPath(); System.out.println(pageUrl); // 2. pageUrl로 ServletContext로부터 페이지 컨트롤러를 꺼낸다. PageController pageController = (PageController) this.getServletContext().getAttribute(pageUrl); try { if (pageController == null) { throw new Exception("URL 요청을 처리할 수 없습니다."); } // 3.페이지 컨트롤러가 사용할 객체를 준비한다. // 1) 요청 파라미터 맵을 준비한다. Map<String, String[]> paramMap = request.getParameterMap(); // 2) 작업 결과를 담을 바구니를 준비한다. Map<String, Object> model = new HashMap<String, Object>(); // 4. 페이지 컨트롤러를 실행한다. String viewUrl = pageController.execute(paramMap, model); // 5. 페이지 컨트롤러가 작업한 결과물을 ServlerRequest 보관함에 담는다. for (Entry<String, Object> item : model.entrySet()) { request.setAttribute(item.getKey(), item.getValue()); } // 6. 뷰 컨포넌트(JSP)를 인클루드 한다. if (viewUrl.startsWith("redirect:")) { response.sendRedirect(viewUrl.substring(9)); } else { response.setContentType("text/html; charset=UTF-8"); RequestDispatcher rd = request.getRequestDispatcher(viewUrl); rd.include(request, response); } } catch (Exception e) { RequestDispatcher rd = request.getRequestDispatcher("/score/step05/error"); request.setAttribute("error", e); rd.forward(request, response); } }
public static void main(String[] args) { PageController pc = new PageController(); pc.setRowCount(39); System.out.println("totalPage=" + pc.getTotalPage()); }