JSP 8일차

8. 회원관리-약관설정,게시판의 개요및 글목록보기



=>페이징 처리
=>agreement.jsp파일 작성(약관설정)

agreement   agreement_1

실행결과

agreement
=>게시판(모델1)–>모델2->모델2로 게시판

1.MySQL or Maria DB

http://www.mysql.com/
mysql-essential-5.1.45-win32_1.exe

설치->custom으로 설정

mysql
경로->C:\MySQL5.1\

mysql_1
환경설정=>Register the MySQL server now체크해제

mysql_2
개발용(Developer Machine)
Manual Setting 체크 ->Concurrent connections(동시접속수)

mysql_3
MySQL->3306(TCP/IP)

mysql_4
사용언어->utf-8로 설정

 mysql_5
서비스 등록->MySQL

mysql_6
Include Bin directory in windows PATH->체크(도스모드에서 접속이 가능)
관리자계정(root->1234(암호))

mysql_7
mysql-connector-java-5.1.12-bin->드라이버(MariaDB사용가능)
SQLGateforMySQL–>그래픽툴

SQL->오라클과 동일
도스접속->암호(1234)

mysql_dos
1. database(영역)->폴더
mysql> show databases;
+—————————–+
 | Database                         |
+—————————–+
| information_schema |
| mysql                                |
| test                                     |
+—————————–+
3 rows in set (0.00 sec)
mysql> use mysql->use 들어가고싶은 DB명;
Database changed
mysql> show tables; //테이블리스트 보여달라
+————————————+
| Tables_in_mysql                   |
+————————————+
| columns_priv                         |
| db                                                |
| event                                          |
| func                                             |
| general_log                             |
| help_category                         |
| help_keyword                         |
| help_relation                           |
| help_topic                                 |
| host                                              |
| ndb_binlog_index                 |
| plugin                                          |
| proc                                             |
| procs_priv                                 |
| servers                                         |
| slow_log                                     |
| tables_priv                                 |
| time_zone                                   |
| time_zone_leap_second       |
| time_zone_name                     |
| time_zone_transition            |
| time_zone_transition_type |
| user                                                |
+————————————–+
23 rows in set (0.08 sec)
mysql> desc user
+——-+————-+——-+——+———-+———+
| Field  | Type         | Null | Key  | Default | Extra |
+——-+————-+——-+——+———-+———+
| Host  | char(60) |  NO   | PRI  |                |               |
| User  | char(16)  | NO    | PRI  |                |               |
+——-+————-+——-+——+———-+———+
mysql> select * from user;
+————–+——-+———————————————————————–+
| Host            | User | Password                                                                                      |
| localhost    | root | *A4B6157319038724E3560894F7F932C8886EBFCF |
+————–+——-+———————————————————————–+


● 데이터베이스 새로 만들기

1. create database 만들고자하는 DB;

2. drop database 삭제할 DB;
mysql> create database test2;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+——————————+
| Database                           |
+——————————+
| information_schema  |
| mysql                                |
| test                                     |
| test2                                   |
+——————————+
4 rows in set (0.00 sec)
mysql> drop database test2;
Query OK, 0 rows affected (0.02 sec)


● JspBoard->프로젝트명
        |
        -src->자바빈즈->DBConnectionMgr.java
        |
        -WebContent->

1. mysql 만들기
mysql> create database mydb;
Query OK, 1 row affected (0.02 sec)
mysql> use mydb; //mydb 접속하게 함
Database changed
오라클 – varchar2 ->varchar
                number-> int
                varchar2(4000)이상->text
                date———–>datetime(작성날짜+시간까지 출력)
mysql> create table board(
num int not null primary key auto_increment, /* 글번호를 저장하는 필드 */
writer varchar(10) not null, /*글쓴이 */
email varchar(30), /* 이메일 ->유일하게 null값을 허용 */
subject varchar(50) not null, /*글제목 */
passwd varchar(12) not null, /*글의 비밀번호 */
reg_date datetime not null, /*글을 쓴 날짜 */
readcount int default 0, /* 글의 조회수 */
ref int not null, /* 글을 그룹화하기 위한 필드 */
re_step smallint not null, /* 제목글과 답변글의 순서를 정리*/
re_level smallint not null, /* 글의 레벨을 저장하는 필드 */
content text not null, /* 글내용 */
ip varchar(20) not null /* 글쓴이의 ip주소를 저장하는 필드 */
);

mysql> desc board;
+————–+—————–+——+—–+———-+————————+
 | Field           | Type               | Null | Key| Default| Extra                         |
+————–+—————–+——+—–+———-+————————+
| num             | int(11)           | NO    | PRI| NULL   | auto_increment   |
| writer         | varchar(10) | NO   |         | NULL   |                                     |
| email           | varchar(30)| YES  |         | NULL  |                                     |
| subject       | varchar(50) | NO   |         | NULL   |                                     |
| passwd       | varchar(12) | NO   |         | NULL   |                                     |
| reg_date    | datetime       | NO   |         | NULL   |                                    |
| readcount  | int(11)           | YES  |        | 0            |                                     |
| ref                | int(11)            | NO   |         | NULL   |                                     |
| re_step      | smallint(6)   | NO   |        | NULL   |                                     |
| re_level     | smallint(6)  | NO   |         | NULL   |                                      |
| content      | text                  | NO   |        | NULL    |                                     |
| ip                  | varchar(20) | NO   |        | NULL    |                                    |
+————–+—————–+——+—–+———+————————-+


○ BoardDTO.java

boarddto  boarddto_1

예)  zipcode만들어서 게시판 보이게 함
mysql> CREATE TABLE zipcode (
    zipcode             char(7)              NOT NULL  ,
    area1               char(10)             NULL      ,
    area2               char(20)             NULL      ,
    area3               char(40)             NULL      ,
    area4               char(20)             NULL
    );
Query OK, 0 rows affected (0.12 sec)
mysql> show tables;
+————————+
| Tables_in_mydb  |
+————————+
| board                        |
| zipcode                    |
+————————+
2 rows in set (0.00 sec)
c:\mysql5.1\bin에 복사(zipcode.txt=>utf-8로 저장해야함)
c:\mysql5.1\bin > mysql -u root -p  mydb < zipcode.txt

○ BoardDAO.java

getArticleCount(), getArticles()->arraylist

getarticlecount   getarticles

○ list.jsp

ref->그룹번호
        1) 각 게시물을 구분하는 번호로 사용(단독으로 사용할때)
        2) 답변다는 위치를 알려주는 그룹번호로 사용
re_level=>신규글과 답변글을 구분하는 인자(x축-들여쓰기)
re_step=>신규들과 답변글사이의 순서를 정해주는 인자
num     subject            (ref   step    level)–>답변을 다는 기능
   1         aaaa(신규)       0      0         0
                 |
                 -aaa-1          0      1         1      
                     |
                    -aaa-2       0      2         2
                     |
                    -aaa-3       0      3         2
   2          bbb                 1
                 |
                 -bbb-1          1
   3         cccc                 2
                 |
                 -ccc-1           2
   4         ddd                  3
->웹상은 반대로 보여짐
String sql=”select * from board order by ref desc,”;
   sql+=” re_step asc limit ?,?”;
->의미: 가장 최근의 글 순서대로 출력하되 답변글순서는 오름차순으로 정렬하라…


● 페이징 처리에 대한 용어 정리
1. record(10개)->page(10)->block(블럭)형성
블럭의 종류
int nowPage = 0;//현재 페이지->웹상에서 마우스로 클릭한 페이지
int nowBlock = 0; //현재 선택된 블럭
Go to Page ::: 1 2 3 4 5 6 7 8 9 10 :::
                    nowPage
                   ————————한 블럭
1) 이전블럭: – 이전 10개 ::: 11 12 13 14 15 16 17 18 19 20 :::
                    ———–    ———————————–
                      이전블럭                         현재블럭
2) 현재블럭 – ::: 1 2 3 4 5 6 7 8 9 10 :::
3) 다음블럭 – ::: 1 2 3 4 5 6 7 8 9 10 ::: 다음 10개
          ———————–     ———
                                  현재블럭               다음블럭   
이전 10개 ::: 11 12 13 14 15 16 17 18 19 20 ::: 다음 10개
———–    ———————————–   ———
 이전블럭                         현재블럭                       다음블럭 
int totalRecord -> 총레코드수

int numPerPage = 10;=>한페이지당 보여줄 수 있는 레코드수를 결정          
int pagePerBlock = 10;=>블럭당 보여줄 수 있는 페이지수를 결정   
   
   총페이지수 =총레코드수/페이지당 보여줄 수 있는 레코드수 122/10=12.2=>13.2=>13
Math.ceil()->무조건 올림메서드
int totalPage =(int)Math.ceil((double)totalRecord / numPerPage);
   총블럭 = 총페이지수/블럭당 보여줄수있는 페이지수(13/10)=1.3
int totalBlock =(int)Math.ceil((double)totalPage / pagePerBlock);

int beginPerPage =   nowPage * numPerPage;
=>페이지당 보여주는 첫번째 게시물번호=현재페이지*페이지당 보여주는 레코드수
ex)1*10->10 2*10=20

list   list_1

실행결과

list_paging