[FrontController] JSP์์ ์๋ธ๋ฆฟ์ผ๋ก์ ์ ํ: FrontController ํจํด ์ ์ฉํ๊ธฐ
โ Servlet์ผ๋ก FrontController ํจํด ๊ตฌํํ๊ธฐ
1๏ธโฃ Servlet์ผ๋ก์ ์ ํ
• ๊ธฐ์กด์๋ [ controller.jsp?action=MAINPAGE ]์ ๊ฐ์ด ํญ์ ์ก์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์์์ผ ํ์
→ ์๋ธ๋ฆฟ์ผ๋ก ๋ฐ๊พธ๋ ์์ ์ ํตํด ๋ ๊น๋ํ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค ์ ์์
• JSP๋ ์๋ View ์ญํ ๋ง ํจ. Java์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ถ๋ถ์ ์ ํ์
• JSTL, EL, ๊ทธ๋ฆฌ๊ณ Custom Tag๋ฅผ ํ์ฉํด View ๋ก์ง์ ์ฒ๋ฆฌ
→ Controller๋ Servlet์ผ๋ก ์ฒ๋ฆฌํด์ฃผ๋ ๊ฒ์ด ์ ํฉ
→ "VIEW ๋ VIEW ๋ต๊ฒ!"
2๏ธโฃ FrontController ํจํด
• FrontController ํจํด์ ๋ชจ๋ ์์ฒญ์ ํ๋์ ์๋ธ๋ฆฟ์ด ์ฒ๋ฆฌ, ์๋ธ๋ฆฟ์ด ์์ฒญ์ ๋ถ๊ธฐํ์ฌ ์๋ง์ ์ฒ๋ฆฌ๋ฅผ ํ๋๋ก ์ ๋
• FrontController.java๋ ์ผ์ข ์ ์๋ด ๋ฐ์คํฌ ์ญํ
3๏ธโฃ FrontController ๊ตฌํ ์์
• @WebServlet("*.do") ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ๋ชจ๋ .do ์์ฒญ์ ์ฒ๋ฆฌํ๋๋ก ์ค์
• doAction() ๋ฉ์๋๋ ์์ฒญ URI๋ฅผ ๋ถ์ํ๊ณ , ์๋ง๋ ์ฒ๋ฆฌ ๋ก์ง์ ๋ถ๊ธฐ
• ActionFactory๋ ์์ฒญ์ ๋ง๋ ์ก์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ํด๋น ์์ ์ ์ฒ๋ฆฌ
FrontController.java ์ฝ๋
@WebServlet("*.do")
public class FrontControllerDo extends HttpServlet {
private static final long serialVersionUID = 1L;
private ActionFactory factory;
public FrontControllerDo() {
super();
factory = new ActionFactory();
}
private void doAction(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
String command = request.getRequestURI();
System.out.println("CTRL ๋ก๊ทธ : action ["+command+"]");
command = command.replace("/honeyComboFactory/", "");
System.out.println("COMMAND ["+command+"]");
Action action = factory.getAction(command);
ActionForward forward = action.execute(request);
if(forward == null) {
response.sendRedirect("error/errorPage.jsp");
}
if(forward.isRedirect()){
response.sendRedirect(forward.getPath());
}
else{
RequestDispatcher dispatcher = request.getRequestDispatcher(forward.getPath());
dispatcher.forward(request, response);
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("๋ก๊ทธ [GET] ์์ฒญ ํธ์ถ๋จ");
doAction(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("๋ก๊ทธ [POST] ์์ฒญ ํธ์ถ๋จ");
doAction(request,response);
}
}
4๏ธโฃ ์ก์ ํด๋์ค ๋ฐ ์ก์ ํฉํ ๋ฆฌ
• ์ก์ ํด๋์ค๋ execute() ๋ฉ์๋๋ฅผ ํตํด ์์ฒญ์ ๋ง๋ ์ฒ๋ฆฌ๋ฅผ ๋ด๋น
• ActionFactory๋ URI๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํด๋น ์ก์ ์ ์ฐพ์ ๋ฐํํ๋ ์ญํ
5๏ธโฃ ํ์ด์ง ํฌ์๋ฉ
• ์๋ธ๋ฆฟ์์ ๋ทฐ๋ฅผ ์ฒ๋ฆฌํ ๋๋ RequestDispatcher๋ฅผ ์ฌ์ฉํ์ฌ JSP๋ก ๋ฐ์ดํฐ๋ฅผ ํฌ์๋ฉ
• dispatcher.forward(request,response)๋ฅผ ํตํด JSP ํ์ด์ง๋ก ์์ฒญ์ ์ ๋ฌ, ํด๋น JSP ํ์ด์ง์์ ๋ทฐ๋ฅผ ๋ ๋๋ง
6๏ธโฃ URL ํจํด๊ณผ ํ๋ผ๋ฏธํฐ ์ฒ๋ฆฌ
detailPage.do?bum=<%data.getBnum()%>
์์ ๊ฐ์ด URL์ ํ๋ผ๋ฏธํฐ๋ฅผ ํฌํจํ์ฌ ์์ฒญ์ ๋ณด๋ผ ์ ์์
• doGet์ด๋ doPost์์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์์, ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ํ ๋ทฐ์ ์ ๋ฌ
โ๏ธ JSP์์ ์๋ธ๋ฆฟ์ผ๋ก์ ์ ํ์ ๊ตฌ์กฐ์ ์ผ๋ก ํจ์ฌ ๊น๋ํ๊ณ ํ์ฅ์ฑ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ฑ ๊ฐ๋ฅ
โ๏ธ FrontController ํจํด์ ์ ์ฉํ๋ฉด ์์ฒญ์ ์ค์์์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ์ฌ, ์ ์ง๋ณด์์ ํ์ฅ์ด ์ฉ์ด
โ๏ธ JSP๋ ์ค์ง ๋ทฐ๋ฅผ ๋ด๋นํ๊ฒ ํ์ฌ, ์ฝ๋์ ์ญํ ๋ถ๋ด์ ๋ช ํํ ํ ์ ์์
โ๏ธ ๋ทฐ ๋ก์ง๊ณผ ๋น์ฆ๋์ค ๋ก์ง์ด ๋ถ๋ฆฌ → ์ฝ๋์ ๊ฐ๋ ์ฑ์ด ๋์์ง๊ณ , ์ ์ง๋ณด์๊ฐ ์ฌ์์ง