java에서 html을 엑셀로 출력하는 방법은 여러 가지가 있다.(poi 등등) 오늘은 그중에서 header만 간단히 변경해 엑셀이나 한글, 워드로 출력하는 방법을 알아보자. 출력해 볼 HTML office print 제목 내용 ${list.title} ${list.content} 출력할 내용은 db에서 불러왔고 jstl을 이용해 테이블 형식으로 만들었다. 더 예쁘게 스타일을 줄 수 있지만 일단 선 구분을 하기 위해 table에 border 값 1만 추가했다. 문서 상단에 다운로드 선언하기 jsp 상단에 헤더값을 선언한다. filename은 출력되는 파일이름이니 본인의 입맛에 맞게 변경하면 된다. 한글이 깨진다면 charset값을 변경해 주자. charset=utf-8, charset=euc-kr (js..
MARIA DB란?Maria DB는 무료 오픈소스 관계형 데이터베이스(RDBMS)이다. 마리아라는 이름은 MySQL을 개발했던 책임 개발자의 2번째 딸의 이름에서 가져왔다고 전해진다. 그리고 로고는 MySQL의 상징인 돌고래와 비슷한 강치이다.MARIA DB의 탄생비화MySQL이 오라클에 인수된뒤 MySQL은 8.0버전이 릴리즈 되었다. 하지만 오라클은 라이센스를 유료화 했고(학생, 비상업용 제외) MySQL의 창업자중 한명인 몬티 와이드니스는 이를 못마땅해 한다. 결국 MySQL 출신 개발자들이 따로 나와 재단을 세우고 만든것이 바로 MariaDB 이다. MARIA DB와 MY SQL의 호환성초창기 버전인 MariaDB 5.5는 MySQL 5.5 버전을 기반으로 만들었기에 거의 흡사하고 모든 기능이 호..
현재 내가 세팅한 개발환경은 spring boot 2.7.14, java 11, gradle, intelliJ이다. build.gradle 설정 plugins { id 'java' id 'war' id 'org.springframework.boot' version '2.7.14' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } group = 'com.boot' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '11' } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-..
logback 이란? logback은 log4j의 후속버전으로 logging 대표적인 라이브러리이다. 설정은 간단히 xml파일로 가능하며 적은 메모리를 점유하고 빠른 이행이 특징이 있다. 스프링 부트 환경에서 logback 로그를 찍어보기 implementation 'org.springframework.boot:spring-boot-starter' spring-boot-starter 에는 기본적으로 starter-logging이 포함되어 있다. Gradle dependencies를 살펴보면 starter-logging안에 logback,log4j,slf4j가 포함되 있는 것을 확인 가능하다. 사용하고 있지 않다면 logging 사용을 위해 build.gradle 파일에 라이브러리를 추가해 준다. depe..
이번에 회사홈페이지가 반응형 홈페이지에서 pc와 mobile 2개로 나뉘게 되었다. 어떻게 제작을 해야 할지 고민이 되었다. 그러던 중 구글 검색을 통해 발견한 건 spring-movice-device 라이브러리. 스프링 부트 jsp 설정 방법은 아래 블로그에 있으니 참고. [spring boot+ gradle + intelliJ] 스프링 부트 jsp 설정 오늘은 스프링부트 프로젝트에서 jsp 설정을 하는 방법을 알아보자. 스프링 부트 프로젝트 만드는 방법은 아래 블로그에 있으니 참고. [spring boot+ gradle + intelliJ]스프링 부트 initializr 프로젝트 만 letsplaycoding.tistory.com spring-movice-device spring-movice-devi..
오늘은 스프링부트 프로젝트에서 jsp 설정을 하는 방법을 알아보자. 스프링 부트 프로젝트 만드는 방법은 아래 블로그에 있으니 참고. [spring boot+ gradle + intelliJ]스프링 부트 initializr 프로젝트 만들기 SPRING INITIALIZR 스프링 이니셜라이즈는 스프링 부트를 보다 쉽고 필요한 것만 만들기 위한 위한 사이트이다. https://start.spring.io/ 원하는 버젼의 스프링 부트를 선택하고 그에 맞는 자바 버전을 선 letsplaycoding.tistory.com 스프링 부트는 템플릿 엔진으로 타임리프(thymeleaf)를 권장한다. jsp는 서블릿이라는 형태로 변환되어 실행이 되기 때문에 비즈니스 로직이 포함되어 복잡하고 무겁다. 하지만 타임리프는 서블릿..
SPRING INITIALIZR 스프링 이니셜라이즈는 스프링 부트를 보다 쉽고 필요한 것만 만들기 위한 위한 사이트이다. https://start.spring.io/ 원하는 버젼의 스프링 부트를 선택하고 그에 맞는 자바 버전을 선택한다. 스프링부트 3.x 버전은 자바 17부터, 스프링부트 2.x버전은 자바 11을 이용해야 뜻하지 않는 오류를 막을 수 있다. 빌드도구는 gradle과 maven을 선택할 수 있는데 예전에는 maven이 대세였지만 현재는 보다 간결한 코딩이 가능한 gradle이 선호되는 추세이다. plugins { id 'java' id 'war' id 'org.springframework.boot' version '2.7.14' id 'io.spring.dependency-managemen..
자바스크립트에서 시간을 이용한 코드를 짜다 보면 빠질 수 없는 것이 setTimeout()과 setInterval()이다. setTimeout() 함수는 일정시간을 기다린후 행동을 실행할 때 쓰이게 되고 setInterval() 함수는 함수를 일정시간의 텀으로 반복할때 이용된다. setTimeout() var timerId = ""; function timeout() { timerId = setTimeout(function() { $("a[href='#search']").trigger( "click" ); }, 1000 * 2); clearTimeout(timerId); } timeout(); setTimeout()을 이용하면 내가 지정한 시간이 지난후에 행동을 실행 한다. 시간설정 단위는 1000이 1..
게시판에 쓴 글을 기존내용과 비교해서 보여달라는 지령이 떨어졌다. 글 내용은 이미 로그 테이블에 저장이 되어 있었는데 어떤 식으로 보여줄지 고민이 되었다. 구글 검색을 열심히 하다보니 diff_match_patch라는 라이브러리를 발견했다. diff_match_patch diff match patch는 두 개의 파일이나 두 개의 문자열의 차이점을 보여주는 라이브러리이다. https://github.com/google/diff-match-patch GitHub - google/diff-match-patch: Diff Match Patch is a high-performance library in multiple languages that manipulates plain te Diff Match Patch ..
회사에서 응모하기 페이지를 만들라는 지령이 떨어졌다. 응모를 하기 위해서 필요한 건 개개인마다 다른 응모코드. 응모코드는 자바랜덤함수를 통해 구해보기로 했다. Math.random() 함수는 0이상 1미만의 값으로 난수를 반환한다. 이는 사용자가 지정한 값을 통해 원하는범위내의 값으로 변형이 가능하다. boolean flag = false; String reception = ""; Map map = new HashMap(); while (!flag) { Random rnd =new Random(); StringBuffer buf =new StringBuffer(); for(int i=0;i < 10;i++){ if(rnd.nextBoolean()){ buf.append((char)((int)(rnd.ne..
Map map = new HashMap(); map.put("searchType", searchType); map.put("searchTxt", searchTxt); int pageRow = 10; int totalcount = boardService.boardCount(map); log.info("totalcount : "+ totalcount); model.addAttribute("total_count", totalcount); int total_page = totalcount / pageRow + (totalcount % pageRow > 0 ? 1 : 0); log.info("total_page : "+ total_page); model.addAttribute("pages", total_page)..
DECLARE @PAGE_NO INT = 0 -- 페이지 번호 DECLARE @PAGE_SIZE INT = 10 -- 한 페이지에 보여줄 row 수 페이징 쿼리를 만들 때 필요한 건 현재 페이지 번호와 한 화면에 출력될 페이지수가 필요하다. 페이지번호는 뷰단에서 사용자가 누른 페이지번호를 받아서 처리한다. 1. OFFSET ROWS FETCH NEXT(2012 버전부터 사용 가능) SELECT t1.* FROM 테이블명 AS t1 WITH(NOLOCK) INNER JOIN ( SELECT id FROM 테이블명 WITH(NOLOCK) ORDER BY reg_date DESC OFFSET (@PAGE_NO) * @PAGE_SIZE ROWS FETCH NEXT (@PAGE_SIZE) ROWS ONLY ) A..