본문 바로가기
Kosta DevOps 과정 280기/Java

프론트 컨트롤러

by 롯슈83 2024. 7. 15.

Controller : 컨트롤러

  • 사용자의 요청을 파악하여 일처리를 위한 모델을 결정해주고 그 모델이 처리한 결과를 뷰에서 사용할 수 있도록 상태 유지하고 해당 뷰 페이지로 이동시키는 역할을 수행한다.

 

Front Controller : 프론트 컨트롤러

  • 웹 어플리케이션의 정문 앞에 서서 모든 사용자의 요청을 파악하는 컨트롤러
  • 각각의 요청에 따른 컨트롤러를 따로 만들지 않고, 한 개만 만들어서 처리하는 방식을 말한다.

 

서비스명 파악하기

  • 프론트 컨트롤러의 겨우 모든 요청을 하나의 컨트롤러가 받아서 처리하기 때문에 사용자가 어떠한 서비스를 원하는지 파악할 필요가 있다. 
String url = request.getRequestURL().toString();
		String uri = request.getRequestURI();
		
		System.out.println(url);
		System.out.println(uri);

 

  • url : 클라이언트가 요청한 전체 주소(프로토콜을 포함)를 갖고온다.
  • uri : 클라이언트가 요청한 리소스의 경로를 갖고온다.

 

위의 코드를 사용할 경우 기능마다 if컨디션으로 제어하므로 간략하게 하는 기법이 필요하다.

 

인터페이스

미래에 만들어질 메소드의 이름을 하나로 통일하여 일반화 시키는 것

 

예시

  • 다른 코드는 평소와 같게 하되 Controllor 부분만 다음과 같이 하나의 파일로 통일
  • if  문으로 관리하는 방식
<!-- web.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>day0715_mvc_frontcontrol</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.jsp</welcome-file>
    <welcome-file>default.htm</welcome-file>
  </welcome-file-list>
  
  <servlet>
  	<servlet-name>kosta</servlet-name>
  	<servlet-class>com.kosta.controller.KostaController</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>kosta</servlet-name>
  	<url-pattern>*.do</url-pattern>
  </servlet-mapping>
</web-app>

 

package com.kosta.controller;

import java.io.IOException;
import java.util.ArrayList;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.kosta.db.CustomerDAO;
import com.kosta.db.CustomerVO;

public class KostaController extends HttpServlet {
	private CustomerDAO dao;
	
	public KostaController() {
		dao = new CustomerDAO();
	}
	public void pro(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		String uri = request.getRequestURI();
		String cmd = uri.substring(uri.lastIndexOf("/")+1);
		String viewPage = "";
		
		
		if(cmd.equals("listCustomer.do")) {
			ArrayList<CustomerVO> list = dao.findAll();
			request.setAttribute("list", list);
			viewPage = "listCustomer.jsp";
		}else if(cmd.equals("insertCustomer.do")) {
			viewPage = "insertCustomer.jsp";
		}else if(cmd.equals("insertCustomerOK.do")) {
			int custid = Integer.parseInt(request.getParameter("custid"));
			String name = request.getParameter("name");
			String address = request.getParameter("address");
			String phone = request.getParameter("phone");
			CustomerVO c = new CustomerVO();
			
			c.setCustid(custid);
			c.setName(name);
			c.setAddress(address);
			c.setPhone(phone);
			
			int re = dao.insert(c);
			
			if(re>0) {
				request.setAttribute("msg", "고객 정보 성공");
			}else {
				request.setAttribute("mag", "고객 정보 실패");
			}
			
			viewPage = "insertCustomerOK.jsp";
		}else if(cmd.equals("detailCustomer.do")) {
			int custid = Integer.parseInt(request.getParameter("custid"));
			
			CustomerVO c = dao.findByCustid(custid);
			
			request.setAttribute("c", c);
			viewPage = "detailCustomer.jsp";
		}else if(cmd.equals("updateCustomer.do")) {
			int custid = Integer.parseInt(request.getParameter("custid"));
			CustomerVO c = dao.findByCustid(custid);
			request.setAttribute("c", c);
			viewPage = "updateCustomer.jsp";
		}else if(cmd.equals("updateCustomerOK.do")) {
			request.setCharacterEncoding("UTF-8");
			
			int custid = Integer.parseInt(request.getParameter("custid"));
			String name = request.getParameter("name");
			String address = request.getParameter("address");
			String phone = request.getParameter("phone");
			
			CustomerVO c = new CustomerVO();
			c.setCustid(custid);
			c.setName(name);
			c.setAddress(address);
			c.setPhone(phone);
			
			int re = dao.update(c);
			
			if(re > 0) {
				request.setAttribute("msg", "고객 수정 성공");
			}else {
				request.setAttribute("msg", "고객 수정 실패");
			}
			
			viewPage = "updateCustomerOK.jsp";
		}else if(cmd.equals("deleteCustomer.do")) {
			//삭제할 고객번호를 받아 옵니다.
			int custid = Integer.parseInt(request.getParameter("custid"));
					
			//Dao를 통해서 해당 고객을 삭제합니다.
			int re = dao.delete(custid);
			
			//삭제여부를 상태유지 합니다.
			if(re > 0) {
				request.setAttribute("msg", "고객의 정보를 삭제하였습니다.");
			}else {
				request.setAttribute("msg", "고객의 정보 삭제에 실패하였습니다.");
			}
			
			viewPage = "deleteCustomerOK.jsp";
		}
		//결과를 보여줄 jsp 로 이동시키기 위한 RequestDispathcher 객체를 생성한다.
		RequestDispatcher dispatcher = request.getRequestDispatcher(viewPage);
		
		//jsp 로 이동한다.
		dispatcher.forward(request, response);
	}
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		pro(request,response);
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		pro(request,response);
	}
}

 

개선 1

  • 단, 이 방식은 if 컨디션으로 작업하기 때문에 작업량이 늘어날 수록 프론트 컨트롤러의 코드가 매우 복잡해지는 단점이 있다.따라서 개선 방법으로 인터페이스를 이용하여 KostaAction 으로 추상화 작업을 한다.
  • 다른 부분은 해당 인터페이스를 구현한 클래스를 만들어 작업하는 것이다. 또한 다시 if 문으로 하지말고, java Collection map 을 이용하여 작업을 한다.

 

 

 

'Kosta DevOps 과정 280기 > Java' 카테고리의 다른 글

Ajax 통신  (0) 2024.07.22
세션을 이용한 상태유지  (0) 2024.07.16
MVC 패턴  (0) 2024.07.15
jsp 문장 구성 요소  (0) 2024.07.15
confirm  (0) 2024.07.15