Java54 [JAVA] poi에서 암호화 추가에 따른 버전 업그레이드(SXSSF) 엑셀 파일을 다운로드할 때 관리자가 암호를 설정하여 암호화된 엑셀 파일을 다운로드받고 싶다는 요청이 들어왔다. 현재 엑셀 다운로드 모듈에서는 SXSSF방식을 사용하고 그에 따라 .xlsx 형식을 파일을 생성한다. .xlsx 은 바이너리 포맷이 아닌 xml 포맷이라서 그에 맞는 암호화 방식을 사용해줘야 하기 때문에 새로 코드를 작성해야 했다. SXSSF는 아래 [이미지 1] 에서 보이는 XSSF와 동일선상이므로 표에서 Yes로 보이는 방식을 사용해주면 된다. 아래 [이미지 2]가 암호화 코드다. 코드가 길고 복잡할까 싶었는데 의외로 단순하다. rc4방식은 취약점이 있고 찾아보니 대부분 agile encryption 방식을 사용하는 것 같아 적용해 보았다. "아무 문제 없겠지" 란 마음으로 복붙했는데 현재 .. 2023. 9. 23. [Java] enum의 정의와 활용 작년에 엑셀 다운로드 모듈을 만들 때 cell의 속성과 관련한 부분에서 enum을 적용했었다. 올해 엑셀 모듈에 새로운 구현 클래스를 추가해볼까 하고 살펴보던 중, enum에 대해 더 공부하고 블로그로 작성하면 좋을 것 같아 이렇게 정리한다. 🧊 enum(열거형) 이란?열거형은 서로 관련된 상수를 편리하게 선언하기 위한 것으로 여러 상수를 정의할 때 사용하면 유용하다. 일정 개수의 상수 값을 정의한 다음, 그 외의 값은 허용하지 않는다. .java확장자를 사용하며, 클래스이기 때문에 생성자를 가질 수 있다. 생성자의 접근제어자는 private으로 외부에서 인스턴스화할 수 없다. 그리고 마찬가지로 내부에서도 열거형을 인스턴스화할 수 없다. 필드도 추가할 수 있고, 일반 메소드를 생성할 수 있다. 만약 필드.. 2023. 8. 4. 컴파일? 빌드? 배포? 컴파일, 빌드, 배포의 개념 및 차이 위 개념들의 차이를 정확히 알아보고자 검색하던 중 좋은 비유로 설명 및 비교를 해준 글이 있어서 해당 글을 인용하여 설명을 시작하려 한다. (아래 '참고 및 출처' 의 1번) 본인이 번역가라고 생각해보자. 이번에 출판사로부터 일을 하나 받았는데, 영문으로된 글을 한글로 번역하는 일이다. 번역된 글은 출판사에서 적절히 페이지를 나누어 책으로 엮을 것이며, 완성된 책은 출판이 되어 서점에 진열될 것이다. 우리는 방금 컴파일, 빌드, 배포의 모든 과정을 훑어보았다. 1. 영문으로된 글을 한글로 번역하는 것은 '컴파일'이다. 2. 번역한 글을 책으로 엮는 것은 '빌드'이다. 3. 완성된 책을 고객들이 읽을 수 있도록 서점에 진열하는 것은 '배포'이다. 4. 1~2번 과정을 .. 2022. 10. 12. [java.lang.ClassNotFoundException] 오류 해결 1. 원인 보통 ClassNotFoundException은 빌드과정에서 문제가 생겨서 발생한다고 한다. 이 오류는 진짜로 해당 클래스가 없어서 발생하기도 하지만 이번에는 아니었다. 2. 해결 (아래 참고 주소 확인) 1) project 에서 clean 하기 실패! project에서 clean을 하면 프로젝트 내에서 컴파일된 클래스를 모두 삭제 후 다시 rebuild하기 때문에 빌드 과정에서 발생한 오류가 해결되게 된다고 한다. 이클립스는 빌드할 때, 컴파일 과정에서 프로젝트의 모든 소스코드를 컴파일 하지 않는다. 빌드 소요 시간을 줄이기 위해서 수정된 java 파일과 그에 관련된 내역들만 컴파일한다. 그래서 이 과정에서 가끔씩 컴파일 충돌 문제가 발생하거나 이클립스 자체 버그가 발생하게 된다. 그래서 c.. 2022. 9. 9. ServletOutputStream 🎁 파일을 읽어올 때에는 FileInputStream으로 읽어온 뒤 브라우저에 출력할 때에는 ServletOutputStream을 사용한다. 바이트 기반 출력 스트림의 최상위 클래스인 OutputStream을 상속받아 만들어진 출력 스트림 클래스이다. Outputstream 뿐만 아니라 ServletOutputStream은 추상클래스이기 때문에 인스턴스를 생성할 수 없다. ServletResponse 클래스에 getOutputStream()이라는 함수를 통해 servletOutputStream 인스턴스를 받아서 사용해야한다. // resp = HttpServletResponse의 객체 ServletOutputStream sos = resp.getOutputStream(); sos.write(쓰고자하는 데.. 2022. 6. 24. [java] tomcat 버전 오류 프로젝트 업데이트를 받은 후 서버를 실행하니 아래와 같이 바로 오류가 났다. javax.naming.NamingException: Could not load resource factory class [Root exception is java.lang.ClassNotFoundException: org.apache.tomcat.jdbc.pool.DataSourceFactory] at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:81) -------------------------------------생략------------------------------------------ (--생략--) The DB C.. 2022. 4. 5. JVM 이란? 1. JVM Java Virtual Machine : 자바를 실행하기 위한 가상 기계 - OS에 종속적이지 않다. - OS에 종속받지 않고 CPU가 Java를 인식, 실행할 수 있게 하는 가상 컴퓨터 JVM의 InterPreter와 JIT는 bytecode를 OS가 인식할 수 있는 기계어로 변환해준다. 따라서 byteCode는 JVM 위에서 OS 상관없이 실행될 수 있다. 그래서 JVM을 통해 자바가 특정 OS나 플랫폼에 독립적일 수 있다는 것이다. (JVM은 하드웨어와 OS위에서 실행되기 때문에 JVM 자체는 플랫폼에 종속적 즉, 플랫폼에 따라 호환되는 JVM을 실행시켜줘야 한다.) JVM이 인식할 수 있는 이러한 byteCode는 Java 소스코드, 즉 원시코드(.java)가 아니다. Java Com.. 2022. 4. 4. [Java] jsp에서 다운로드 로직 구현 시 주의할 점 jsp에서 엑셀파일을 다운로드하는 로직을 구현했다. 이전에 작성된 코드를 보니 finally 부분에 아래 코드가 있었다. 왜 outputStream을 비워주고 다시 선언해줘야 하는지 궁금해서 알아보았다. out.clear(); out = pageContext.pushBody(); jsp에서 다른 jsp에 있는 페이지를 호출해서 다운로드 로직을 실행하는 경우 이미 stream이 열려 있는 상태이다. 따라서 추가적으로 스트림을 열려고 하면 이미 스트림이 존재한다는 에러메세지가 아래와 같이 뜨게 된다. Servlet.service() for servlet jsp threw exception java.lang.IllegalStateException: getOutputStream() has already been.. 2022. 3. 29. [Java] 파일 다운로드할 때 파일명 지정하는 방법 웹에서 파일을 다운로드할 때 파일명을 지정해주는 코드이다. 사용자가 요청하여 받은 request 객체에서 User-Agent 값을 얻어, User-Agent 값에 따라 response객체에 Content-Disposition 속성을 지정하여 보낸다. Content-disposition 은 HTTP Response Body에 오는 콘텐츠의 기질을 알려주는 HTTP Response 헤더의 종류로, inline과 attachment 속성을 선택할 수 있다. 1) inline 속성 : 브라우저가 인식할 수 있는 파일확장자(예를들면, html,gif,jpg,txt...)를 가진 파일은 바로 웹 페이지에서 열고, 나머지는 무조건 다운로드상자가 뜨게 한다. 2) attachment 속성 : 로컬 컴퓨터에 다운로드하여.. 2022. 3. 29. [eclipse] A java Runtime Environment(JRE) or Java Development Kit(JDK) must be available in order to run Eclipse. 이클립스를 설치하려고 하니 이런 팝업창이 뜨면서 설치가 안됐다. JDK 설치경로가 잘못되어서 뜨는 팝업이었다. 그래서 eclipse.ini 파일에서 jdk 경로를 수정해줬다. eclipse.ini 파일에서 제일 상단에 있는 부분에서 JDK 설치경로를 변경해주면 된다. -vm JDK 설치경로\bin\javaw.exe 참고 및 출처 : https://dgtl.tistory.com/68 2022. 1. 9. [Java] 파일 출력 방법들 이전 글 중 "[Java] IO(입출력)_스트림"은 자바에서 파일 입출력의 전반적인 내용을 다뤘었다. 이번 글에서는 자바에서 파일을 이용한 출력방법들과 각 방법들의 차이점에 대해 알아보려한다. 파일 쓰기 FileOutputStream public class FileOut { public static void main(String[] args) { // TODO Auto-generated method stub opStream("fileOutputStream.txt"); fWriter("fileWriter.txt"); pWriter("printWriter.txt"); } static void opStream(String fileName) { try { FileOutputStream output = new F.. 2021. 12. 23. [Java] 매개변수 전달방식(Call-by-value, Call-by-reference) 매개변수 - 메소드를 호출해서 객체간 메시지가 전달될 때 부가 정보가 필요한 경우 매개변수 형태로 전달한다. - 매개변수로 전달되는 데이터에 따라 동작 방식이 달라진다. - 기본형일 경우 Call-by-value, 참조형인 경우 Call-by-reference 방식으로 전달된다. 값에 의한 호출(Call-by-value) 1. 매개변수의 타입이 기본형인 경우 2. 변수의 주소가 아닌 값을 복사해서 매개변수로 전달한다. 3. 실제 매개변수 값은 영향을 받지 않는다. public class CallBy { public static void main(String[] args) { // TODO Auto-generated method stub int m1 = 5; System.out.println("변경전 : .. 2021. 12. 22. 이전 1 2 3 4 5 다음