YJ의 새벽
Spring 15 ( interceptor ) , 게시판 페이지 목록 본문
-- interceptors : 인터셉터를 모아둔 태그 , ( servlet-context.xml ) 에작성
-- interceptor : 요청이 Dispatcher Servlet 에서 Controller 에 도달하지 전, 또는 후에
요청 / 응답 객체 (req,resp ) 를 가로채서 사용할 수 있는 객체 .
--mapping : 가로챌 요청의 패턴을 지정
--beans:bean : 인터셉터 역할을 수행할 클래스를 찾아서 bean 으로 등록 .
-- servlet-context.xml 에 인터셉터 빈 추가 .
<interceptors>
<interceptor>
<!-- 가로챌요청의 패턴 지정 -->
<mapping path="/**"/>
<!-- 클래스 찾아 bean 등록 -->
<beans:bean id="boardTypeInterceptor" class="edu.kh.comm.common.interceptor.BoardTypeInterceptor"/>
</interceptor>
</interceptors>
-- 인터셉터가 요청을 가로채는 시기
1. preHandle ( 전처리 ) : 컨트롤러 수행 전
2. postHandle ( 후처리 ) : 컨트롤러 수행 후 ( 컨트롤러 수행 결과 참조 가능 )
3. afterCompletion ( View단 처리 후 ) : 보통 자원 잔환 ( close() ) 수행 .
-- 단, 비동기 요청 (자바내부의 별도 쓰레드요청) 은 가로채지 않음 .
package edu.kh.comm.common.interceptor;
@Slf4j
public class BoardTypeInterceptor implements HandlerInterceptor{
@Autowired
private BoardService boardService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
log.info("전처리 수행");
//application scope 에 "boardTypeList" 가 없을 경우
// 이를 조회하는 Service 호출 후 결과를 세팅
//application scope 객체 얻어오기.
ServletContext application = request.getServletContext();
if ( application.getAttribute("boardTypeList") == null ) {
List<BoardType> boardTypeList = boardService.selectBoardType();
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 {
log.info("후처리 수행");
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
log.info("View 처리 완료 후 수행");
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
*** Interceptor 로 "boardTypeList" 를 뽑아
-- application scope에 미리 저장 .
-- 저장된 "boardTypeList" 로 값 받아
-- Get 요청 실행.
---mybatis-config.xml 파일에 추가
<!-- SqlSessionTemplate 관련 설정 -->
<settings>
<setting name="jdbcTypeForNull" value="NULL"/>
</settings>
<!-- 별칭 작성 부분 -->
<typeAliases>
<typeAlias type="edu.kh.comm.member.model.vo.Member" alias="member"/>
<typeAlias type="edu.kh.comm.board.model.vo.Board" alias="board"/>
<typeAlias type="edu.kh.comm.board.model.vo.BoardDetail" alias="detail"/>
<typeAlias type="edu.kh.comm.board.model.vo.BoardImage" alias="boardImage"/>
<typeAlias type="edu.kh.comm.board.model.vo.BoardType" alias="boardType"/>
</typeAliases>
<!-- SQL이 작성되는 mapper 파일 위치를 등록 -->
<mappers>
<mapper resource="/mappers/member-mapper.xml"/>
<mapper resource="/mappers/myPage-mapper.xml"/>
<mapper resource="/mappers/board-mapper.xml"/>
</mappers>
-- BoardService . 서비스클래스 .
--- BoardDAO . DB 접근 클래스
--- board-mapper.xml 쿼리문 .
--- 콘솔로그 확인 ~!
----------------------------------------------------------------------------------------------------------------------------------------------------------------
게시판 글 띄어보자 .
--- 인터셉터로 application scope 에 "boardTypeList" 를 미리 저장해놨다 .
--- DB에 저장된 값으로 , '공지사항' , '자유게시판 ' , '질문게시판' 을 띄운다.
--- header.jsp 에서, jstl 지시자 추가 ,
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
--- BoardController . 컨트롤러 클래스 .
package edu.kh.comm.board.controller;
@Controller
@RequestMapping("/board")
public class BoardController {
@Autowired
private BoardService service;
//게시글 목록 조회
//@PathVariable ( "value" ) : URL 경로에 포함되어있는 값을 변수로 사용할수 있게하는역할
// --> 자동으로 request scope에 등록됨 --> jsp ${value} EL 작성가능.
@GetMapping("/list/{boardCode}")
public String boardList( @PathVariable("boardCode") int boardCode,
@RequestParam(value="cp", required = false, defaultValue = "1") int cp,
Model model ) {
// 게시글 목록조회 서비스 호출
// 1) 게시판 이름 조회 .
// 2) 페이지네이션 객체 생성
// 3) 게시글 목록 조회
Map<String,Object> map = null;
map = service.selectBoardList(cp,boardCode);
model.addAttribute("map",map);
return "board/boardList";
}
}
--- BoardService . 서비스 클래스
--- BoardDAO 클래스 , DB접근 클래스
--- board-mapper .xml 에 추가 !
<!-- 게시글 목록용 resultMap -->
<resultMap type="board" id="board_rm">
<id property="boardNo" column="BOARD_NO" />
<result property="boardTitle" column="BOARD_TITLE" />
<result property="createDate" column="CREATE_DT" />
<result property="readCount" column="READ_COUNT" />
<result property="memberNickname" column="MEMBER_NICK" />
<result property="thumbnail" column="THUMBNAIL" />
</resultMap>
<!-- 특정게시판 전체 게시글수 조회 -->
<select id="getListCount" resultType="_int">
SELECT COUNT(*) FROM BOARD
WHERE BOARD_CD = ${boardCode}
AND BOARD_ST = 'N'
</select>
<!-- -->
<!-- 게시글 목록 조회 -->
<select id="selectBoardList" resultMap="board_rm">
SELECT BOARD_NO,
BOARD_TITLE, MEMBER_NICK, READ_COUNT,
CASE WHEN SYSDATE - CREATE_DT < 1
THEN TO_CHAR(CREATE_DT, 'HH:MI')
ELSE TO_CHAR(CREATE_DT, 'YYYY-MM-DD')
END CREATE_DT,
(SELECT IMG_RENAME FROM BOARD_IMG
WHERE BOARD.BOARD_NO = BOARD_IMG.BOARD_NO
AND IMG_LEVEL = 0) THUMBNAIL
FROM BOARD
JOIN BOARD_TYPE USING(BOARD_CD)
JOIN MEMBER_S USING(MEMBER_NO)
WHERE BOARD_ST = 'N'
AND BOARD_CD = ${boardCode}
ORDER BY BOARD_NO DESC
</select>
--- boardList.jsp 가서 수정.
'Spring > Spring' 카테고리의 다른 글
Spring 17 ( 게시글 작성/수정) (0) | 2023.05.08 |
---|---|
Spring 16 ( pagination + 게시글조회 + 조회수증가(중복x)) (0) | 2023.05.02 |
Spring 14 ( log4jdbc 설정 ) (0) | 2023.05.01 |
Spring 13 ( 프로필 올리기 ( 이미지 수정 ) ) (0) | 2023.04.28 |
Spring 12-1 ( 암호화비밀번호 조회 + 회원탈퇴 ) (0) | 2023.04.28 |