고래씌
[Spring] 7. Application 전역에 있는 데이터를 저장(Intercepter) 본문
1. Intercepter
1) Application 전역에 boardType 리스트를 저장
☞ filter가 가장먼저 받고 다음 Dispatcher가 받음
☞ Interceptor : 디스패처서블릿에서 컨트롤러에 요청내용을 전달할 때 인터셉터가 중간에 요청을 가로챈다.
스프링의 모든 빈객체에 접근이 가능하며 일반적으로 로그인체크, 권한체크, 프로그램실행시간체크, 로그확인시 사용된다. 컨트롤러에서 디스패처서블릿을 응답시킬때도 가로챔
▶ servelt-context.xml
▶ BoardTypeInterceptor
=> common 폴더아래 interceptor 폴더 생성후, BoardTypeInterceptor 클래스 파일 생성
=> HandlerInterceptor 안에 있는 preHandle 함수를 오버라이딩 하여 사용
☞ application scope에 boardType list를 저장
☞ 항상저장시키는게 아니라 처음 한번만 저장할 예정(application에 boardType list가 없는 경우)
☞ application객체 얻어오기
package com.kh.spring.common.interceptor;
import java.util.List;
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 com.kh.spring.board.model.dao.BoardDao;
import com.kh.spring.board.model.vo.BoardType;
public class BoardTypeInterceptor implements HandlerInterceptor{
@Autowired
private ServletContext application; //application에 의존성 주입
@Autowired
private BoardDao boardDao;
// 전처리(pre Handle) 함수 : 컨트롤러가 서블릿의 요청을 처리하기 "전"에 먼저 실행되는 함수
@Override
public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object handler) throws Exception {
// Obejct handler, HttpServletResponse res 의미없는 코드임. 오버라이딩되어 매개변수를 일단 넘겨받아야하기 때문에 쓴 것임
// application scope에 boardType list를 저장
// 항상저장시키는게 아니라 처음 한번만 저장할 예정(application에 boardType list가 없는 경우)
// application객체 얻어오기
if(application.getAttribute("boardTypeList") == null) {
// 어플리케이션 스코프에 boardTypeList로 된 데이터가 없는 경우, db에서 정보를 조회해서 application scope에 저장
List<BoardType> boardTypeList = boardDao.selectBoardTypeList();
application.setAttribute("boardTypeList", boardTypeList);
application.setAttribute("contextPath", req.getContextPath());
// /spring이라는 contextPath라는 정보를 application 전역에 contextPath라는 이름으로 저장한 것!
// header.jsp에 contextPath 함수 선언한 것은 이제 지워도 된다! 왜냐하면 application 전역에 contextPath를 저장했기 때문
}
return true; // 의미없는 코드. 반환값이 boolean이라서
}
}
☞ /spring이라는 contextPath라는 정보를 application 전역에 contextPath라는 이름으로 저장한 것!
☞ header.jsp에 contextPath 함수 선언한 것은 이제 지워도 된다! 왜냐하면 application 전역에 contextPath를 저장했기 때문
=> header.jsp에서 contextPath 함수를 지정한것을 주석처리해도 contextPath를 사용할 수 있게된다.
▶ BoardDao.java
▶ BoardDaoImpl.java
▶ board-mapper.xml
<!-- Application 전역에 boardType 가 담긴다! -->
<select id="selectBoardTypeList" resultType='boardType'>
SELECT *
FROM BOARD_TYPE
ORDER BY BOARD_CD
</select>
▶ header.jsp
☞ DB에 자유게시판을 추가하면 자동으로 웹에도 자유게시판이 추가된다!
▶ boardListView.jsp
=> 해당하는 게시판의 이름이 자동으로 변경되도록 설정
▶ 결과
'Server > Spring' 카테고리의 다른 글
[Spring] 8-2. 사진게시판(사진 여러개일 때(다중 insert문)) (0) | 2024.01.24 |
---|---|
[Spring] 8-1. 일반 게시글 등록(크로스사이트스크립트 공격 방지) (0) | 2024.01.24 |
[Spring] 6-2. 게시판 검색기능 (0) | 2024.01.24 |
[Spring] 6-1. 게시판 목록, 페이징 (0) | 2024.01.23 |
[Spring] 5. 비동기 요청 처리 기능(아이디 중복검사, 회원 정보 조회) (0) | 2024.01.23 |