종료하기 전 티스토리 네이버 로그아웃 할 것
1. 툴
동일
추가시:
2. 폴더
동일
추가시:
3. 사용할 사이트
동일
추가시:
4. 공부하는 것
어제 하던 거
<link href = "" rel "">
href 의 ../css/style.css 같은 경우 ..가 root 밖으로 나오는 것이라서 같은 폴더 내에 위치하면 안 써줘도 된다.
근데 보통 따로 만드니까 저렇게 많이 쓰나 봄
그리고 밑에 가져다가 쓸 떄는 <ㅁㅁㅁ class = "title"> 같이 가져다 씀
<jsp: include page = " "/>
/menu/top.jsp
처음에 /는 root , 메뉴는 folder, top.jsp는 page...
인클루드는 루트 경로 다 써주지 않아도 되어서 좀 편함맨임
이게 모델 1 스타일임
모든 페이지에 top bottom을 포함시키는 고인돌같은 것...
----------------------------------------
style.css에 이런 게 들어있습니다.
.title{
font-size: 28px;
text-align: center;
border-style: solid; /* 실선 */
border-width: 1px; /* 선 두께 */
border-color: #AAAAAA; /* 선 색깔 */
color: #000000; /* 글자 색깔 */
width: 30%; /* 화면의 30% */
padding: 10px; /* 위 오른쪽 아래 왼쪽: 시간 방향 적용 */
/* padding: 50px 10px; 50px: 위 아래, 10px: 좌우 */
/* padding-top: 30px; 상단만 간격을 30px 지정 */
margin: 20px auto; /* 가운데 정렬 기능, 20px: 위 아래, auto: 오른쪽 왼쪽*/
}
/* 내용 */
.content{
font-size: 24px;
text-align: center;
width: 100%;
padding: 10px; /* 위 오른쪽 아래 왼쪽 */
margin: 0 auto; /* 가운데 정렬 */
}
/* 하단 메뉴 */
.bottom{
margin: 20px auto;
text-align: center;
width: 100%;
padding: 10px; /* 위 오른쪽 아래 왼쪽 */
}
/* 테이블에 CSS 적용 */
TABLE{
margin: 0 auto; /* 테이블 가운데 정렬 */
border-color: #AAAAAA; /* 테이블 외곽선 색깔 */
border-width: 1px; /* 테이블 외곽선 두께 */
border-style: solid; /* 테이블 외곽선 스타일 */
border-collapse: collapse; /* 컬럼의 외곽선을 하나로 결합 */
}
TH{
border-color: #AAAAAA; /* 테이블 외곽선 색깔 */
border-width: 1px; /* 테이블 외곽선 두께 */
border-style: solid; /* 테이블 외곽선 스타일 */
color: #FFFFFF; /* 글자 색 */
background-color: #668db4; /* 배경 색 */
padding: 5px; /* 셀 내부 간격 */
}
td{
border-color: #AAAAAA; /* 테이블 외곽선 색깔 */
border-width: 1px; /* 테이블 외곽선 두께 */
border-style: solid; /* 테이블 외곽선 스타일 */
color: #000000; /* 글자 색 */
background-color: #FFFFFF; /* 배경 색 */
padding: 5px; /* 셀 내부 간격 */
}
.input{
padding: 0px;
border-color: #AAAAAA; /* 테이블 외곽선 색깔 */
border-width: 1px; /* 테이블 외곽선 두께 */
border-style: solid; /* 테이블 외곽선 스타일 */
border-top-style: none;
border-right-style: none;
border-left-style: none;
}
.textarea{
padding: 0px;
border-color: #AAAAAA; /* 테이블 외곽선 색깔 */
border-width: 1px; /* 테이블 외곽선 두께 */
border-style: solid; /* 테이블 외곽선 스타일 */
border-top-style: none;
border-right-style: none;
border-left-style: none;
}
A:link { /* A 태그의 링크 속성 */
text-decoration: none; /* 문자열 꾸미기값을 지정하지 않음, 밑줄 삭제 */
color: black; /* 글자색깔 검정 */
}
A:hover{ /* A 태그에 마우스가 올라 갔을 경우 */
text-decoration: none; /* 문자열 꾸미기값을 지정하지 않음, 밑줄 삭제 */
background-color: #E6F7FF; /* 배경 색 변경*/
color: black; /* 문자열 색깔 */
}
A:visited{ /* A 태그의 링크를 방문한 경우 */
text-decoration: none; /* 문자열 꾸미기값을 지정하지 않음, 밑줄 삭제 */
color: black; /* 글자색깔 검정 */
}
-----------------------------------------
팀 짜는 것 얘기중... ★
으으 프로젝트! :<
------------------오후에는 list에 페이징 + 답변하기 처리 들어감! :>
수정 / 삭제시 password 검증도 들어감!
----------------------------------------------2시54분ㄷ임
dynamic web project 만들었음 - jsp_bbs
[14][BBS] 게시판, DBMS SQL, 사용 Query
[01] 게시판
- Eclipse Setting
type: Dynamic Web Project
name: jsp_bbs
Package: bbs
utility

------------------------------------------------------------------------------
1. 게시판 테이블 구조
DROP TABLE bbs PURGE;
CREATE TABLE bbs (
bbsno NUMBER(7) NOT NULL, -- 글 일련 번호, -9999999 ~ +9999999
wname VARCHAR(20) NOT NULL, -- 글쓴이
title VARCHAR(100) NOT NULL, -- 제목(*)
content VARCHAR(4000) NOT NULL, -- 글 내용
passwd VARCHAR(15) NOT NULL, -- 비밀 번호
viewcnt NUMBER(5) DEFAULT 0, -- 조회수, 기본값 사용
wdate DATE NOT NULL, -- 등록 날짜, sysdate
grpno NUMBER(7) DEFAULT 0, -- 부모글 번호
indent NUMBER(2) DEFAULT 0, -- 답변여부,답변의 깊이
ansnum NUMBER(5) DEFAULT 0, -- 답변 순서
PRIMARY KEY (bbsno)
);
//오 grpno indent ansnum은 답변을 나타낼 때 필요한 것임ㅇㅇ
2. 글 추가(C: Create)
- MAX(bbsno): bbsno 컬럼에서 최대값을 추출
SELECT MAX(bbsno) as max FROM bbs;
MAX
----
NULL <- 값이 없는 경우
SELECT MAX(bbsno)+1 as max FROM bbs;
MAX
----
NULL <- 사칙연산이 의미가 없음.
- NVL(): null 값을 0으로 변경 가능함.
SELECT NVL(MAX(bbsno), 0) as max FROM bbs;
MAX
---
0
- 새로운 번호의 생성
SELECT NVL(MAX(bbsno), 0) + 1 as bbsno FROM bbs;
BBSNO
-----
1
- 서브쿼리를 이용한 레코드 추가
INSERT INTO bbs(bbsno, wname, title, content, passwd, wdate)
VALUES((SELECT NVL(MAX(bbsno), 0) + 1 as bbsno FROM bbs),
'왕눈이', '제목', '내용', '123', sysdate);
3. 전체 글 목록(S:Total Select List), 최신글 먼저 출력
- ASC: 오름 차순, DESC: 내림 차순
SELECT bbsno, wname, title, content, passwd, viewcnt, wdate, grpno, indent, ansnum
FROM bbs
ORDER BY bbsno DESC;
BBSNO WNAME TITLE CONTENT PASSWD VIEWCNT WDATE GRPNO INDENT ANSNUM
----- ----- ----- ------- ------ ------- --------------------- ----- ------ ------
1 왕눈이 제목 내용 123 0 2013-10-31 20:46:18.0 0 0 0
4. 조회수 증가
UPDATE bbs
SET viewcnt = viewcnt + 1
WHERE bbsno=1;
5. 1건의 글 보기(R:Read, PK 사용)
SELECT bbsno, wname, title, content, passwd, viewcnt, wdate, grpno, indent, ansnum
FROM bbs
WHERE bbsno = 1;
PDSNO WNAME TITLE CONTENT PASSWD VIEWCNT WDATE GRPNO INDENT ANSNUM FILENAME FILESIZE
----- ----- ----- ------- ------ ------- --------------------- ----- ------ ------ -------- --------
1 왕눈이 제목 내용 123 0 2013-10-21 21:07:30.0 0 0 0 file.txt 0
6. 글 수정(U:Update), PK는 레코드를 구분하는 고유 기능을 가지고 있음으로
수정하는 것은 권장하지 않음.
-- PK 수정, PK는 중복 충돌이 발생 할 수 있음으로 변경을 권장하지 않음.
-- 일반 컬럼의 변경, 일반적인 UPDATE임
UPDATE bbs
SET wname='왕눈이', title='비오는날', content='개구리 연못'
WHERE bbsno = 1;
PDSNO WNAME TITLE CONTENT PASSWD VIEWCNT WDATE GRPNO INDENT ANSNUM
----- ----- ----- ------- ------ ------- --------------------- ----- ------ ------
1 아로미 제목2 내용2 123 0 2013-10-21 21:07:30.0 0 0 0
-- 패스워드 검사
SELECT COUNT(bbsno) as cnt
FROM bbs
WHERE bbsno=1 AND passwd='123';
CNT
---
1
7. 글 삭제(D:Delete)
-- 모든 레코드 삭제
DELETE FROM bbs;
-- 1번 레코드만 삭제
DELETE FROM bbs WHERE bbsno=1;
8. 답변
1) 모든 레코드 삭제
DELETE FROM bbs;
BBSNO TITLE GRPNO INDENT ANSNUM
----- ----- ----- ------ ------
1 부모글1 1 0 0
BBSNO TITLE GRPNO INDENT ANSNUM
----- ----- ----- ------ ------
2 부모글2 2 0 0
1 부모글1 1 0 0
BBSNO TITLE GRPNO INDENT ANSNUM
----- ----- ----- ------ ------
4 부모글4 4 0 0
3 부모글3 3 0 0
2 부모글2 2 0 0
1 부모글1 1 0 0
4) 부모글(일반적인 글) 등록
INSERT INTO bbs(bbsno, wname, title, content, passwd, wdate,
grpno)
VALUES((SELECT NVL(MAX(bbsno), 0) + 1 as bbsno FROM bbs),
'왕눈이', '부모글3', '내용', '123', sysdate,
(SELECT NVL(MAX(grpno), 0) + 1 as grpno FROM bbs)
);
SELECT bbsno, title, grpno, indent, ansnum
FROM bbs
ORDER BY grpno DESC, ansnum ASC;
5) 답변처리
--read(부모의 title,grpno,indent,ansnum) : 첫번째
select bbsno, title, grpno, indent, ansnum
from bbs
where bbsno=2 --부모의 글
BBSNO TITLE GRPNO INDENT ANSNUM
----- ----- - ---- ------ ------
2 부모글1 2 0 0
--답변등록(부모의grpno,부모+1 -> indent,ansnum): 세번째
INSERT INTO bbs(bbsno, wname, title, content, passwd, wdate,
grpno,indent,ansnum)
VALUES((SELECT NVL(MAX(bbsno), 0) + 1 as bbsno FROM bbs),
'아로미', '부모글1 답변글2', '내용', '123', sysdate,2,1,1);
--부모글의 2차이상의 답변인 경우 ansnum(답변의 순서) 재정렬 :두번째
UPDATE bbs
SET ansnum = ansnum + 1
WHERE grpno=2 AND ansnum > 0;
--------------------------------------------------------------------
9. 검색 글 목록(S:Search List), title 컬럼에 '제목'이란
단어가 들어가 있는 레코드 검색
기타)
- WHERE title LIKE '%독도%': 독도라는 문자열이 발견되면 전부 해당(*)
- WHERE title LIKE '독도%' : 독도로 시작하는 문자열 검색
- WHERE title LIKE '%독도' : 독도로 끝나는 문자열 검색
- WHERE title LIKE '독도' : 독도와 일치하는 문자열 검색
- WHERE title = '독도' : 독도와 일치하는 문자열 검색, LIKE '독도' 동일
- WHERE title = '__독도' : 한국독도, 동해독도와 같은 패턴의 문자열 검색
1) 성명 검색 글 목록(S:Search List)
SELECT bbsno, wname, title, content, passwd, viewcnt, wdate, grpno, indent, ansnum
FROM bbs
WHERE wname LIKE '%왕눈이%'
ORDER BY bbsno DESC;
2) 제목 검색 글 목록(S:Search List)
SELECT bbsno, wname, title, content, passwd, viewcnt, wdate, grpno, indent, ansnum
FROM bbs
WHERE title LIKE '%독도%'
ORDER BY bbsno DESC;
3) 내용 검색 글 목록(S:Search List)
SELECT bbsno, wname, title, content, passwd, viewcnt, wdate, grpno, indent, ansnum
FROM bbs
WHERE content LIKE '%독도%'
ORDER BY bbsno DESC;
4) 파이프 기호를 통한 SQL 결합
SELECT ('A' || 'B' || 'C' || 'D') as "grade"
FROM dual;
grade
-----
ABCD
SELECT ('등록자: ' || wname) as "wname"
FROM bbs;
wname
---------
등록자: 홍길동
등록자: 홍길동
등록자: 홍길동
등록자: 홍길동
----------------------------------------------파워복붙
[15][BBS] Design Pattern, DBOpen.java, DBClose.java, DTO: BbsDTO.java
01] 설계
1. Design Pattern
list.jsp -> BbsDAO.java -> DBOpen.java, DBClose.java -> Oracle/MySQL DBMS
안끊어주면 안됨!!

'ㅅ')crud는 dao가 함 :>

----------------------------------------------또 파워복붙
[02] DTO(Data Transfer Object, VO: Value Object) 생성
- DTO(Data Transfer Object, Value Object, Bean, Domain)
. 하나의 레코드를 객체로 저장합니다. 레코드가 10개이면 DTO(VO)객체도
10개가 생성됩니다.
. 필드들은 접근 제한자를 전부 private으로 지정합니다.
. oracle의 char, varchar, varchar2, date는 String으로 선언합니다.
. number(5)는 int로 선언합니다.
. number(5, 1)은 float 또는 double로 선언합니다. 정수 4자리, 소수점 이하 1자리
number(전체 자리수, 소수점 이하 자리수) - 요럴 때 정수 자리수는 맞춰줘야 함 !!! 소수점은 ㄱㅊ
. 멤버 변수(필드)의 접근 메소드는 public으로 선언합니다.
. 필드의 주석은 '/** */'의 형태로 DOC 주석을 지정합니다.
//이예~ 자바독'ㅅ'
. SELECT된 레코드가 많은 경우 오라클은 SubQuery, MySQL은 limit등을
이용해서 레코드를 분할해서 가져옵니다.(Paging)
//어 홈페이지 호스팅을 할 때 mysql이 더 편하댕 'ㅅ' - oracle이 지원을 안함 (가격창렬)
- DTO 생성 과정
1) 멤버 변수(필드) 선언, 멤버 변수(필드) 주석 처리
2) getter, setter 선언
복붙복붙
이클립스 패키지도 잘 만들어줌 짱짱맨
public class BbsDTO {
/** 번호 */
private int bbsno;
/** 글쓴이 */
이런 식으로 doc 주석을 쓰면 나중에 javadoc같은걸로 뽑으면 이쁩니다
----------------------------------------------------------------------------------복붙해서 끗'ㅅ'
이렇게 만들고
이렇게 씁니다.
---------------------
전송 완료하고 close 하기!
jsp_bbs.zip
5. 수업
진도:
hw:
6. 할것
금요일이니까 크롬 초기화하고 갈 것