[JSP] Excel 파일 업로드 후 내용 파싱하여 DB에 저장하기(Apache Tika, Apache POI)
·
[Programming Language]/[JSP]
[머릿말]엑셀 파일을 다뤄야 할 땐 보통 ".csv" 확장자의 형태로 다뤄지는데, 나는 ".xls" 및 ".xlsx" 확장자 파일을 기준으로 내용을 파싱하여 DB에 저장하는 실습을 진행해보았다. 내 개발 환경은 다음과 같다.Java 1.6 - https://www.oracle.com/kr/java/technologies/javase-java-archive-javase6-downloads.htmlApache Tomcat 7.0.109 - https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.109/bin/Oracle DB 11g XE - https://www.oracle.com/database/technologies/xe-prior-release-downloads...
[JSP] DB 연결 뒤 쿼리 실행 방법(Statement VS PreparedStatement)
·
[Programming Language]/[JSP]
** 이 포스팅은 DB 연결이 완료된 후의 상황을 기준으로 합니다. 만약 DB 연결이 되지 않은 경우 아래 포스팅을 참고해주세요. **** DB는 Oracle을 기준으로 합니다. ** [JSP] DB 연결 방법(DriverManager, Connection Pool)** 본 포스팅은 Oracle 11g을 기준으로 작성되었습니다 **1. JDBC 파일 필요자바에서 데이터베이스에 접속하기 위해선 JDBC를 사용해야 한다. JDBC(Java Database Connectivity)란 자바에서 데이터베이스와 연결semin1127.tistory.comDB 연결은 Connection Pool 방식으로 하는 것이 좋지만, 이 포스팅에서는 단순 DB 연결을 1번만 맺어 쿼리를 실행하는 것을 가정하므로 DriverMan..
[JSP] DB 연결 방법(DriverManager, Connection Pool)
·
[Programming Language]/[JSP]
** 본 포스팅은 Oracle 11g을 기준으로 작성되었습니다 **1. JDBC 파일 필요자바에서 데이터베이스에 접속하기 위해선 JDBC를 사용해야 한다. JDBC(Java Database Connectivity)란 자바에서 데이터베이스와 연결을 맺어 SQL을 실행하기 위해 필요한 API이자 드라이버다. 내가 사용 중인 DB는 Oracle이므로 ojdbc.jar 파일을 프로젝트의 WEB-INF -> lib 폴더에 추가해주어야 한다. WEB-INF 폴더는 프로젝트가 로드될 때 가장 먼저 실행되는 폴더인데 만약 lib 폴더가 존재하지 않는다면 새로 만들기로 추가해준다. ojdbc.jar은 현재 JDK 및 Oracle 버전에 맞는 파일을 추가해주어야 한다. ojdbc.jar 파일은 아래 링크에서 다운받을 수 ..
[JSP] 데이터 주고 받는 방법(form, Fetch API)
·
[Programming Language]/[JSP]
JSP에서 데이터를 주고 받기 위해 form과 fetch를 사용할 수 있다. fetch를 사용하면 Client에서 Server로 요청을 전송하고 Server의 응답이 전송될 때의 처리를 요청 페이지와 동일한 페이지에서 할 수 있다. 1. form 사용먼저 form 태그를 사용하여 데이터를 전송할 수 있다. 이때 form 태그 내부의 input 태그의 name 속성을 기준으로 서버에서 값을 식별하게 된다. 아이디 이름 이메일 완료 form 태그의 action에 처리할 파일의 경로를 적고 method에는 get 또는 post를 적어주면 된다. 각 input 태그의 name 값은 서버에..
[JSP] 태그 종류(scriptlet, directive, declaration, expression, comment, action)
·
[Programming Language]/[JSP]
1. 스크립틀릿 태그 - Scriptlet Tag 형태HTML 코드 내에 Java 코드를 삽입할 때 사용되는 태그스크립틀릿 태그가 복잡하게 얽혀있으면 코드의 가독성이 떨어짐변수의 선언은 가능하나 메서드의 선언은 불가보통 태그 내부에 작성 2. 지시자 태그 - Directive Tag 형태page, include, taglib가 존재2-1. 페이지 관련 설정을 할때 사용하는 것으로, 보통 IDE에서 새로운 JSP 파일을 만들면 최상단에 자동으로 작성되어 있다.2-2. 특정 페이지를 추가할 때 사용하는 것으로 header이나 footer등과 같이 공통으로 사용되는 코드를 모듈화하여 별도의 jsp 파일로 만들어놓고 필요할 때 include로 포함시켜 사용한다. 안녕하세요 반갑습니다! wel..
[JSP] JSP란? JSP와 Servlet? 기본 예제
·
[Programming Language]/[JSP]
1. JSP란?JSP란 Jakarta Server Pages의 약자로 서버 측에서 실행되는 템플릿 엔진이다. 나는 처음에는 이것이 별도의 프로그래밍 언어인줄 알았다. 그러나 이는 단순 HTML 코드에 Java 코드가 삽입된 형태의 방식을 뜻하는 것이었다. 이와 비슷한 것으로는 ASP(Active Server Pages), PHP(Hypertext Preprocessor)가 있는데 이들 역시 서버 측에서 실행되는 서버 사이드 스크립트 언어이다. 현재는 JSP보단 자바의 공식 템플릿 엔진인 Thymeleaf가 더 많이 사용되는 추세이지만 아직 과거부터 서비스된 페이지에는 JSP가 사용되고 있는 것을 찾아볼 수 있다.https://www.scourt.go.kr/portal/main.jsp - 대한민국 법원 대..
[SwiftUI] publishing changes from background threads is not allowed 원인, 해결 방법
·
[Programming Language]/[SwiftUI]
[머릿말]테스트용으로 만든 서버에서 데이터를 받아와 앱에 띄우는 과정에서 이 경고를 마주하게 되었다.이와 관련해서 이전에 GPT에게 무언가를 물어봤을 때 데이터의 갱신은 Main Thread에서 이뤄져야 한다고 답했던 기억이 어렴풋 난다. Synchronous, Asynchronous는 중요한 개념이므로 이 기회에 잘 정리해보고자 한다. 1. Main Thread vs Background ThreadSwiftUI에서 모든 UI 업데이트는 Main Thread에서 이뤄진다. 만약 시간이 오래걸리는 작업(ex. 다운로드 작업)을 Main Thread에서 수행한다면 해당 작업이 완료될 때까지 Main Thread는 다른 작업을 수행할 수 없으므로 앱이 일시정지된 것처럼 보이게 되고, 이는 좋지 않은 사용자 경..
[Swift] mutating 키워드란? (값 타입 인스턴스에서의 값 수정)
·
[Programming Language]/[Swift]
1. 값 타입 인스턴스 : 구조체(struct), 열거형(enum)Swift에서 구조체와 열거형은 값 타입이고, 클래스는 참조 타입이다. 1-1. class : 참조 타입참조 타입의 클래스의 인스턴스가 있을 때 값을 수정하는 메서드는 다른 프로그래밍 언어에서 했던 것처럼 하면 된다.class Account { private var balance: Int = 0 func getBalance() { print("잔고: \(balance)") } func deposit(_ amount: Int) { balance += amount } func withdraw(_ amount: Int) { balance -= amount..
[Swift] Queue 자료 구조 (removeFirst를 popLast로 대체하기)
·
[Programming Language]/[Swift]
[머릿말]Swift를 사용하여 Programmers에서 여러 코딩테스트를 풀고 있다. 어느덧 5천대 순위가 되었고 이전에는 Queue를 사용하여 문제를 풀어도 통과가 되었지만 이제는 시간 초과 오류를 가끔씩 접하곤 한다. 이는 removeFirst() 메서드의 시간 복잡도가 O(n)이기 때문인데, 이를 시간 복잡도가 O(1)인 popLast() 메서드로 대체하면 실행 시간을 훨씬 단축시킬 수 있다.1. 기존에 사용했던 QueuePython에는 Queue가 존재해서 좋았지만 Swift에는 존재하지 않는다. 따라서 배열을 사용하여 직접 Queue를 만들어 사용해야 한다. 기존에 문제를 풀 때 사용했던 Queue는 아래와 같이 그냥 배열 그 자체였다.// 기본 Queuevar queue: [Int] = []/..
[Swift] 메서드(Methods) [인스턴스•타입 메서드, mutating, self]
·
[Programming Language]/[Swift]
1. 인스턴스(Instance) 메서드, 타입(Type) 메서드Swift에서 메서드는 인스턴스 메서드와 타입 메서드로 나눠볼 수 있다. 인스턴스 메서드는 생성된 각각의 인스턴스에 대한 메서드라고 보면 되고 타입 메서드는 구조체나 클래스와 같은 타입 자체에 대한 메서드라고 보면 된다. 1-1. 인스턴스 메서드인스턴스 메서드란 구조체(Struct), 클래스(Class), 열거형(enum) 내에 선언되는 메서드를 말한다. class Person { var name: String var born: Int init(name: String, born: Int) { self.name = name self.born = born } func printAg..