Web Application

Web Application

  • Web Application

    • 객체들 간(게시물 컨트롤러, 업무자, DAO) 역할 할당 및 수행 방식

    • Presentation

      • 웹 AP와 main이 있는 AP 비교
      • 웹 AP 요청에 따라 할 일이 정해진다(B요청을 하면 B요청에 대해서 처리하고 처리 결과를 응답)
      • main AP : main안에 있는 요청을 정해진 순서대로 수행

    • DataService(게시물DAO)

      • Table

        • 목적 : Table에 있는 값을 관리하고 이용하는 것
        • Table 수집(select), 열 변경(update), 행 삭제(delete), 새로운 행 쓰기(insert) 행동이 영구적으로 DB에 저장하기 위한 행동
        • DB에 접근할 수 있는 역할은 DAO만 할 수 있음
      • ex) 회원 등록 업무

        • 회원 정보 입력 창 준비 요청
        • 회원 등록 요청
        • 회원을 등록하기 위해서는 준비 과정이 필요하며 준비 과정(입력창)을 통해서 등록을 요청할 수 있다.
      • Usecase UML 그려보기

        • 시스템의 목표 : 시스템을 사용하는 사용자가 시스템을 통해 얻고자 하는 목표를 달성하기 위해 모든 사용의 경우를 만족시키는 것
        • 시스템의 목표를 달성하기 위해(모든 사용의 경우를 만족) 정리하는 모델이 Usecase Model

MVC(Model View Control)

  • MVC 기본 구조
    • 코드를 그림으로 표현한 것

  • MVC 기본 구조 예시 및 실습

    • 예시(게시물준비)

      package com.stone.springmvc.board.presentation;
      
      import java.util.ArrayList;
      
      import org.springframework.stereotype.Controller;
      import org.springframework.web.bind.annotation.GetMapping;
      import org.springframework.web.bind.annotation.PathVariable;
      import org.springframework.web.bind.annotation.PostMapping;
      import org.springframework.web.servlet.ModelAndView;
      
      import com.stone.springmvc.board.common.Board;
      import com.stone.springmvc.board.service.게시물업무자;
      
      @Controller
      public class Board컨트롤러 {
      		게시물업무자 한게시물업무자=new 게시물업무자();
      		
      		@GetMapping("/prepareboard")
      		public ModelAndView 게시물입력을준비하다() {
      			
      			ModelAndView mv = new ModelAndView();
      			mv.setViewName("게시물등록창");
      			// 뷰 이름 등록
      			// mv.addObject(attributeValue) // 보내는 데이터가 있으면 사용 
      			return  mv;
      		}
      }

      • Board컨트롤러에서 get방식으로 '게시물입력을준비하다'라는 메소드를 통해 '게시물등록창.jsp'라는 뷰에 접근하여 새로운 창을 준비
    • 예시(게시물목록조회)

      • 진행과정
        • main과 연결할 수 있게 Mapping을 지정하고 특정 행위를 할 수 있는 메소드를 입력한 후 메소드의 처리결과를 타입에 맞게 지정해주고 View에 새로운 창을 만들어 그 값을 전달

     package com.stone.springmvc.board.presentation;
     
     import java.util.ArrayList;
     
     import org.springframework.stereotype.Controller;
     import org.springframework.web.bind.annotation.GetMapping;
     import org.springframework.web.bind.annotation.PathVariable;
     import org.springframework.web.bind.annotation.PostMapping;
     import org.springframework.web.servlet.ModelAndView;
     
     import com.stone.springmvc.board.common.Board;
     import com.stone.springmvc.board.service.게시물업무자;
     
     @Controller
     public class Board컨트롤러 {
     		@GetMapping("/listboard")
     		public ModelAndView 게시물목록을출력하다() {
     			
     			
     			ArrayList<Board> 모든게시물들 = 한게시물업무자.모두수집하다();
     			// 모든게시물들 수집(업무처리)	
     			ModelAndView mv = new ModelAndView();
     			mv.setViewName("게시물목록창");
     			// 게시물목록창.jsp
     			mv.addObject("listboard", 모든게시물들);
     			// 게시물목록창.jsp에 모든게시물들을 listboard라는 이름으로 Mapping 
     			return mv;
     		}
     }

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ page import="java.util.ArrayList" %>
    <%@ page import="com.stone.springmvc.board.common.Board" %>
    <% ArrayList<Board> boards= (ArrayList<Board>) request.getAttribute("listboard"); %>
    <!-- 컨트롤러에서 Mapping한 listboard를 board로 저장 -->
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <!-- 게시물목록출력 -->
    <h1>게시물 목록</h1>
    <ul>
    <% for(int 일련번호=0;일련번호<boards.size();일련번호++){ 
    	Board 게시물 =boards.get(일련번호);//zero base
    %>
        <li><%=일련번호+1 %>  
            <a href="/board/<%= 게시물.getNo() %>"><%= 게시물.getTitle() %></a>
        </li>
    <%} %>
    </ul>
    <br><button onclick="location.href='/main'">메인</button>
    </body>
    </html>
    
    
  • 예시(게시물상세조회)
    • 진행과정
      • main과 연결할 수 있게 Mapping을 지정하고 특정 행위를 할 수 있는 메소드를 입력한 후 메소드의 처리 결과를 타입에 맞게 지정해주고 View에 새로운 창을 만들어 그 값을 전달
    • addObject는 새롭게 생성한 jsp파일에서 값을 사용하기 위해 만들어주는 메소드라고 생각
      package com.stone.springmvc.board.presentation;
      
      import java.util.ArrayList;
      
      import org.springframework.stereotype.Controller;
      import org.springframework.web.bind.annotation.GetMapping;
      import org.springframework.web.bind.annotation.PathVariable;
      import org.springframework.web.bind.annotation.PostMapping;
      import org.springframework.web.bind.annotation.RequestParam;
      import org.springframework.web.servlet.ModelAndView;
      
      import com.stone.springmvc.board.common.Board;
      import com.stone.springmvc.board.service.게시물업무자;
      
      @Controller
      public class Board컨트롤러 {
      		@GetMapping("/viewboard")
      		public ModelAndView 상세게시물을조회하다(@RequestParam("no") int 게시물번호) {
      			// @RequestParamint(" ") : 파라미터가 넘어올때 " "안의 이름으로 맞추겠다라는 뜻?
      
      			// 업무-게시물찾기
      			Board 특정게시물 = 한게시물업무자.찾다By번호(게시물번호);
      			ModelAndView mv = new ModelAndView();
      			mv.setViewName("게시물상세창");
      			// board에 게시물상세창.jsp 생성 
      			mv.addObject("board", 특정게시물);
      			// 여기 Controller에서 특정게시물 객체를 게시물상세창.jsp에서 사용하기 위해 board로 Mapping
      			return mv;
      		}
      }
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ page import="com.stone.springmvc.board.common.*" %>
    <% Board board= (Board) request.getAttribute("board"); %>
    <!-- controller에서 mapping된 board를 여기서 사용할 수 있도록 board로 지정 -->
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <h1>게시물 상세</h1>
    
     제목<%=board.getTitle()%> <br>
     내용<textarea cols="25" rows="5" name="contents" readonly><%= board.getContents()%></textarea><br>
    <button onclick="location.href='/boards'">목록</button>
    <button onclick="location.href='/main'">메인</button>
    <!-- board로 저장된 값의 제목, 내용을 출력 -->
    </body>
    </html>
    

좋은 웹페이지 즐겨찾기