ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MVC모델이란
    JAVA 2021. 7. 25. 13:13

    MVC모델

    Login 전 페이지 1 - 게시물등록준비

    // 게시물등록준비에서 게시물등록으로 갈지 로그인준비로 갈지..

    요청1 -> 업무1 -> 뷰1 : 뷰1로 가거나 뷰2를 위한 업무2로 가거나
    |
    -(x)-> 뷰2 : 바로 다른 뷰로 가는건 안된다.
    |
    -(O)-> 업무2 -> 뷰2 : 업무검사로 간 후 뷰2가 나와야 한다.
    요청받았을 때 업무하는 것은 업무처리가 아니라 요청제어라고 한다.
    그래서 요청제어(= Control) 와 업무처리(= Model)로 나뉜다.

    Model(업무처리) - View(뷰) - Control(요청제어)- : MVC 모델

    View는 화면 출력하는 부분(디자인 부분)으로 칭하고,
    Model은 데이터베이스와 연동하는 부분 등 로직의 부분을 칭한다.
    Controller는 이 두 부분을 적절하게 연결시켜주는 역할을 한다. : 주로 Model의 데이터를 가져와 파일이동에 대해 제어(view갈지 다른 Model로 갈지)

    >> ViewResolver.java

    public class ViewResolver {
    	private static String path = "WEB-INF/views/";
    	
    	public static String getJspViewName(String viewName) {
            // 또 다른 요청의 "업무처리" 로 가야하는 경우
    		if(viewName.contains("forward:/")) {  // "forward:/" 단어가 포함되어 있다면.
                // subsstring(n) : index n번부터 끝까지를 가져옴
    			return viewName.substring("forward:/".length()-1) +".jsp";
    		}
    	    // 이 업무의 "view" 를 보여주는 경우
    		return path + viewName + ".jsp";
    	}
    }

    >> 게시물등록준비.jsp

    <% 
    	// 업무처리
    
    	// 1. 로그인 후 게시물등록이 가능
    	// 로그인시 session 에 올린 회원 번호를 얻어와 만약 로그인을 안했다면 null상태이므로 로그인화면으로 보내버림
    	boolean 로그인 = (session.getAttribute("no") == null) ? false:true;
    
    	// 테스트용 - 삭제 요망
    	로그인 = false; // 로그인된 것으로 간주
    	
    	// 실행 코드
    	String viewName= null;
    	if(!로그인){
    		viewName="forward:/로그인준비";
    		request.setAttribute("msg", "로그인 후 게시물 작성이 가능합니다.");
    	}else{
    		viewName = "게시물등록창";
    	}
    	
    	// 포워드해줌
    	RequestDispatcher rd = request.getRequestDispatcher(ViewResolver.getJspViewName(viewName));
    	rd.forward(request,response);
    %>

    Login & Board

    >> 로그인준비.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@page import="com.stone.board_member.util.ViewResolver"%>
    <%
    	//	1. 업무
    	//	1.1 업무규칙
    	
    	//	1.2 DB
    	
    	//	2. 다음경로(다른 업무 또는 결과인 뷰) 지정
    	
    	String viewName = "로그인창";
    	// 만약 게시물등록준비에서 넘어온 상태라면 거기에서 request.setAttribute 해온 값이 그대로 넘어와 또다시 넘긴다.
    	RequestDispatcher rd = request.getRequestDispatcher(ViewResolver.getJspViewName(viewName));
    	rd.forward(request,response);
    %>

    >> 로그인창.jsp

    <body>
    	${msg} <%= request.getAttribute("msg") %>
    	
    	<h1>로그인</h1>
    	<form action="" method="post">
    		id <input type="text" name="id" /><br>
    		password <input type="password" name="password" /><br>
    		<input type="submit" value="login"/> <input type="button" value="회원등록"/>
    	</form>
    	
    </body>

    >> 게시물등록준비.jsp (로그인 안되었다면 로그인준비로)

    <% 
    	// 업무처리
    
    	// 1. 로그인 후 게시물등록이 가능
    	// 로그인시 session 에 올린 회원 번호를 얻어와 만약 로그인을 안했다면 null상태이므로 로그인화면으로 보내버림
    	boolean 로그인 = (session.getAttribute("no") == null) ? false:true;
    
    	// 테스트용 - 삭제 요망
    	로그인 = true; // true: 로그인, false: not 로그인
    	
    	// 실행 코드
    	String viewName= null;
    	if(!로그인){
    		viewName="forward:/로그인준비";
    		request.setAttribute("msg", "로그인 후 게시물 작성이 가능합니다.");
    	}else{
    		viewName = "게시물등록창";
    	}
    	
    	// 포워드해줌
    	RequestDispatcher rd = request.getRequestDispatcher(ViewResolver.getJspViewName(viewName));
    	rd.forward(request,response);
    %>

    >> 게시물등록창.jsp

    <body>
    <h1>게시물등록</h1>
    <form action="게시물등록.jsp" method="post">
    제목 <input type="text" name="title" id="title"/><br>
    내용 <input type="text" name="contents" id="contents"/><br>
    <input type="submit" value="등록"/>
    </form>
    <%= (String)request.getAttribute("key1") %>
    </body>

    >> 게시물등록.jsp

    <%
    	// 요청 ===================
    	String 제목 = request.getParameter("title");
    	String 내용 = request.getParameter("contents");
    	Board board = new Board();
    	board.setTitle(제목);
    	board.setContents(내용);
    	
    	// 업무  ===================
    	boolean 로그인 = (session.getAttribute("no") == null) ? false:true;	
    	// 테스트용 - 삭제 요망
    	로그인 = true; // true: 로그인, false: not 로그인
    	
    	if(로그인){
    		Member writer = new Member();
    		// writer.setNo((Integer)session.getAttribute("no"));
            // 아직 로그인.jsp를 만들어서 session에 setAttribute를 하지 않았으니 인위로 넣었다.
            writer.setNo(1);
    		board.setWriter(writer);
    		BoardDAO dao = new BoardDAO();
    		dao.save(board);
    	}
    	
    
    	// 경로지정  ===================
    	String viewName= null;
    	if(!로그인){
    		viewName="forward:/로그인준비";
    		request.setAttribute("msg", "로그인 후 게시물 작성이 가능합니다.");
    	}else{
    		viewName = "게시물등록결과통보";
    		request.setAttribute("board", board);
    	}
    
    	// 포워드해줌
    	RequestDispatcher rd = request.getRequestDispatcher(ViewResolver.getJspViewName(viewName));
    	rd.forward(request,response);
    %>

    업무

    1. 로그인시 sesstion 공간에 작성자 번호를 넣어놓은 상태(그래야 로그인상태와 게시물작성시 작성자를 분별가능)

    2. boolean 로그인 == null 값은 숫자형에는 들어가지 않기 때문에 아직 object 형일 때 비교


    >> 게시물등록결과통보.jsp

    <body>
    <!-- getTitle() 메서드가 자동사용되어 title 을 가져올 수 있는 규칙이다.. -->
    ${board.title} 가 등록되었습니다.
    <%=((Board)request.getAttribute("board")).getTitle() %>
    </body>
    // 위 아래 같은 결과값

    'JAVA' 카테고리의 다른 글

    Servlet, 과도기 MVC  (0) 2021.07.25
    MVC모델2, JSTL  (0) 2021.07.25
    ConnectionPool,ViewResolver  (0) 2021.07.25
    UML만들기-DesignModel&class관계,maven프로젝트  (0) 2021.07.25
    게시물상세(model2.ver)  (0) 2021.07.25

    댓글

Designed by Tistory.