[2023.01.05] 개발자 교육 73일 차 : 강의-Spring Boot 활동 [구디 아카데미]

DaramGee·2024년 1월 6일
0

복습

뷰(JSP)에서 사용하는 EL(Expression Language)

✅ 값을 표현하는데 사용되는 새로운 script 언어로 jsp의 기본문법을 보완하는 역할(즉, 보다 쉽게 값을 받아 출력할 수 있도록 해주는 표현어)✅ 값을 표현하는데 사용되는 새로운 script 언어로 jsp의 기본문법을 보완하는 역할(즉, 보다 쉽게 값을 받아 출력할 수 있도록 해주는 표현어)


  • 사용법

  • 스크립틀릿 <%%>이 아닌 HTML 영역에 바로 ${}를 사용하여 입력한다.

  • EL에서 보관소를 참조할 때 사용하는 이름!

  • pageScope -> JspContext

  • requestScope -> ServletRequest

  • sessionScope -> HttpSession

  • applicationScope -> ServletContext

  • 값은 어떤 방식으로 들어가 있나?

  • request.setAttribute : Servlet에서 사용되는 메서드, HttpServletRequest 객체에 데이터를 설정하는 방법. 설정한 데이터는 해당 요청이 끝날 때까지 유지되어 사용할 수 있음 -> 주로 JSP, Servlet이용하는 프로젝트에서 사용

  • model.addAttribute : Spring MVC에서 사용되는 메서드로, Spring MVC의 Model 객체에 데이터를 추가하는 방법. 설정한 데이터는 뷰로 전달되어 뷰에서 사용할 수 있음. -> Spring MVC 사용 시 Model을 통해 뷰에 데이터 전달시!

  • 값 표현식

  • 표기법 ${객체이름.프로퍼티}

  • 배열, List에서 꺼내기 : ${객체이름[순서]}

  • Map에서 꺼내기 : ${객체이름.map 키값}

[!quote] 값을 넣고, 값을 가져올 때 보다 쉽게 데이터를 다룰 수 있도록 도와주는 표현언어이다. 뷰 단에서 자바코드로 작성하지 않고, EL표현어로 작성하는 경우가 많다.

강의 내용

게시판 작업

  • Board 클래스 설계(회색라인)

  • 목적
    - 게시판 목록에서 하나의 게시글을 선택했을 때, 상세보기 페이지로 이동
    - 상세보기 페이지에는 상세글과 함께 댓글이 보이도록 처리
    - 상세보기 클릭시 해당 게시글의 HitCount가 하나씩 추가되도록 설계
    - 상세보기 기능(수정, 삭제, 목록보기)
    - 댓글(추가, 삭제)

  • Logic에서 구현되지 않고 호출만 된 메소드 : hitCount(), commentList() -> boardDetail()에서 사용함!!


  • 예외 처리

  • 코드 실행 중 여러 예외상황 발동할 수 있음(한 번에 만명이 이용하거나 할 때, 서버가 다운될 수 있음.)

  • 예외처리 관련 클래스 설계
    - demo 밑에 exception 패키지 아래 클래스 설계-> Exception을 상속받아, 각 에러마다 메시지 표시(사용자정의 예외처리 설정이 가능해진다.)
    - webapp에 error -> (예외컨트롤러)에서 보내질 페이지

  • 예외처리 방법
    - 기본 : try-catch문(기본적으로는 실행에서 바로 try-catch문을 사용하여 처리하지만, 웹페이지 구성시 오류처리 페이지 구성필요)
    - 클래스 설계 : 예외처리 클래스, 예외처리 화면 별도 구성

  • 클래스 설계 시, [[throw, thorws]]란?

  • throw는 예외를 강제로 발생시킨 후, 상위 블럭이나 catch문으로 예외를 던진다

  • throws는 자신을 호출하는 메소드에 예외처리의 책임을 떠넘기는 것

  • 예외 처리 방법
    1) try-catch (finally) - 다른 작업 흐름으로 유도
    2) throws - 호출한 쪽(부모)에게 예외 처리 위임하도록
    3) throw - 명확한 의미의 예외로 바로 처리 ==> 개발자들이 비즈니스 로직에서 처리하는 방식임!

  • 댓글처리

  • db연결 시, xml과 jsp에서 컬럼명이 통일되는지 확인 필요

  • 왜 select은 대문자고 그 외는 소문자일까??

  • 상세보기 페이지에서 게시글은 1건, 댓글은 0, 1, n건이 될 수 있다.

  • 따라서 게시글은 Map으로 처리하여 dmap으로 한 뒤 list의 0번 방으로 넣는다.

  • 댓글들은 각 댓글을 Map으로 처리하여 댓글들을 묶어 List로 처리하여 commentList로 한 뒤 comments라는 변수명으로 list의 1번방으로 넣는다.

  • 그렇게 되었을 때 상세보기 페이지 list의 구성은 아래와 같다.

[
	{dmap-게시글},
	{comments:[{댓글1},{댓글2},{댓글3}]}
]

  • 화면설계

  • 화면처리는 컨트롤러계층에서 한다. forward, redirect를 정하고, 또는 json 데이터로 처리하여 바로 보여주기도 한다.
  • 댓글처리는 @Controller & Model 클래스를 사용하여 redirect로 상세보기 페이지로 이동하도록 설계하였다.
  • jsp 상단에 스크립틀릿으로 값 가져오기 위한 선언 & 값 있는지 확인 작업
<%    
    int size = 0;//지변이니까 초기화를 생략하면 에러발생함.  
    int size2 = 0;//지변이니까 초기화를 생략하면 에러발생함.  
    List<Map<String, Object>> bList = (List)request.getAttribute("bList");  
    List<Map<String, Object>> commentList = null;  
    Map<String,Object> rmap = new HashMap<>();  
    if(bList != null){  
        size = bList.size(); //size 변수 담기  
        rmap = bList.get(0); //상세보기 내용  
        //댓글이 없을 때 처리도 해주자!!!!  
        if(bList.size()==2){  
        //코멘트 가져오기!!  
            Map<String, Object> comments = (Map)bList.get(1);  
			    if(comments.containsKey("comments")) {  
                List<Map<String, Object>> comList = (List)comments.get("comments");  
                commentList = (List)comments.get("comments");  
                size2 = comList.size();  
            }  
        }  
    }  
%>
  • html 부분에서는 EL 표현어를 사용하여 가져온 값에서 필요한 부분을 사용할 수 있다. 아래는 스크립틀릿으로 가져올 때, EL표현어로 가져올 때의 차이를 볼 수 있는 코드이다. bList 안에 map이 두 개(게시글, 댓글들)가 있는 상황이기 때문에 저렇게 사용했다 . (그래서 그닥 코드가 간결해졌다는 느낌이 들진 않는다. 그래도 작성할 때의 간결함이나, 데이터의 구조를 보기에는 EL이 나은 듯 하다.)
<input type="text" class="form-control"  value="<%=rmap.get("B_TITLE") %>">  
<input type="text" class="form-control"  value="${bList[0]["B_TITLE"]}">
  • 상세보기 화면

0개의 댓글