160502: 35회차
종료하기 전 티스토리 네이버 로그아웃 할 것
1. 툴
동일
추가시:
2. 폴더
동일
추가시:
3. 사용할 사이트
동일
추가시:
4. 공부하는 것
- URI상에 있는 주소를 얻어와 명령어로 처리하는 태턴입니다.
1. Web Application 설정
- Eclipse Setting
. Project Type: Dynamic Web Project
. Project Name: mvc_board
. Dynamic Web Module: 3.0
. Java Compiler: 1.7
. Package Name: model, controller, action, utility(beans)
- 폴더 구조
mvc_board/WebContent/view : 게시판 관련 jsp 파일
mvc_board/WebContent/view/storage : 파일이 전송되어 저장되는 폴더
mvc_board/WebContent/view/temp : 파일 전송시 임시 저장 폴더
mvc_board/WebContent/template : template 관련 파일들
mvc_board/WEB-INF : web.xml 환경 설정 파일 위치
mvc_board/WEB-INF/classes : 서블릿 클래스 위치, 자동 생성
mvc_board/WEB-INF/config : properties 파일등, 기타 리소스 파일
mvc_board/WEB-INF/lib : jar 파일의 라이브러리 위치
[02] WebContent/WEB-INF/sql/board.sql
1. 게시판 데이터베이스 구조
DROP TABLE board CASCADE CONSTRAINTS PURGE;
CREATE TABLE board (
num NUMBER(6) NOT NULL, -- 글 일련 번호
name VARCHAR(10) NOT NULL, -- 글쓴이 성명
subject VARCHAR(100) NOT NULL, -- 제목
content VARCHAR(4000) NOT NULL, -- 내용
ref NUMBER(5) NOT NULL, -- 부모글 번호(그룹번호)
indent NUMBER(2) DEFAULT 0 NOT NULL, -- 답변여부,깊이
ansnum NUMBER(5) DEFAULT 0 NOT NULL, -- 답변 순서(최신답변은 부모글 바로 아래 달려집니다.)
regdate DATE NOT NULL, -- 글 등록일
passwd VARCHAR(15) NOT NULL, -- 패스워드
count NUMBER(5) DEFAULT 0 NOT NULL, -- 조회수
ip VARCHAR(15) NOT NULL, -- 글쓴이 IP
filename VARCHAR(50) NULL, -- 파일명
filesize NUMBER(7) NULL, -- 파일 사이즈
refnum NUMBER DEFAULT 0, -- 답변확인 컬럼
PRIMARY KEY (num)
);
-- Sequence Object
CREATE SEQUENCE board_seq
START WITH 1 --시작번호
INCREMENT BY 1 --증가값
MAXVALUE 99999 --최대값
CACHE 20 --시쿼스 변경시 자주 update되는 것을 방지하기위한 캐시값
NOCYCLE;
-- Sequence 만드는 규칙 create SEQUENCE 테이블명_컬럼명 (어떠한 테이블의 시퀀스임을 알려주려고)
select * from BOARD
-- 단순한 데이터 출력
-- rownum: 가상 컬럼, SELECT시에 동적으로 일련번호를 생성합니다.
SELECT num, name, subject, regdate, rownum FROM board;
-- 내림 차순 출력, rownum컬럼은 ORDER BY 문 보다 먼저 생성됩니다.
SELECT num, name, subject, regdate, rownum FROM board
ORDER BY name DESC;
-- 서브쿼리와 rownum의 출력, 내부 쿼리는 정렬 실행,
-- 외부 쿼리는 rownum 일련번호 산출
SELECT num, name, subject, regdate, rownum r
FROM (
SELECT num, name, subject, regdate FROM board
ORDER BY name DESC
)
-- r컬럼을 인식을 못합니다.
SELECT num, name, subject, regdate, rownum r
FROM (
SELECT num, name, subject, regdate FROM board
ORDER BY name DESC
)
WHERE r >= 1 and r <= 5;
-- rownum을 이용한 페이징 출력, 1~5번 레코드만 출력
SELECT num, name, subject, regdate, r
FROM(
SELECT num, name, subject, regdate, rownum r
FROM (
SELECT num, name, subject, regdate FROM board
-- where subject like '%게%'
-- or content like '%게%'
ORDER BY num DESC
)
)
WHERE r >= 6 and r <=10;
-- 6 ~ 10번 레코드만 출력
SELECT num, name, subject, regdate, r
FROM(
SELECT num, name, subject, regdate, rownum r
FROM (
SELECT num, name, subject, regdate FROM board
ORDER BY num DESC
)
)
WHERE r >= 6 and r <= 10;
select num,ref,indent,ansnum,refnum,subject
from board
order by ref DESC, ansnum
select * from board
---몬가 복붙을 많이 했음...---
넘나 머리가 아픈것
오늘도 폴더를 압축해서 가져갈거 같은 예감..
시험이 6일남았으니 넘나 바쁨...
Controller가 하는 것은 Hashmap의 정보를 읽어다가 쓰는 것
ㅁ.do를 전달받으면 init()에서 action을 분류한 후 요청한다! (properties에 정의해놓은 것)
transaction 하기 위해서 close하는 메소드를 con 따로 pstmt 따로 짠다 :>
까지 점심 전에 했습니다.
--------------------------------------------------------------------------------------------
//액션이 가져야 할 기능 - 모델 사용 - 결과를 리퀘스트에 저장 - 뷰페이지 리턴
listAction.java
package action;
import java.util.HashMap;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import model.BoardDTO;
import model.BoardMgr;
import utility.Paging;
import utility.Utility;
public class ListAction implements Action {
@Override
public String execute(HttpServletRequest request, HttpServletResponse response) throws Throwable {
// TODO Auto-generated method stub
int nowPage = 1;
int recordPerPage = 5;
if(request.getParameter("nowPage") != null){
nowPage = Integer.parseInt(request.getParameter("nowPage"));
}
int sno = ((nowPage - 1) * recordPerPage) + 1;
int eno = nowPage * recordPerPage;
request.setCharacterEncoding("UTF-8"); //word 때문에 한글화 해줌
String col = Utility.nullCheck(request.getParameter("Col"));
String word = Utility.nullCheck(request.getParameter("word"));
if(col.equals("total")){
word = "";
}
Map map = new HashMap();
map.put("sno", sno);
map.put("eno", eno);
map.put("col", col);
map.put("word", word);
//액션이 가져야 할 기능 - 모델 사용 - 결과를 리퀘스트에 저장 - 뷰페이지 리턴
//모델 사용
BoardMgr mgr = new BoardMgr();
List<BoardDTO> list = mgr.list(map);
int total = mgr.total(map);
String paging = new Paging().paging3(total, nowPage, recordPerPage, col, word);
//결과를 리퀘스트에 저장
request.setAttribute("list", list);
request.setAttribute("paging", paging);
//페이징 유지를 위해서 nowpage, col, word도 가져감
request.setAttribute("nowPage", nowPage);
request.setAttribute("col", col);
request.setAttribute("word", word);
//뷰페이지 리턴
String url = "/view/list.jsp";
return url;
}
}
5. 수업
진도:
hw:
6. 할것
http://luckybluegifs.co.vu/page/13
즐겨찾기 지우려고 저장한 것
접속용nosqljava/bigdataaa
'Programming' 카테고리의 다른 글
160504: 37회차 (0) | 2016.05.04 |
---|---|
160503: 36회차 (1) | 2016.05.03 |
160429: 34회차 (0) | 2016.04.29 |
160428: 33회차 (0) | 2016.04.28 |
160427: 32회차 (1) | 2016.04.27 |