JAVA
MVC모델이란
docc
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>
// 위 아래 같은 결과값