전체 글
[JSP & Servlet] 쇼핑몰 (오늘 본 상품 & 장바구니) - View
뷰 페이지에 JSTL을 사용하기 때문에 JSTL이 설치되어 있지 않다면 다음 링크를 참고해 설치해주자. https://yeo-computerclass.tistory.com/179 JSTL 설치 📌JSTL 이란? JSTL은 자카르타에서 제공하는 자주 사용되는 필요한 기능들을 모아놓은 커스텀 태그 라이브러리이다. 커스텀 태그란 개발자가 직접 정의한 태그를 말하는 것으로 커스텀 태그를 만 yeo-computerclass.tistory.com 📌상품 목록 보기 뷰 페이지 ClothesList.jsp 상품 목록 상품 등록 상품명:${cloth.name} 가격:${cloth.price} 상품 목록이 없습니다. 오늘 본 상품 목록 forEach문에서 varStatus="status"로 설정을 한 경우 status.i..
[JSP & Servlet] 쇼핑몰 (오늘 본 상품 & 장바구니) - DAO
📌SQL 구문을 전송하는 클래스 ClothesDAO.java package dao; import static db.JdbcUtil.*; import java.sql.*; import java.util.ArrayList; import vo.Clothes; public class ClothesDAO { Connection con; private static ClothesDAO clothesDAO; private ClothesDAO() { } public void setConnection(Connection con){ this.con = con; } public static ClothesDAO getInstance(){ if(clothesDAO ==null){ clothesDAO = new ClothesDAO..
[JSP & Servlet] 쇼핑몰 (오늘 본 상품 & 장바구니) - Service
각 클라이언트의 요청을 처리하는 실질적인 비즈니스 로직이 구현되는 곳이다. 📌상품 등록 요청 처리 비즈니스 로직 ClothesRegistService.java package service; import static db.JdbcUtil.*; import java.sql.Connection; import dao.ClothesDAO; import vo.Clothes; public class ClothesRegistService { public boolean registDog(Clothes cloth) { ClothesDAO clothesDAO = ClothesDAO.getInstance(); Connection con = getConnection(); clothesDAO.setConnection(con); ..
[JSP & Servlet] 쇼핑몰 (오늘 본 상품 & 장바구니) - Action
ShopFrontController에서 전송된 요청을 파악하여 각 요청을 처리하는 Action 클래스 객체의 exeucte 메소드를 호출하게 된다. 📌상품 등록 페이지를 보여달라는 요청 처리 ClothesRegistFormAction.java package action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import vo.ActionForward; public class ClothesRegistFormAction implements Action { @Override public ActionForward execute(HttpServletRequest request, Http..
[JSP & Servlet] 쇼핑몰 (오늘 본 상품 & 장바구니) - controller
앞서 FrontController 패턴으로 구현한다 하였다. 따라서 이 어플리케이션의 모든 웹 요청은 controller에서 정의한 servlet으로 요청이 된다. 즉 모든 요청이 이 부분에서 제어가 된다. 📌ShopFrontController.java package controller; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; ..
[JSP & Servlet] 쇼핑몰 (오늘 본 상품 & 장바구니) - 테이블 생성 및 vo(Value Object) + 기본 세팅
바로 전 [로그인 만들기]때는 클라이언트의 요청을 서블릿에서 바로 받는 기본 형태의 모델 2 구조로 구현해보았다. 이번에는 [게시판 만들기]를 할 때와 같이 FrontController 서블릿을 사용하여 FrontController 패턴을 사용해보도록 하겠다. 📌테이블 생성 CREATE TABLE shop( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, price INT NOT NULL, image VARCHAR(20) NOT NULL, size VARCHAR(6) NOT NULL, content VARCHAR(400), readcount INT ) START TRANSACTION INSERT INTO shop(name, price, im..
[JSP & Servlet] 로그인 (feat. 세션 & 쿠키) - controller / service
📌로그인 컨트롤러 LoginServlet.java package controller; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; impor..
[JSP & Servlet] 로그인 (feat. 세션 & 쿠키) - View / DAO
📌index.jsp 사용자가 처음으로 접하는 페이지 index.jsp 페이지를 실행하면 "/login" 서블릿을 매핑하는 서블릿으로 포워딩 한다. 통상적으로 index.jsp를 사용자가 맨 처음 실행했을때 접하는 페이지로 많이 사용한다. 📌로그인 폼 loginForm.html 로그인 아이디 : 비밀번호 : 자동 로그인: 📌로그인 성공/실패 loginSuccess.jsp 사용자 정보 이름 : 나이 : 주소 : 이메일 : loginFail.jsp 로그인실패 📌DB작업 시 반복적 수행을 편하게 해주기 위해 만든 파일 JdbcUtil.java package db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSe..
[JSP & Servlet] 로그인 (feat. 세션 & 쿠키) - 테이블 생성 및 vo(Value Object)
로그인 구현에서는 게시판과는 다르게 FrontController 서블릿을 사용하지 않고 클라이언트의 요청을 서블릿에서 바로 받는 기본 형태의 모델 2 구조로 구현해보도록 하겠다. 📌테이블 생성 CREATE TABLE members( id VARCHAR(12) PRIMARY KEY, passwd VARCHAR(12), addr VARCHAR(50), age INT, email VARCHAR(30), gender CHAR(1), name VARCHAR(12), nation VARCHAR(16) ); START TRANSACTION; INSERT INTO users VALUES('java','java','서울특별시',30,'java@gmail.com','M','김자바','대한민국'); COMMIT; users..
[JSP & Servlet] 게시판 만들기 (feat. MySQL) - View
아래 뷰 페이지는 controller/BoardFrontController.java에서 연결된다. 📌새로운 글 작성 뷰 페이지 qna_board_write.jsp 새로운 글 작성 글쓴이 비밀번호 제 목 내 용 파일 첨부 enctype="multipart/form-data" 부분이 있어야 파일업로드 기능 처리 가능하다. 📌게시판 목록 List 뷰 페이지 qna_board_list.jsp 글 목록게시판글쓰기 0){ %> 번호 제목 작성자 날짜 조회수 [이전] [] =maxPage){ %> [다음] [다음] 등록된 글이 없습니다. 📌게시글 상세보기 뷰 페이지 qna_board_view 글 내용 상세보기 제 목 : 첨부파일 : [답변] [수정] [삭제] [목록] 📌 게시글 수정 뷰 페이지 qna_board_mo..
MySQL 페이징 처리 및 개수 제한하여 출력: LIMIT, OFFSET
SELECT * FROM member; member 테이블의 레코드 수가 몇 천 개 있다고 가정해보자. 이 때,위 쿼리를 실행하면 member 테이블에서 모든 레코드가 SELECT될 것이다. 만약 우리가 모든 레코드가 아닌 50개 정도만 출력을 하고 싶을 땐 어떻게 하면 될까? 바로 이때 쓰는 것이 limit 이다. SELECT * FROM 테이블명 WEHERE 조건 LIMIT 행개수 OFFSET 시작행 LIMIT 사용법 // LIMIT 갯수 --- 글번호 1~10 SELECT * FROM 테이블명 LIMIT 10 OFFSET 0; //OFFSET 생략 가능 SELECT * FROM 테이블명 LIMIT 10; // LIMIT 갯수 OFFSET 시작행 --- 글번호 21~30 SELECT * FROM 테이..
[JSP & Servlet] 게시판 만들기 (feat. MySQL) - DAO(Data Access Object)
📌src/db/JdbcUtil.java package db; import java.sql.*; import javax.naming.Context; import javax.naming.InitialContext; import javax.sql.DataSource; public class JdbcUtil { public static Connection getConnection(){ Connection con=null; String driver = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://localhost:3306/testDB"; try { Class.forName(driver); con=DriverManager.getConnection(url,"아이디","..
[JSP & Servlet] 게시판 만들기 (feat. MySQL) - Service 클래스
Service 클래스에서는 각 클라이언트의 요청을 처리하는 비즈니스 로직이 구현된다. 📌새로운 글 작성 처리하는 비즈니스 로직 BoardWriteProService 클래스 package service; import java.sql.Connection; import dao.BoardDAO; import vo.BoardBean; import static db.JdbcUtil.*; public class BoardWriteProService { public boolean registBoard(BoardBean boardBean) throws Exception{ // TODO Auto-generated method stub boolean isWriteSuccess = false; Connection con = ..
[JSP & Servlet] 게시판 만들기 (feat. MySQL) - Action 클래스
📌Action 인터페이스 각 요청을 처리하는 Action 클래스들을 다형성을 이용해서 동일한 타입으로 참조하기 위해서 각 Action 클래스들이 구현할 Action 인터페이스를 설계 package action; import javax.servlet.http.*; import vo.ActionForward; public interface Action { ActionForward execute(HttpServletRequest request,HttpServletResponse response) throws Exception; } 앞서 포스팅한 controller 클래스, 즉 BoardFrontController에서 전송된 요청을 파악하여 각 요청을 처리하는 Actino 클래스 객체의 execute 메소드를 ..
[JSP & Servlet] 게시판 만들기 (feat. MySQL) - Controller 클래스
📌Controller 클래스 게시판 프로젝트의 모든 웹 요청은 controller 클래스에서 정의하는 서블릿으로 요청된다. "게시판 만들기"에서는 모든 요청을 처리해주는 서블릿을 생성할 것이다. 즉 전체 요청이 이 클래스에서 제어된다. BoardFrontController 서블릿 package controller; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.htt..
[JSP & Servlet] 게시판 만들기 (feat. MySQL) - 테이블 생성 및 vo(Value Object)
https://yeo-computerclass.tistory.com/194 src 하위 폴더 용어 설명/ VO(DTO), DAO, Service(svc) VO(DTO), DAO, Service(svc) 등 용어들에 대한 설명을 하도록 하겠다. 이렇게 폴더(패키지)를 나눠서 코드를 작성하는 이유는 코드의 간결화 및 모듈화, 유지보수 등의 목적을 위해 사용하는 것이다. 📌 yeo-computerclass.tistory.com 아래를 읽기 앞서 VO(DTO), DAO, svc와 같은 용어를 처음 들어봤다면 위 포스팅을 읽어보도록 하자! 📌테이블 생성 CREATE TABLE BOARD( BOARD_NUM INT, BOARD_NAME VARCHAR(20) NOT NULL, BOARD_PASS VARCHAR(15)..
JSTL fmt - JSTL의 국제화/형식화 액션
JSTL fmt란 국제화/형식화의 기능을 제공해주는 JSTL 라이브러리이다. 국제화: 다국어 내용을 처리 형식화: 날짜와 숫자 형식 등을 처리 JSTL fmt 라이브러리를 사용할 때도 core 라이브러리를 사용할 때처럼 사용할 JSP 페이지에 태그 라이브러리를 등록해주어야 한다. 💡JSTL fmt 라이브러리 태그 인코딩 관련 태그 국제화 관련 태그 형식화 관련 태그 위와 관련된 자세한 내용은 추후 추가하여 포스팅하도록 하겠다.
JSTL core - JSTL의 기본 액션
시작하기에 앞서 EL은 JSP 자체에서 제공이 되고 있지만 jstl은 JSP 자체에서 제공이 되지 않기 때문에 반드시 톰캣 사이트에 접속하여 라이브러리를 다운받아야 한다. https://yeo-computerclass.tistory.com/179 JSTL 설치 📌JSTL 이란? JSTL은 자카르타에서 제공하는 자주 사용되는 필요한 기능들을 모아놓은 커스텀 태그 라이브러리이다. 커스텀 태그란 개발자가 직접 정의한 태그를 말하는 것으로 커스텀 태그를 만 yeo-computerclass.tistory.com JSTL core은 JSTL의 기본적인 기능들을 구현해놓은 라이브러리이다. 예를 들어 문자열을 출력하거나, 반복문, 조건문 같은 내용이 core 라이브러리에 포함되어 있다. 일단 이 라이브러리를 사용하기 ..
[SQL]데이터 무결성 & 트랜잭션 & 가상 테이블
여러사용자가 규칙 없이 아무 데이터나 입력하면 데이터베이스는 엉망이 되어 사용할 수가 없다. 이를 방지하기 위해 관계형 데이터베이스 시스템은 몇 가지 규칙을 정하였다. 그중 대표적인 것이 데이터 무결성과 제약 조건, 트랜잭션과 동시성 제어이다. 📌데이터 무결성 데이터베이스에 저장된 데이터 값과 사용자가 의도한 데이터 값을 일치해야 한다. 또한 데이터는 정확성, 유효성, 일관성, 신뢰성이 지켜져야 하며 이를 어기는 잘못된 입력,수정,삭제로부터 보호되어야 한다. 예를 들어 숫자가 들어와야하는 데이터 값에 숫자가 아닌 문자같은 데이터 타입이 들어 온다거나 기본 키(primary key) 값에 중복 값이나 null값이 입력된다면 데이터 식별에 큰 문제가 생길 수 있다. 이를 위해 데이터베이스 시스템은 데이터에 ..
[JSP] EL이란? (Expression Language란?)
📌EL 이란? EL(Expression Language)은 JSP 스크립트 태그인 를 대신해서 ${ }로 표현식을 바꿔 JSP 값들을 좀 더 편리하게 출력하기 위해 제공되는 언어이다. 기존 EL ${hello} 기존 태그 같은 경우 태그 사이에 표현식이 표현되어 겹쳐지므로 이해하기 어려울 수가 있다. EL은 이런 단점을 보완하고 간결한 데이터 출력을 위해 제공되는 기능이다. EL에서는 변수값도 출력하지만 연산자와 내장 객체도 제공하고 있다. 연산자가 포함되어있기 때문에 연산 기능을 처리할 때도 편리하다. temp 변수를 표현할 때 ${temp} member 객체의 age를 확인할 때 ${member.age} ${member['age']} ${member["age"]} 📌EL의 내장 객체 객체 코드 ..
JSTL 설치
📌JSTL 이란? JSTL은 자카르타에서 제공하는 자주 사용되는 필요한 기능들을 모아놓은 커스텀 태그 라이브러리이다. 커스텀 태그란 개발자가 직접 정의한 태그를 말하는 것으로 커스텀 태그를 만듦으로 개발 속도 혹은 개발 효율이 좋아질 수 있다. JSTL은 용도에 따라 기능이 달라지는데 크게 5가지로 나누어진다. core : 기본적인 기능들을 제공 function : 함수에 대한 기능을 제공 fmt : format의 약자로 형식화에 대한 기능을 제공 xml : XML 처리에 좀 더 편한 기능을 제공 sql : SQL처리에 편한 기능을 제공 📌JSTL 설치 JSTL은 JSP 자체에 포함되어 있는 것이 아닌 커스텀 태그 라이브러리이기 때문에 JSTL 라이브러리를 설치하여야 한다. 01. 톰캣 사이트(http:..
MVC 패턴 (Model, View, Controller)
📌MVC 패턴 개요 WebProgramming 카테고리에서 Servlet부분을 보면 알겠지만 처음 서블릿이 나왔을 때 클라이언트의 요청 처리를 서블릿 홀로 담당하는 올인원 방식이었다. 서블릿이 요청 데이터 처리도하고 비즈니스 로직 및 데이터 처리도 하고 결과 화면도 생성한 것이다. 이는 장점도 있지만 규모가 커지게 되거나 시스템 변경이 잦은 경우에는 오히려 유지 보수가 어려워 운영 비용이 증가하게 된다. 따라서 요즘같은 글로벌 환경에는 서블릿 홀로 담당하는 올인원 방식이 적합하지 않다. 시스템 변경이 잦은 상황에서 유지 보수를 보다 쉽게 하기 위해서는 중복 코드의 작성을 최소화하고 코드 변경이 쉬워야 한다. 이를 위해 기존 코드의 재사용성을 높이는 방향으로 설계를 해야했고 특히 객체지향의 특성을 활용하여..
이클립스에서 DB 연동하기 (MySQL)
MySQL 데이터베이스를 이클립스와 연결해 놓으면 데이터베이스 작업을 이클립스 내에서 할 수 있으므로 편리해진다. 01. 이클립스 내 "Data Source Explorer" 뷰에 접속 후 아래 이미지에 따라 행한다. 02. [New Driver Definition] 클릭 후 생성 현재 testdb 라는 DB를 사용하기 때문에 url을 jdbc:mysql://localhost:3306/testdb 라고 수정하였다. 03. MySQL 연결 됨을 확인. 04. 사용법 SQL 파일을 생성한다. SQL 문을 작성 후 SQL문을 드래그 한다. 그 후 다음 두 가지 방법으로 SQL문을 적용할 수 있다. [마우스 우측 버튼] 클릭 후 [Execute Selected Text] 클릭 [alt]+[x] 누름 적용됨을 확인.
[JSP] 로그인, 회원 가입 및 회원 관리
📌member 테이블 구현 📌구현해야 할 JSP 페이지 로그인 loginForm.jsp 로그인 하기 위한 페이지 loginProcess.jsp 로그인을 실제로 처리하는 페이지 회원가입 joinForm.jsp 회원 가입을 위한 페이지 joinProcess.jsp 회원 가입을 실제로 처리하는 페이지 메인 페이지 main.jsp 로그인 후 main 페이지 회원 관리(관리자) 페이지 memberList.jsp 회원 목록 페이지 memberInfo.jsp 회원 정보 페이지 memberDelete.jsp 회원 삭제 페이지 원래 실제로 일을 처리하는 페이지인 XXXProcess.jsp들은 jsp 파일로 생성하지 않고 Servlet 파일로 생성하지만 여기선 JSP 파일로만 구현해보도록 하겠다. 📌로그인 loginFor..
[Java] JavaFX 이클립스에 세팅
(1) JavaFX 플러그인 설치 Help -> Eclipse Marketplace 클릭 e(fx)clipse를 설치한다. (2) JavaFX 프로젝트 생성 JavaFX Project를 생성한다. 생성하더라도 이클립스 환경에서 javafx를 import하지 못하여 오류가 발생하고 있는 것을 확인했을 것이다. (3) JavaFX 라이브러리 추가 https://gluonhq.com/products/javafx/ JavaFX - Gluon Roadmap Release GA Date Latest version Long Term Support Extended or custom support Details 19 September 2022 (planned) early access no 18 March 2022 18...
[Java] JavaFX 개요
📌 JavaFX 개요 JavaFX는 데스크톱뿐만 아니라 임베디드 장비에서 실행하는 UI 어플리케이션을 개발할 수 있게 도와주기 위한 그래픽과 미디어 패키지를 말한다. Java에서 UI를 위해 AWT→Swing→JavaFX 순으로 나왔다. JavaFX는 자바 표준 UI 라이브러리였던 Swing보다 더 가벼워지고 더 강력해졌기 때문에 Swing을 대체하는 새로운 라이브러리로 자리매김하고 있다. JavaFX 어플리케이션에서 UI 생성, 이벤트 처리, 멀티미디어 재생, 웹 뷰 등과 같은 기능은 JavaFX API로 개발하고 그 이외의 기능은 자바 표준 API를 활용해서 개발할 수 있다. JavaFX는 화면 레이아웃과 스타일, 어플리케이션 로직을 분리할 수 있기 때문에 디자이너와 개발자들이 협력해서 JavaFX ..
[Java] NIO 기반 입출력 - (2)NIO 파일과 디렉토리
IO는 파일의 속성을 읽기 위해 File 클래스만 제공한다. NIO는 더 다양한 파일의 속성 정보를 제공해주는 클래스와 인터페이스를 java.nio.file, java.nio.file.attribute 패키지에서 제공해준다. 📌경로 정의(Path) java.nio.file.Paths Path get(String first, String second, String... more) Path get(URI uri); 입력한 path 리턴 (절대 경로, 상대 경로 모두 가능) Path getFileName() 부모 경로를 제외한 파일 또는 디렉토리 이름만 가진 Path리턴 Path getName(int index) C:\Temp\dir\file.txt 일경우 index:0 이면 "Temp"의 Path 객체 리턴..
[Java] NIO 기반 입출력 - (1)NIO란?
📌NIO란? 새로운 입출력(New Input/Output)이라는 뜻이다. 자세한 설명하기에 앞서 NIO에서 제공하는 패키지에 대한 간략한 설명 표이다. NIO 패키지 포함되어 있는 내용 java.nio 다양한 버퍼 클래스 java.nio.channels 파일 채널, TCP 채널, UDP 채널 등의 클래스 java.nio.channels.spi java.nio.channels 패키지를 위한 서비스 제공자 클래스 java.nio.charset 문자셋, 인코더, 디코더 API java.nio.charset.spi java.nio.charset 패키지를 위한 서비스 제공자 클래스 java.nio.file 파일 및 파일 시스템에 접근하기 위한 클래스 java.nio.file.attribute 파일 및 파일 시스템..
[Java] TCP 네트워킹 - (4)스레드 병렬 처리
📌스레드 병렬 처리 연결 수락을 위해 ServerSocket의 accept()을 실행하거나, 서버 연결 요청을 위해 socket 생성자 또는 connect()를 실행할 경우에는 해당 작업이 완료되기 전까지 블로킹(blocking)된다. 데이터 통신을 할 때에도 마찬가지인데 InputStream의 read() 메소드는 상대방이 데이터를 보내기 전까지 블로킹되고, OutputStream의 wrtie() 메소드는 데이터를 완전하게 보내기 전까지 블로킹 된다. 즉 말하고자 하는 바는 ServerSocket과 Socket은 동기(블로킹) 방식으로 구동된다. 만약 서버를 실행시키는 main 스레드가 직접 입출력 작업을 담당하게 되면 입출력이 완료될 때 까지 다른 작업을 할 수 없게 된다. 서버 어플리케이션은 지속적..
[Java] IO 기반 입출력 - (1)입력 스트림과 출력 스트림
📌IO 패키지 소개 프로그램에선 데이터를 외부에서 읽고 다시 외부로 출력하는 작업이 빈번히 일어난다. 데이터는 사용자로부터 키보드를 통해 입력될 수도 있고, 파일 또는 네트워크로부터 입력될 수도 있다. 데이터는 반대로 모니터로 출력될 수도 있고, 파일로 출력되어 저장될 수도 있으며 네트워크로 출력되어 전송될 수 있다. Java에서 데이터는 Stream을 통해 입출력되므로 스트림의 특징을 잘 이해해야 한다. 📌입력 스트림과 출력 스트림 (InputStream & OutputStream) 프로그램이 데이터를 입력받을 때는 입력 스트림(InputStream)이라 부르고, 프로그램이 데이터를 보낼 때에는 출력 스트림(OutputStream)이라 부른다. 프로그램이 네트워크상의 다른 프로그램과 데이터 교환을 하기..