package MVC; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Properties; import javax.servlet.RequestDispatcher; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Controller extends HttpServlet { Map map = new HashMap(); @Override public void init(ServletConfig config) throws ServletException { String readProperties = config.getInitParameter("param"); Properties prop = new Properties(); FileInputStream fis = null; try { fis = new FileInputStream(readProperties); prop.load(fis); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } Iterator i = prop.keySet().iterator(); while (i.hasNext()) { String key = (String) i.next(); String className = prop.getProperty(key); try { Class makeClass = Class.forName(className); Object o = makeClass.newInstance(); map.put(key, o); } catch (Exception e) { e.printStackTrace(); } } } public void excute(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { String view = null; Impl impl = null; try { String uri = req.getRequestURI(); if (uri.indexOf(req.getContextPath()) == 0) { uri = uri.substring(req.getContextPath().length()); } impl = (Impl) map.get(uri); view = impl.boardImpl(req, res); } catch (Exception e) { e.printStackTrace(); } RequestDispatcher rd = req.getRequestDispatcher(view); rd.forward(req, res); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { excute(req, resp); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { excute(req, resp); } }
설명 :
먼저 간단하게 Servlet 생명주기를 설명하자면 이렇게 움직인다.
init() -> Service() -> doGet(), doPost() -> -> destroy()
init() : 생성자 다음으로 딱 한번 호출한다.
Service() : 여러번 호출이 된다.
doGet(), doPost() : view에서 get, post 방식으로 넘겼을 때 그에 해당하는 method가 호출된다.
Init() -> [Service -> doGet() -> Service -> doPost() -> Service() - > doGet()]반복 -> destroy()
Control.java
먼저 이파일을 하나 만든다.
설명 :
Properties Class 활용
/list.test 라는 요청이 들어오면 패키지명(MVC) 클래스명(ListImpl) MVC.ListImpl을 실행시킨다.
그 내용)
아까 Servlet 생명주기에서 제일 먼저 실행하는 것은 init() method이다.
init() method의 내용이 이렇게 해주는것이다.