Spring - 게시판 종류

맑은 눈의 코드 👀·2023년 8월 20일
1

06_framework 이론

목록 보기
14/23
post-thumbnail

🐰Interceptor : 요청/응답을 가로채는 객체

형광펜 부분이 Interceptor 객체가 응답과 요청을 가로 채는 부분이다

Interceptor 객체을 사용하기 위해서는 HandlerInterceptor 인터페이스를 상속 받아야한다.
HandlerInterceptor 인터페이스는 추상 메소드의 접근제한자가 defualt로 구현 되어있어 impelments 했을 시 오류가 생기지 않는다.


이때 alt+shift+s누르고
"Override/implements method"
클릭하면
HandlerInterceptor 인터페이스 안에 모든 추상 메소드를 가져올수 있다!

🥕 HandlerInterceptor 추상메소드의 종류

prehandle(전처리) : dispacher Servlet -> Controller 사이
postHandle(후처리) : Controller -> Dispatchar Servlet 사이
afterCompletion (뷰가 완성 후) : View Resolver -> Dispacher Servlet 사이


🥕서버 실행시 NAV에 게시판 종류 보이게 해 보자!

게시판의 종류가 수시로 변경 될 수 있어 코드의 유지 보수를 위해 자주 사용하는 방법이라고 한다!

👀BoardTypeInterceptor.java 클래스

1) HandlerInterceptor 인터페이스 상속 -> implements
2) 추상메소드 오버라이딩
3) application 내장객체 얻어오기

ServletContext application = request.getServletContext()

4) System.out.println(boardTypeList); 아래와 같이 출력됨

[{BOARD_NAME=공지사항, BOARD_CODE=1},
{BOARD_NAME=자유 게시판, BOARD_CODE=2},
{BOARD_NAME=테스트 게시판, BOARD_CODE=3},
{BOARD_NAME=질문 게시판, BOARD_CODE=4},
{BOARD_NAME=점심 게시판, BOARD_CODE=5}] 
package edu.kh.project.common.interceptor;

import java.util.List;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import edu.kh.project.board.model.service.BoardService;

// Interceptor : 요청/ 응답을 가로채는 객체
// Client <-> Filter <-> Dispather Servlet <-> Interceptor <-> Controller
public class BoardTypeInterceptor implements HandlerInterceptor {

	@Autowired
	private BoardService service;
	
	/*
	 * preHandle(전처리)  : Dispatcher Servlet -> Controller 사이 
	 * postHandle(후처리) : Controller -> Dispatcher Servlet 사이
	 * afterCompletion  (뷰가 완성 후): View Resolver -> Dispacher Servlet 사이 
	 * 
	 * */
	
	// 전처리
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		
		// application scope 내장객체 얻어오기
		ServletContext application = request.getServletContext();
		
		// application scope에 BOARD_TYPE이 조회 되어 세팅이 되지 않았다면
		// 	-> 서버가 시작되고 난 후 누구도 요청 한 적이 없을 경우
		if(application.getAttribute("boardTypeList")== null) {
			
			//조회 서비스 호출 
			System.out.println("BOARD_TYPE 조회 서비스 호출");
			List<Map<String, Object>> boardTypeList = service.selectBoardTypeList();
			
			
			System.out.println(boardTypeList);
			//application scope에 세팅
			application.setAttribute("boardTypeList", boardTypeList);
		}
		
		
		return HandlerInterceptor.super.preHandle(request, response, handler);
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
	}

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
	}
}

👀BoardService.java 인터페이스

package edu.kh.project.board.model.service;

import java.util.List;
import java.util.Map;

public interface BoardService {

	/** 게시판 종류 목록 조회
	 * @return boardTypeList
	 */
	List<Map<String, Object>> selectBoardTypeList();

}

👀BoardService.java 클래스

package edu.kh.project.board.model.service;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import edu.kh.project.board.model.dao.BoardDao;

@Service
public class BoardServiceImpl implements BoardService{
	
	@Autowired
	private BoardDao dao;
	
	//게시판 종류 목록 조회
	@Override
	public List<Map<String, Object>> selectBoardTypeList() {
		return dao.selectBoardTypeList();
	}
}

👀BoardDAO.java 클래스

package edu.kh.project.board.model.dao;

import java.util.List;
import java.util.Map;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository
public class BoardDao {
	
	@Autowired
	private SqlSessionTemplate sqlSession;

	/** 게시판 종류목록 조회
	 * @return boardTypeList
	 */
	public List<Map<String, Object>> selectBoardTypeList() {
		return sqlSession.selectList("boardMapper.selectBoardTypeList");
	}
}

👀board-mapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="boardMapper">
	
	<!-- resultType이 "map"인 경우
		K: 컬럼 명 (BOARD_CODE , BOARD_NAME)
		V: 컬럼 값 (	  1 	 ,   공지사항	 )
	 -->
	
	<!-- 게시판 종류목록 조회 -->
	<select id="selectBoardTypeList" resultType="map">
		SELECT * FROM BOARD_TYPE ORDER BY 1
	</select>

</mapper>

👀BOARD_TYPE 데이블 데이터

profile
나를 죽이지 못하는 오류는 내 코드를 더 강하게 만들지ㅋ

0개의 댓글