[JSP] 게시판 미니 프로젝트 - MVC2패턴 적용

2020. 10. 26. 20:46·💻 Dev/JSP & Servlet

JSP & Servlet을 공부하며 이를 적용시키기 위해 프론트엔드 1분과 미니 프로젝트를 만들어 보았다.

 

기능은 

- 

- 

- 

 

 

 

 

그동안 포스팅이 뜸했던 이유인 게시판 프로젝트가 막바지에 이르러서.. 하나씩 포스팅하려고 한다.

우선 mvc패턴을 안다는 전제 하에, 내 프로젝트 구조는 위처럼 되어 있다.

 

동작구조

  • View - 화면에 나오는 화면 페이지, 즉 jsp 파일
  • Controller - action객체를 생성해 view에서 다른 view로 가는 경로를 제어하는 공장
  • Action - view의 경로를 갖고 있으며, view에게 보여줄 데이터 VO(DTO)를 처리
  • Service - 수동 커밋 방식을 사용할 것이기 때문에 DAO와 연결 후 필요한 시점에서 한 번에 커밋하는 용도
  • DAO - 데이터베이스에서 값을 조회하거나 데이터를 수정, 삭제, 삽입하는 용도

 

 

 

Action - 로직, 경로 설정

우선 Action 인터페이스와 ActionForward클래스를 생성한다.

Action interface를 정의하고 xxxAction.java 같은 자손들을 생성함으로써 각 Action객체마다 다른 경로를 저장시켜 보낼 수 있다. 

자바의 특징 중에 하나인 다형성을 적용한 것이다.

 

Action action = new xxxAction();... 

 

 

 

 

[Action.java]

public interface Action {
    ActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception;
}

 

[ActionForward.java]

//페이지 이동을 처리하기 위한 클래스
public class ActionForward {
	private String path;	//이동할 페이지 경로값을 갖는 변수
	private boolean redirect;	//sendRedirect와 forward 중 어떤 것을 이용해서 페이지 이동할지를 결정하기 위한 boolean 변수

	public ActionForward() {

	}
	public ActionForward(String path,boolean redirect) {
		this.path=path;
		this.redirect=redirect;
	}

	public String getPath() {
		return path;
	}

	public void setPath(String path) {
		this.path = path;
	}

	public boolean isRedirect() {
		return redirect;
	}

	public void setRedirect(boolean redirect) {
		this.redirect = redirect;
	}
}

 

 

그다음 view에서 join.do를 요청 시 경로를 제어할 Action을 만들어주어야 한다.

Action 인터페이스를 상속받아 각 view마다 경로를 제어하는 Action을 각각 만들어줘야 한다.

 

 

[MemberJoinAction.java]

public class MemberJoinAction implements Action {
    @Override
    public ActionForward execute
            (HttpServletRequest request, HttpServletResponse response) {
        ActionForward forward = new ActionForward();
        forward.setPath("/views/join.jsp");	//경로 설정
        return forward;
    }
}

 

 

 

Controller

그리고 BoardController라는 서블릿을 만든 뒤 매핑을 *. do로 해준다.

만약 메인화면에서 게시판 화면으로 이동하고 싶을 때 xxxx.do로 이동해줘!라고 요청하면

Controller가 해당 action객체를 생성하고 execute를 실행함으로써 view가 이동한다.

 

여기서 페이지 전환 기능 sendRedirect와 RequestDispatcher.forward 차이점을 알아야 한다.--포스팅 후 삽입 예정--

 

 

[BoardController.java] 

@WebServlet("*.do")
public class BoardController extends HttpServlet {
    public BoardController() {
        super();
    }

    protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");

        String RequestURI = request.getRequestURI();
        String contextPath = request.getContextPath();
        String command = RequestURI.substring(contextPath.length());

        ActionForward forward = null;
        Action action = null;

        if (command.equals("/join.do")) {	//view에서 join.do를 호출했을 때
            action = new MemberJoinAction();	//실행되는 Action
            try {
                forward = action.execute(request, response);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }


        if (forward != null) {
            if (forward.isRedirect()) { //isRedirect가 true일 때(정보 처리) sendRedirect로 이동
                response.sendRedirect(forward.getPath());
            } else {                    //isRedirect가 false일 때(화면 이동) forward로 이동
                RequestDispatcher dispatcher
                        = request.getRequestDispatcher(forward.getPath());
                dispatcher.forward(request, response);
            }
        }
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doProcess(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doProcess(request, response);
    }
}

 

View

이렇게 jsp -> jsp 전환이 아닌 jsp > controller > jsp 이렇게 view를 이동하는 게 mvc2 패턴이다.

<a href="/join.do">
	<h3 class="join">회원가입</h3>
</a>

 

회원가입 a태그를 누르면 

 

주소창에 join.do가 뜨면서 view가 이동한 것을 확인할 수 있다. (당연히 이동할 view는 따로 만들어줘야 한다.)

 

 

 

단순한 화면 이동만 포스팅해서 Service와 DAO를 사용하지 않았는데 데이터를 건드려야 할 때 설명하겠습니다!

 

 

 

github

 

GitHub - kyunghyun-Park/bee: 📒 JSP mvc2 BoardProject

📒 JSP mvc2 BoardProject. Contribute to kyunghyun-Park/bee development by creating an account on GitHub.

github.com

 

저작자표시 비영리 (새창열림)

'💻 Dev > JSP & Servlet' 카테고리의 다른 글

JSP 파일이 브라우저 화면에 출력되기까지의 과정은?  (0) 2025.01.09
[JSP] 11.JDBC(Java Database Connectivity)  (0) 2020.09.16
[JSP] 10.세션(Session)  (0) 2020.09.15
[JSP] 9.쿠키(Cookie)  (0) 2020.09.10
[JSP] 8.jsp request,response  (0) 2020.09.01
[JSP] 7.form 데이터 처리  (0) 2020.08.31
'💻 Dev/JSP & Servlet' 카테고리의 다른 글
  • JSP 파일이 브라우저 화면에 출력되기까지의 과정은?
  • [JSP] 11.JDBC(Java Database Connectivity)
  • [JSP] 10.세션(Session)
  • [JSP] 9.쿠키(Cookie)
현주먹
현주먹
대구 불주먹 출신 현주먹의 개발.log
  • 현주먹
    현주먹의 개발로그
    현주먹
  • 전체
    오늘
    어제
    • 전체글 (167) N
      • 👶🏻 CS (15)
        • Operating System (8)
        • Database (4)
        • Data Structure (2)
        • Software Engineering (1)
      • 💻 Dev (54)
        • Java & OOP (24)
        • Spring (4)
        • JPA (5)
        • Test Code (1)
        • Database (1)
        • JSP & Servlet (13)
        • Etc (6)
      • 💡 Algorithm (25)
        • 인프런 (9)
        • 백준 (16)
      • 🛠 DevOps & Tool (11)
        • Linux (4)
        • AWS (1)
        • Git (2)
        • Etc (4)
      • 📝 끄적끄적 (62) N
        • 후기 및 회고 (5)
        • TDD, 클린 코드 with Java 17기 (3)
        • F-Lab (23)
        • 🖥️ 자바의 정석 (11)
        • 📖 Clean Code (3)
        • 항해99 코테 스터디 (11)
        • 📖 가상 면접 사례로 배우는 대규모 시스템 설계 .. (5) N
  • 블로그 메뉴

    • 🐈‍⬛ GitHub
    • TIL repository
  • 인기 글

  • 최근 글

  • 최근 댓글

  • 태그

    인프런 특정문자뒤집기
    99클럽
    F-Lab
    오블완
    로또 미션
    C
    JPA
    jsp
    오라클
    개발자멘토링
    객체지향
    PostGreSQL함수
    에프랩
    til
    ==와 equals()
    항해99
    f-lab 후기
    자바의신절판
    백준10250
    TDD 클린 코드 with Java
    코딩테스트준비
    NextSTEP
    자바의정석
    백준
    인프런 단어뒤집기
    에프랩 후기
    개발자취업
    코테스터디
    데브클럽
    티스토리챌린지
  • hELLO· Designed By정상우.v4.10.2
현주먹
[JSP] 게시판 미니 프로젝트 - MVC2패턴 적용
상단으로

티스토리툴바