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 |