글상세보기 : 하나의 컨트롤러에서 여러개의 요청에 따라 다른 메서드호출
<bean class="com.board.controller.DetailController" />
등록- 파일 다운로드 뷰를 위한 전용 viewResolver 작성
- order는 위에 뷰를 보여주는 클래스 viewResolver와 순서를 정해주기 위함이다.
- viewResolover (0) : contentType="application/download";
- viewResolver(1) : contentType="text/html"
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" p:order="0" />
조회수
<update id="updateHit" parameterType="Integer"> update springboard2 set hit=hit+1 where seq=#{seq} </update>
글상세보기(레코드 한 개 출력)
<select id="selectBoard" parameterType="Integer" resultType="BoardCommand"> select * from springboard2 where seq=#{seq} </select>
- 게시물에 대한 게시물 한 개 찾기
public BoardCommand selectBoard(Integer seq);//~(int seq);
- 게시물번호에 해당하는 조회수 증가
public void updateHit(Integer seq);//~(int seq);
: 2개의 메서드를 호출하도록 코딩한다.
- com.board.controller.DetatilController작성
- 위에서 작업한 2개의 메서드를 호출
- boardView.jsp
- 타일즈를 사용했다면 tiesdef.xml에서 어디로 이동하라고 설정
- 타일즈를 사용하지 않은상태->boardView.jsp를 바로 작성하면 된다.->일반적으로 viewResolver가 존재해야한다
- tilesdef.xml에서 body=>/WEB-INF/tiles-view/boardView.jsp
<!-- 상세 페이지 --> <definition name="boardView" extends="boardList"> <put-attribute name="title" value="글상세보기"/> <put-attribute name="js" value=""/> <put-attribute name="body" value="/WEB-INF/tiles-view/boardView.jsp" /> </definition>
- ${board.seq} 형태로 출력 -> el문법이 적용이 안되기때문에
- ${board.Hit} =>오타 멤버변수는 소문자 ->대문자사용X
- 만약 EL이 인식이 안되면 페이지 상단에
<%@ page isELIgnored="false"%>
를 선언해야 EL문법을 사용할 수 있다.
<td>${board.hit}</td>
=> 문자열로 인식해서 이렇게 출력하는경우
<td> ${board.hit} </td> => <td>3</td>
(O)
결과 확인
🎁다운로드 이해
✨예제
- 상단에
contentType="application/download;
로 작성한다.
- jsp에서 다운로드 하는 방법이다.
- /board/file.do?filename=150468279425729.jpg =>업로드위치를 알고있어야한다.
- /board/file.do=>요청명령어에 해당하는 컨트롤러가 없다.FileController 작성X
- 서로 연관이 된 요청명령어는 하나의 컨트롤러에서 통합에서 작업=>컨트롤러 갯수를 줄일수가 있다.
- ex)ListController => 글목록보기 -> boardList.jsp => 검색어 X (검색어에 따라서 레코드 출력한다.)
- /search.do=>SearchController => 검색어 O
- /board/file.do=>FileController 따로 작성 O => 글상세보기와 연관 DetailController에 메서드추가(여기서는 다운로드하기 위해서는 글상세보기를 해야하기 때문에 연관되어 있다.)
- DetailController에 작성(요청해서 처리해주는 메서드이기때문이다.)
- dispatcher-servlet.xml에는 글상세보기 할 때 추가했다.
< 다운로드를 위한 뷰를 새로 작성해야한다. >
- AbstractView클래스를 상속을 받아서 새로 뷰를 작성(대화상자의 형태) -> DownloadView
- 기존의 jsp와 다르다
- renderMergedOutputModel()를 이용해서 다운로드 처리해준다.(모델)
- 다운로드 받는 파일의 형식, 위치, 크기를 지정한다.
- 브라우저별로 다운로드 받을시 한글처리해야한다.
: 클래스를 상속받아서 생성
- renderMergedOutputModel : 다운로드를 시켜주는 기능을 가지고 있는 메서드이다.
🎨DownloadView 메서드
- 다운로드를 따로 처리해 줄 수 있는 전용 뷰 클래스
- jsp 다운로드 예제 : contentType="application/download" <- 기존에는 "text/html"
- 다운로드 받는 화면으로 자동으로 전환한다.
🎨renderMergedOutputModel 메서드
- 다운로드를 시켜주는 기능을 가진 메서드
- 모델값(화면에 출력할 대상자)를 매개변수로 전달받아서 처리해주는 메서드
- 대화상자에서 원하는 위치를 다운로드 대화상자에서 지정할 수 있다.
- Content-Disposition => 다운로드를 받은 위치(키명)
- attachment;fileName=다운로드 받을 파일명
- exe,bat => 이진파일도 다운 -> Content-Transfer-Encoding -> binary로 지정한다.
🎨중간 결과
DownloadView 빈즈 클래스의 객체가 생성이 되지 않아서 메서드를 호출하지 못하기때문에 발생한 에러메세지이다.
- DownloadView를 빈즈로 등록한다.