임의로 jsp 페이지에서 받는 문자열 연월일시분초가 다음과 같다
페이지 상단 영역에 TAGLIB 정의를 하고 jstl을 이용해보자.
JSTL의 포맷기능을 사용하기 위해서는 하단의 taglib를 페이지에 선언해줘야
한다.
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%
//여기에 들어갈 java코드
%>
String dateStr = "20140203021213"; request.setAttribute("dateStr",dateStr);
JSTL format 을 이용하여 date형식으로 파싱해줄수 있다.
파싱전 문자열값 : ${dateStr}
<fmt:parseDate var="dateString" value="${dateStr}" pattern="yyyyMMddHHmmss" /> 파싱후 문자열값: <fmt:formatDate value="${dateString}" pattern="yyyy.MM.dd HH:mm:ss" />
JSTL fmt 사용전과 사용후의 차이점이다.
사실 피곤하긴하지만 substring을 써서 만들어도 무관하다. ㅋㅋㅋ
JSTL - 확장자명으로 구분하여 첨부파일 이미지 보이기 (2) | 2014.06.20 |
---|---|
JSTL을 이용하여 세자리 단위로 콤마 찍기(fmt:formatNumber) (0) | 2014.06.18 |
JSTL - 지정수만큼 반복한후 줄 변경하기(ex : 포토갤러리) (2) | 2014.06.13 |
JAVA코드로도 짤수 있으나 간혹가다가 리스트 형식의 데이터를 한줄에 몇개씩 보여주고
줄바꿈을 해주는 이런 경우가 발생했던적이 있어서 한번 올려보겠다.
우선 흔히 DB에서 list 객체로 뽑아온 갤러리게시판을 예로 들자 .
화면에는
이미지1 |
이미지2 |
이미지3 |
이미지4 |
이미지5 |
이런식으로 나오고 있다.
하지만 사용자가 가로로 3개씩 나오게 해달라고 요구를 한다.
이미지1 |
이미지2 |
이미지3 |
이미지4 |
이미지5 |
|
그럴경우 해당 샘플을 응용해서 적용해보자
스크립트와/css로도 가능한걸로 알고있지만, 그쪽까지는 잘 모름... ^^;;
우선 임의로 list객체에 데이터들을 넣어줬다.
ArrayList<Integer> list = new ArrayList<Integer>(); for(int i=0; i<10; i++) { list.add(i); }
그럼 이제 JSTL의 foreach문을 돌려서 한줄에 3개씩의 데이터를 뽑아보도록 하겠다!!
이전에 JSTL jar 라이브러리 추가하고 상단에 taglib 선언을 했다고 가정하에 동작하는 화면이다.
<c:set var="i" value="0" /> <c:set var="j" value="3" /> <table border="1"> <c:forEach items="${list }" var="list"> <c:if test="${i%j == 0 }"> <tr> </c:if> <td>${list }</td> <c:if test="${i%j == j-1 }"> </tr> </c:if> <c:set var="i" value="${i+1 }" /> </c:forEach> </table>
결과화면
참쉽죠잉~
도움이 되셨다면 손가락↓ 클릭! 궁금하신점은 댓글!!
JSTL - 확장자명으로 구분하여 첨부파일 이미지 보이기 (2) | 2014.06.20 |
---|---|
JSTL을 이용하여 세자리 단위로 콤마 찍기(fmt:formatNumber) (0) | 2014.06.18 |
JSTL을 이용하여 문자열을 DATE형식으로 파싱하기(fmt:parseDate) (0) | 2014.06.18 |
IE 11은 한글깨짐 현상이 있어서 제어문에서 추가함
몇년전에 파일다운로드 할 일이 생겨서 브라우저 체크는 어떤분 블로그에서 정보를 얻었는데..
어디였는지 기억이 안남 ㅠㅠ
본인은 스프링과 연동을 해서 쓰고 있는 중이라 바이트로 파일을 쓰지 않고,
스프링내에서 지원하는 copy 유틸을 사용해서 다운로드 처리를 하였음.
jsp 또는 다른 프레임워크를 쓰시는 분들은
FileCopyUtils.copy() <<<< 이부분을 변경해주셔야 할듯...
- 다운로드 유틸코드 -
package com.util; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.util.FileCopyUtils; public class FileUtil { public void filDown(HttpServletRequest request, HttpServletResponse response, String filePath, String realFilNm, String viewFileNm) throws IOException { String dftFilePath = request.getSession().getServletContext().getRealPath("/"); File file = new File(dftFilePath + filePath.substring(1) + realFilNm); if (file.exists() && file.isFile()) { response.setContentType("application/octet-stream; charset=utf-8"); response.setContentLength((int) file.length()); String browser = getBrowser(request); String disposition = getDisposition(realFilNm, browser); response.setHeader("Content-Disposition", disposition); response.setHeader("Content-Transfer-Encoding", "binary"); OutputStream out = response.getOutputStream(); FileInputStream fis = null; fis = new FileInputStream(file); FileCopyUtils.copy(fis, out); if (fis != null) fis.close(); out.flush(); out.close(); } } private String getBrowser(HttpServletRequest request) { String header = request.getHeader("User-Agent"); if (header.indexOf("MSIE") > -1 || header.indexOf("Trident") > -1) return "MSIE"; else if (header.indexOf("Chrome") > -1) return "Chrome"; else if (header.indexOf("Opera") > -1) return "Opera"; return "Firefox"; } private String getDisposition(String filename, String browser) throws UnsupportedEncodingException { String dispositionPrefix = "attachment;filename="; String encodedFilename = null; if (browser.equals("MSIE")) { encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20"); } else if (browser.equals("Firefox")) { encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\""; } else if (browser.equals("Opera")) { encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\""; } else if (browser.equals("Chrome")) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < filename.length(); i++) { char c = filename.charAt(i); if (c > '~') { sb.append(URLEncoder.encode("" + c, "UTF-8")); } else { sb.append(c); } } encodedFilename = sb.toString(); } return dispositionPrefix + encodedFilename; } }
사용법은 다음과 같다.
FileUtil fileUtil = new FileUtil(); fileUtil.filDown("/upload/dir1/dir2/","실제파일명+확장자","화면에보여줄파일명+확장자");
해당 샘플은 다운로드 파일들이 WebContent 하단에 해당되는 폴더+파일이라고 가정한다.
그리고 1번째 파라미터인 디렉토리 경로는 webcontent/upload/dir1/dir2/ 형식으로 존재한다고 가정하는거다.
만약 경로앞에 슬러시가 빠진다면 fileDown 메서드에서 filePath.substring(1) 을 filePath로 변경하고 적용해주도록 하자
POI 라이브러리를 이용하여 엑셀파일(XLSX) 만들기 - 6만건 이상일 경우 추천 (0) | 2014.07.14 |
---|---|
json-simple 라이브러리를 이용한 ObjecToString 과 StringToObject 코드구현 (2) | 2014.07.04 |
엑셀다운 POI 라이브러리 - 엑셀파일에서 내용 읽기 (0) | 2014.06.10 |
게시물 번호 구하기 샘플소스 (0) | 2014.06.09 |
자바 썸네일 이미지 생성 (0) | 2014.06.09 |
처음에 올렸던 엑셀파일 다운로드에 이어서 내용읽기 부분을 진행하겠다.
첨부한 파일을 다운받으셔서 돌려보시길...
필요 라이브러리 관련해서는 엑셀다운로드 샘플링구현때 설명을 드렸습니다.
poi작업을 할 구성이 완료 되었으면
엑셀 파일을 읽어보자
엑셀 파일을 읽어서 구현가능한 기능은 일괄로 db에 insert하는 작업이 가능하겠다.
db insert 구현하는 부분은 응용을 하시도록 하고...
본인은 엑셀파일 읽는 수준으로만 간단하게 샘플링을 올리도록 하겠음..
해당 샘플은 xls용으로 우선 구현이 되있다.
xlsx버전은 후에 올리도록 하겠음.. 뭐 별차이는 없지만;;;
우선 샘플 코드부분
FileInputStream is = new FileInputStream("D:\\sample.xls"); //워크북 생성 HSSFWorkbook workbook = new HSSFWorkbook(is); int i = 0 short c = 0; //시트생성 HSSFSheet sheet = workbook.getSheetAt(0); //row사이즈담기 int rows = sheet.getPhysicalNumberOfRows(); //읽은 row 사이즈만큼 반복 for(i=1; i<rows; i++) { //excel파일의 시트에있는 row를 읽는다 HSSFRow row = sheet.getRow(i); // row가 비어있지 않으면 if(row != null) { //cell의 갯수를 담는다 int cells = row.getPhysicalNumberOfCells(); //cell의 수만큼 반복 for(c = 0; c<=cells;c++) { //cell값 읽기 HSSFCell cell = row.getCell(c); String value=""; //중간중간 cell이 널일수도 있으므로 if(cell == null) { continue; } else { //cell내용이 존재 //타입관련 적용은 여러가지가 있음 골라서 쓰시길... switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_FORMULA: value = cell.getCellFormula(); break; case HSSFCell.CELL_TYPE_NUMERIC: value =""+(int)cell.getNumericCellValue(); break; case HSSFCell.CELL_TYPE_STRING: value =""+cell.getStringCellValue(); break; case HSSFCell.CELL_TYPE_BLANK: value =""+cell.getBooleanCellValue(); break; case HSSFCell.CELL_TYPE_ERROR: value=""+cell.getErrorCellValue(); break; } } System.out.println("엑셀cell내용읽기:"+value); } } }
위에보면 xls파일을 지정하고 파일을 읽어왔는데 해당 소스를 응용하여 JSP웹페이지에서
multipartfile로 받아온 첨부파일의 내용을 읽을수 있겠다.
예를 들어 multipartfile의 명칭이 fileNm이라고 할경우
HSSFWorkbook workbook = new HSSFWorkbook(fileNm.getInputStrem());
형식으로만 변경을 해주면 될것이다.
도움이 되셨다면 손가락↓ 클릭! 궁금하신점은 댓글!!
json-simple 라이브러리를 이용한 ObjecToString 과 StringToObject 코드구현 (2) | 2014.07.04 |
---|---|
자바 파일다운로드 - 멀티 브라우저지원 샘플코드 (0) | 2014.06.12 |
게시물 번호 구하기 샘플소스 (0) | 2014.06.09 |
자바 썸네일 이미지 생성 (0) | 2014.06.09 |
poi 라이브러리를 이용하여 엑셀 파일을 만들어보도록 하자 - (xls 확장자) (0) | 2014.06.05 |
jQuery attr / prop 함수에 대해서 설명하던 도중 생각이나서 작성하게 되었습니다.
심플한 소스입니다.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.9.0/jquery.js"></script> <script type="text/javascript"> $(function(){ //전체선택 체크박스 클릭 $("#allCheck").click(function(){ //만약 전체 선택 체크박스가 체크된상태일경우 if($("#allCheck").prop("checked")) { //해당화면에 전체 checkbox들을 체크해준다 $("input[type=checkbox]").prop("checked",true); // 전체선택 체크박스가 해제된 경우 } else { //해당화면에 모든 checkbox들의 체크를해제시킨다. $("input[type=checkbox]").prop("checked",false); } }) }) </script> </head> <body> <table> <tr> <td> 전체선택 : <input type="checkbox" id="allCheck"/> </td> </tr> <tr> <td> <input type="checkbox"/> </td> </tr> <tr> <td> <input type="checkbox"/> </td> </tr> <tr> <td> <input type="checkbox"/> </td> </tr> <tr> <td> <input type="checkbox"/> </td> </tr> <tr> <td> <input type="checkbox"/> </td> </tr> </table> </body> </html>
도움이 되셨다면 손가락↓ 클릭! 궁금하신점은 댓글!!
swfobject.js 를 이용하여 화면에 플래시파일 호출하기 (0) | 2014.07.29 |
---|---|
자바스크립트 replaceall 함수만들기 (0) | 2014.06.08 |