Springfileboard2

RedNine·2023년 3월 6일
0

스프링

목록 보기
11/17

🍳글상세보기(조회수) 및 다운로드

글상세보기 : 하나의 컨트롤러에서 여러개의 요청에 따라 다른 메서드호출

🎈글상세보기

🎁dispatcher-servlet.xml

  • <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" />

🎁BoardMapper.xml

조회수

<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>

🎁BoardDao

    1. 게시물에 대한 게시물 한 개 찾기
      public BoardCommand selectBoard(Integer seq);//~(int seq);
    1. 게시물번호에 해당하는 조회수 증가
      public void updateHit(Integer seq);//~(int seq);

🎁BoardDaoImpl

: 2개의 메서드를 호출하도록 코딩한다.

🎁DetatilController

  • com.board.controller.DetatilController작성
  • 위에서 작업한 2개의 메서드를 호출
  • boardView.jsp

  • 타일즈를 사용했다면 tiesdef.xml에서 어디로 이동하라고 설정
  • 타일즈를 사용하지 않은상태->boardView.jsp를 바로 작성하면 된다.->일반적으로 viewResolver가 존재해야한다

🎁tilesdef.xml

  • 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>

🎁boardView.jsp 화면에 출력

  • ${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

  • DetailController에 작성(요청해서 처리해주는 메서드이기때문이다.)
  • dispatcher-servlet.xml에는 글상세보기 할 때 추가했다.

< 다운로드를 위한 뷰를 새로 작성해야한다. >

  • AbstractView클래스를 상속을 받아서 새로 뷰를 작성(대화상자의 형태) -> DownloadView
  • 기존의 jsp와 다르다
  • renderMergedOutputModel()를 이용해서 다운로드 처리해준다.(모델)
  • 다운로드 받는 파일의 형식, 위치, 크기를 지정한다.
  • 브라우저별로 다운로드 받을시 한글처리해야한다.

🎁DownloadView

: 클래스를 상속받아서 생성

  • renderMergedOutputModel : 다운로드를 시켜주는 기능을 가지고 있는 메서드이다.

🎨DownloadView 메서드

  • 다운로드를 따로 처리해 줄 수 있는 전용 뷰 클래스
  • jsp 다운로드 예제 : contentType="application/download" <- 기존에는 "text/html"
  • 다운로드 받는 화면으로 자동으로 전환한다.

🎨renderMergedOutputModel 메서드

  • 다운로드를 시켜주는 기능을 가진 메서드
  • 모델값(화면에 출력할 대상자)를 매개변수로 전달받아서 처리해주는 메서드

  • 대화상자에서 원하는 위치를 다운로드 대화상자에서 지정할 수 있다.
  • Content-Disposition => 다운로드를 받은 위치(키명)
  • attachment;fileName=다운로드 받을 파일명
  • exe,bat => 이진파일도 다운 -> Content-Transfer-Encoding -> binary로 지정한다.

🎨중간 결과

DownloadView 빈즈 클래스의 객체가 생성이 되지 않아서 메서드를 호출하지 못하기때문에 발생한 에러메세지이다.

🎁distpacter-servlet.xml

  • DownloadView를 빈즈로 등록한다.

결과확인

0개의 댓글

관련 채용 정보