-
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