웹 ? 인터넷의 정보를 특정 프로그램(브라우저)을 사용해서 정보를 보여주는곳
웹 프로그래밍 -> 데이터 입출력
* 통신 프로토콜 : 데이터를 주고 받기위해서 서로 지정한 약속 (통신규약)
1) 어떤방식의 접속 2) 어떤속도 접근 3) 어떤 형태로 처리
* TCP / IP : 통신 프로토콜 중 한가지 방식
[PC1] [PC2]
애플리케이션층 <- 가상의 데이터 송수신 -> 애플리케이션층
트랜스포트 층(TCP/UDP) 트랜스포트 층(TCP/UDP)
네트워크(인터넷) 층(IP) 네트워크(인터넷) 층(IP)
데이터링크 층 <- 실제 데이터 송수신 -> 데이터링크 층
* 애플리케이션층 : 상용 인터넷 응용 프로그램(브라우저,카카오톡,멜론...) 사용자 사용 계층
* 트랜스포트 층(TCP/UDP) : 데이터 전송시 에러 검출 & 정정
* 네트워크(인터넷) 층(IP) : 데이터를 패킷이라는 단위로 변경해서 정확한 위치로 전달
* 데이터링크 층 : 랜 카드 제어 및 데이터 통신을 위한 하드웨어 체크
- 서버 : 정보를 제공해주는 컴퓨터
- 클라이언트 : 정보를 요청하는(제공받는) 컴퓨터
- IP주소 : 인터넷상에서 특정 컴퓨터를 구분하기위한 값 (전화번호)
xxx.xxx.xxx.xxx 숫자로 구분됨 (0~255)
localhost ( 자신의 IP주소 127.0.0.1 )
- 호스트 : 인터넷상에서의 컴퓨터
- 포트번호 : 인터넷을 사용하는 모든프로그램을 구분하기위한 값
각 프로그램간의 데이터를 통신하는 통로
tomcat 8080 -> 8088
mysql 3306
- 웹 서버 / 클라이언트
=> 사용자에게 홈페이지 화면을 보여주기 위한 컴퓨터(꺼지지 않는 컴퓨터)
[ WEB 서버 ] [ WAS 서버 ]
C : naver.com (요청) -> S: 요청 처리 -> S : 동적 처리
C : naver.com 화면 <- 요청 응답(html) <- 동적 응답
- 정적데이터 : 이미지, HTML,CSS,Js(JavaScript)
- 동적 데이터 : 변화가 있는 데이터(DB데이터)
* 데이터 전송 방식
1) GET방식 / get 메서드
-> 데이터를 전달할때 파라미터를 사용해서 데이터 전달
해당정보를 URL의 정보에 붙여서 전달방식
데이터의 길이가 256byte를 넘을수 없음
Body영역이 필요없음
빠른 데이터 전송 가능
보안에 취약하다(주소줄에 파라미터가 표현되기때문)
- 정보입력 페이지,정보출력 페이지
EX)
www.naver.com?id=mason&password=1234
2) POST방식 / post 메서드
-> 데이터를 전달할때 파라미터를 사용해서 데이터 전달
해당정보를 본문 body에 붙여서(담아서) 전달방식
데이터 길이 제약 없음 (파일업로드)
느린 데이터 전송방식 (상대적으로 느림)
보안에 우수하다 (주소줄에 파라미터가 표현X)
- 정보처리 페이지
EX)
www.naver.com
* JSP 구성요소
1) JSP지시어(Directive) : jsp 페이지가 실행될때 필요한 정보 지정
필요한 정보를 웹컨테이너(tomcat)에게 알려서 처리하는 지시하는 부분
<%@ page ~ %> : 페이지의 설정
<%@ include ~ %> : 특정파일,데이터를 페이지안에 추가하는 설정
<%@ taglib ~ %>
2) JSP 선언문(Declaration) : 전역변수,메서드 선언하는 영역
<%!
String name ="홍길동";
public void method(){
}
%>
3) 스크립틀릿 : jsp 코드를 실행하는 영역 (지역변수,메서드 호출)
<%
jsp/java 코드
%>
4) 표현식 : html 화면에 java코드의 결과를 출력
<%=변수 %>
<%=수식 계산 %>
<%=리턴값이 있는 메서드호출 %>
* include (JSP)
1) 액션태그 include <jsp:include ~>
=> jsp 페이지를 java 파일로 변경후(컴파일) 파일을 추가
(jsp 페이지를 서블릿파일로 컴파일 처리후 파일을 추가)
=> 페이지 추가
2) 디렉티브 include <%@ include ~ %>
=> jsp/page가 컴파일 되기전에 소스코드를 include후 컴파일
=> 페이지에 공통적으로 사용되어야 하는 경우
* bit : 2진수 0 / 1 데이터를 저장할 수 있는 최소 공간크기
byte : bit데이터가 8개 모여있는 공간
1KB : 1024byte (2^10)
1MB : 1024 KB
1GB
1TB
-> 5GB == 5 * 1024 * 1024 * 1024 byte ;
* 기본형 데이터타입 (8개)
boolean - 논리형 - 1byte(8bit)
char - 문자형 - 2byte
byte - 정수형 - 1byte
short - 정수형 - 2byte
int - 정수형 - 4byte
long - 정수형 - 8byte
float - 실수형 - 4byte
double - 실수형 - 8byte
* 자바 기본형 타입의 형변환
1) 묵시적 형변환(자동형변환) :
데이터타입의 메모리 크기가 작은곳에서
큰곳으로 저장될때 발생하는 형변환
=> 컴파일러가 자동으로 형변환
int i = 100;
long L = i;
2) 명시적 형변환(강제형변환) :
데이터타입의 메모리가 큰곳에서 작은곳으로
저장될때 발생하는 형변환
=> 컴파일러가 자동으로 형변환 X (메모리 크기때문에 문제발생 가능성이 있기때문)
=> * 에러가 발생한다라는것을 개발자가 인지한다. 그래도 해당타입으로 사용하겠다.
long L = 100L;
int i = L; => 에러발생
int i = (int) L; 명시적 형변환
클래스 -> (메모리에 올리기) -> 객체 (인스턴스)
'new' 인스턴스화
붕어빵틀 -> (가열) -> 붕어빵
- 게시판 (CRUD)
- 글쓰기
- 글목록 + 페이징처리
- 글 본문 일기
- 글 내용 수정
- 글 삭제
- 답글
- 파일 업로드
* 자바 접근지정자
[ private / default(생략)/ protected / public ]
자신의 클래스 O / O / O / O
같은 패키지 X / O / O / O
하위 클래스 X / X / O / O
다른 패키지 X / X / X / O
* 데이터 -> 처리 -> 데이터
리터럴 >> 변수 >> 배열 >> 메서드 >> 클래스(객체) >> 라이브러리(API) >> 프레임워크
* 자바빈(JAVABEAN) : 특정한 기능을 가진 객체(컴포넌트)
=> 자바빈 규칙으로 만들어진 클래스
설계 규칙
1) 기본패키지를 제외한 다른 특정패키지에 생성해야함.
2) 기본 생성자가 있어야함
3) 멤버변수의 접근지정자는 private (캡슐화)
4) 멤버변수에 접근 하기위한 get/set메서드 생성
5) get/set메서드는 반드시 public 접근지정자 사용
*6) 객체 직렬화 되어있어야함
* 데이터를 저장하는 형태를 참고하여 자바빈 객체 생성
=> DB-테이블을 참고해서 자바빈객체 생성
CREATE TABLE `jspdb`.`mason_board` (
`num` INT NOT NULL,
`name` VARCHAR(45) NULL,
`pass` VARCHAR(45) NULL,
`subject` VARCHAR(100) NULL,
`content` VARCHAR(2000) NULL,
`readcount` INT NULL,
`re_ref` INT NULL,
`re_lev` INT NULL,
`re_seq` INT NULL,
`date` DATE NULL,
`ip` VARCHAR(45) NULL,
`file` VARCHAR(1000) NULL,
PRIMARY KEY (`num`));
커넥션 풀(Connection Pool)
http://commons.apache.org/
* collections
https://commons.apache.org/proper/commons-collections/download_collections.cgi
commons-collections4-4.4-bin.zip 다운로드
* DBCP
http://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi
commons-dbcp2-2.8.0-bin.zip 다운로드
* pool
https://commons.apache.org/proper/commons-pool/download_pool.cgi
commons-pool2-2.10.0-bin.zip 다운로드
<Context> : 해당프로젝트
<Resource
name="리소스 호출명"
auth="인증-컨테이너(톰켓)"
type="데이터 리턴 형태-DataSource"
driverClassName="디비 드라이버 이름"
url="디비 접속 주소"
username="디비 접속 아이디"
password="디비 접속 비밀번호"
maxActive="디비 연결정보(connection) 최대 개수"
maxIdle=" 서비스중인 연결정보를 제외하고 여유로 남겨둘 개수 "
/>
</Context>
* 예외처리 : 예외 객체를 처리
try{
예외가 발생가능한 코드 (DB관련)
SQL / 쿼리처리 결과 제어
} catch(Exception e){
예외 처리(출력)
} finally {
예외가 발생 유무와 상관없이 반드시 실행코드
자원해제
}
* 게시판 답글 처리 하기
re_ref : 답글의 그룹번호, 일반글의 경우 그룹번호와 글번호가 동일
답글일경우 원글의 그룹번호를 사용
re_lev : 답글의 들여쓰기, 일반글은 들여쓰기 없음 (0)
답글 일경우 답글의 들여쓰기는 위치에 따라서 처리
re_seq : 답글의 순서 , 일반글은 가장위 (0)
// re_ref, re_lev, re_seq -> db column
번호 제목 re_ref re_lev re_seq
1 일반글1 1 0 0
2 일반글2 2 0 0
3 답글2-1 2 1 1
4 답글2-2 2 1 2
5 답글2-2-1 2 2 3
----------------------------------------------
7 일4 7 0 0
3 일3 3 0 0
4 답3-1 3 1 1
8 답3-1-1 3 2 3
9 답3-1-1-1/ 3 3 4
5 답3-2 3 1 2
2 일2 2 0 0
6 답2-1 2 1 1
1 일1 1 0 0
* 파일 업로드
=> MultipartRequest 객체를 생성
new MultipartRequest(
request, 요청정보 전달
realPath, 실제 저장되는 경로
maxSize, 업로드파일의 크기
"UTF-8", 파일업로드 인코딩
new DefaultFileRenamePolicy() 중복된 파일이름을 재정의 객체
);
'ㆍSpring & JSP' 카테고리의 다른 글
[스프링]쇼핑몰 / 장바구니 만들기 첫페이지 기능구현 완성! (0) | 2021.09.10 |
---|---|
[spring/스프링] pom.xml 부터 DB디비/테스트 세팅 (0) | 2021.09.09 |
[jsp] fmt:formatDate 날짜/시간/화폐/소수점 포맷format (0) | 2021.09.05 |
[JSP] EL표현식 / c:forEach 문 ㅡ 자바for문과 비교하기 (0) | 2021.09.05 |
[jsp][EL표현식/JSTL] 기본정리편 (0) | 2021.09.04 |