*Pagination
페이지간 이동을 하기위해.
[ << ] … [ 1 ] [ 2 ] [ 3 ] ... [ >> ]
int pageNumber=3;
2.화면에 보여줄 시작페이지 번호
int startPage=(( currentPage - 1)/pageNumber) * pageNumber+1; //1,2,3 => 1, 4,5,6 =>2
3. 화면에 보여줄 마지막 페이지 번호
int endPage= (((startPage-1)+pageNumber)/pageNumber)*pageNumber;
4. 총 페이지 수가 연산된 마지막 페이지 수보다 작다면 총 페이지수가 마지막 페이지수로 설정.
if( totalPage <= endPage){
endPage=totalPage;
}
5. 첫페이지가 인덱스화면 아닌경우
int movePage=0;
StringBuilder prevMark=new StringBuilder();
prevMark.append(“[ << ]”);
if( currentPage > pageNumber){ // 시작페이지보다 1적은 페이지로 이동
movePage=startPage-1;
prevMark.delete( 0,prevMark.length );
prevMark.append(“[ <a href=‘board_list.jsp?currentPage=”).append( movePage ).
append(“’> << </a> ] “ );
}
prevMark.append(“ … “);
6.시작페이지 번호부터 끝 페이지 번호까지 화면에 출력
movePage=startPage;
StringBuilder pageLink=new StringBuilder();
while( movePage <= endPage ){
if( movePage == currenPage ) { //현재 페이지는 링크를 활성화할 필요가 없다.
pageLink.append(“[ “).append(currentPage).append(“ ] “);
}else{
pageLink.append(“[ <a href=‘board_list.jsp?currentPage=“).append(movePage)
.append(“’>”).append(movePage).append(“</a> ] “);
}
movePage++;
}
7. 뒤에 페이지가 더 있는경우
StringBuilder nextMark=new StringBuilder(“[ >> ]”);
if( totalPage > endPage ){
movePage=endPage+1;
nextMark.delete(0,nextMark.length);
nextMark.append(“[ <a href=‘board_list.jsp?currentPage=“).append(movePage)
.append(“’>”).append(“>>”).append(“</a> ]”);
}
*이미지 미리보기
- 이미지를 선택하면 보안 이슈가 이슈가 있어서 바로 접근이 불가능하다.
=> JavaScript : FileReader Stream을 사용한다.
작업순서)
1.HTML File Control에 접근
$(“selector”).이벤트함수(function( evt ){
-파일을 선택하면 해당파일이 evt객체 target속성에 files배열로 얻어진다.
var file=evt.target.files[0];
2.스트림을 생성
var reader=new FileReader();
3. FileReader 객체의 onload이벤트 핸들러 설정
reader.onload=function( evt ){ //파일읽기 작업이 완료(onload)이되면 함수 호출
$(“#이미지id”).prop(“src”, evt.target.result); //src 속성에 선택한 파일명 설정
}
4.파일을 읽어들여 img 태그에 미리보기 설정.
reader.readAsDataURL( file );
*AJAX File Upload
- HTML Form Control의 값은 web parameter전송방식으로 전송(
back-end에서 HttpServletRequest객체를 사용하여 parameter 처리할 수 있다.
)하고 File만 비동기방식으로
전송한 방식.
-파일 업로드와 Form Control이 혼재하여 제공될 때 사용하면 편리.
사용법)
1.contentType속성 false :
$.ajax({
contentType : false => parameter 전송방식에서 binary 전송방식으로 변경
2.processData 속성 false :
processData:false =>요청 URL에 QueryString이 연결되지 않는다.
( HTML Form Control값 전송 => HTTP Protocol 에 payload전달)
form태그 => parameter 전송 그대로 유지
<form id=“아이디” name=“이름” action=“요청받는 JSP URL” method=“post”>
<input type=“text,radio,password, checkbox,,,”>//일반 Form Control
<input type=“file” name=“이름” id=“아이디”/>
</form>
3.form 객체 얻기
var form=$(“아이디”)[0];//parameter 전송방식
4.FormData객체 생성 ( parameter 전송방식 -> binary 전송방식 변경)
var formData=new FormData( 찾아낸 form객체 );
5. $.ajax 에서 data를 전송할 때 사용하는 속성 data
$.ajax({
..
..
data: formData
});
$.ajax({
url : “파일을 저장할 URL”,
type:”post”,
contentType: false ,
processData: false,
data: formData,
dataType : ”json”,
error:function(xhr){
xhr.status
},
success : function( jsonObj ){
파일업로드 후 결과를 보여주는 코드 작성
}
});
formData :
Parameter 전송방식 form -> binary 전송 방식 form 변환된 객체
=> back-end 에서 MultipartRequest 객체를 사용하여 값들을 받을 수
있다.
*무조건 다운로드
- web browser는 브라우저가 해석 할 수 있는 파일에 대해서는 브라우저가 실행해서 보여준다.
-web browser가 해석할 수 없는 파일은 자동 다운로드가 된다.
-IOStream 필요.
순서)
1.페이지지시자의 응답방식을 변경.( HTML응답 -> stream으로 응답할 수 있게 변경 )
contentType=“application/octet-stream” => 링크로 연결된 파일명이 다운로드가 된다.
2. 응답헤더변경 : 링크로 연결된 파일명에서 사용자가 선택한 파일의 명으로
(HTML을 응답하는 정보를 가진 header 를 파일을 응답하기위한 정보를 가지도록 설정)
response.setHeader(“Content-Disposition”,”attchment;fileName=다운로드할 파일명”)
3. 다운로드할 파일의 정보를 얻기
File file=new File(“HDD경로”+파일명);
4. 다운로드할 파일에 InputStream 연결
_jspService(HttpServletReqeust request,HttpServletReponse response)
FileInputStream fis=new FileInputStream( file.getAbsoluteFile() );
OutStream os=response.getOutStream();
5. 읽어 들인 파일을 저장할 배열을 생성하고, 파일에서 읽어들여 출력 스트림으로 출력
byte[] readData=new byte[512]; //1024
int readSize=0;
while( (readSize=fis.read( readData )) != -1 ){
os.write( readData,0, readSize );
}
6.출력스트림 초기화 : out 내장객체는 HTML을 출력할목적의 스트림 => File출력
out.clear();
7.응답헤더 초기화( 다운로드 파일의 정보가 설정된 헤더를 초기화)
out.pageContext.pushBody();
'JSP' 카테고리의 다른 글
[JSP] XML, Parser, Framework (0) | 2025.08.17 |
---|---|
[JSP] 사용자 인증 게시판, List만들기, 검색 조회 (0) | 2025.05.15 |
[JSP] 웹 동작방식 동기식, 비동기식, JSONObject (0) | 2025.05.13 |
[JSP] useBean, scope, EL, web parameter, JSTL (0) | 2025.05.07 |
[JSP] redirect, cookie, session (0) | 2025.04.29 |