PC

블로그 이미지

DAVID

160503: 36회차

Programming 2016. 5. 3. 17:56

종료하기 전 티스토리 네이버 로그아웃 할 것


1. 툴

동일

추가시: 


2. 폴더

동일

추가시:


3. 사용할 사이트

동일

추가시:


4. 공부하는 것


Eclipse 

Class Not Found Exception


고치는 법은


1. Class 가 없나 확인해본다.


2. Class 가 있는데도 실행이 안 될 경우에는


1) Workspace가 있는 경로의 build 파일을

D:\javadb\web\workspace_mvc\mvc_board\build\classes


2) Metadata가 있는 경로에서 확인해 보면 아마 폴더만 있거나 생성이 안 되어 있을 것이니까

저 빌드 파일을 여기에 복사 붙여넣기 한다.

D:\javadb\web\workspace_mvc\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\mvc_board\WEB-INF



아침에 오자마자 고침 -_-)...

어제까지 되다가 껐다 키니까 빌드가 사라지는 기적...



앞으로는 try catch finally 안하고 try finally 하고 throws 해주기로 함 - 어짜피 manager에서 exception 처리 해주니까



졸음코딩하다가 12시 20분부터 12시 50분까지 한 30분 잤음...

으 좀 괜찮다...


카페인이 안 들어있다고 했다가 들어있다고 했다가 하는 컨피던스를 샀습니다.

오로나민C 왜 품절이져...2+1이긴 한디... 저번 주에 나한테는 1+1이라고 말 안해서 알바가 하나 챙긴 기억이 나네여...


넘나 어려운 트랜잭션(Transaction)


public boolean reply(BoardDTO dto) {

boolean flag = false;

Connection con = DBOpen.getConnection();

try{

//TRANSACTION 처리

//1. ansnum 증가(update)

//2. 답변을 생성(create)한다

// 둘 중 하나가 안 되면 취소되야함

con.setAutoCommit(false); //executeUpdate시 자동으로 Database가 처리하지 못하도록 false로 바꿈


//1. ansnum 증가(update)

dao.upAnsnum(dto.getRef(), dto.getAnsnum(), con); //부모의 ref와 같으면서 ansnum보다 커야하니까

//2. 답변을 생성(create)한다

flag = dao.replyCreate(dto, con);

//1이나 2가 rollback 됨을 처리하려고 같은 connection을 쓴다. 

con.commit(); //위에서 executeUpdate시 자동으로 Database가 처리하지 못하도록 false로 바꿈

//상태였는데 이제 commit 하면 db에 정말로 저장이 된다.

}catch(Exception e){

try {

con.rollback(); //오류가 났을 때 catch로 오니까 여기서 rollback(복귀) 해준다.

} catch (SQLException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

e.printStackTrace();

}finally {

try {

con.setAutoCommit(true); //다시 자동으로 Database가 처리하도록 true 로 바꿈

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} 

DBClose.close(con);

}

return flag;

}


}



---------------------------------------------------------------------------------------

트랜잭션 트랜젝션 트랜스액션 (내가 검색하는 용으로)


예시는

A계좌 - 100만원

B계좌 - 200만원


1) B에서 100출금해서

2) A로 100 입금하고 싶을 떄


1)+2)가 계좌이체이다! -> 원자성을 가진다.


만약에

1) 성공

2) 오류가 나면 1)이 취소되어서 돈이 돌아와야함! - 분리할 수 없는 작업


1) DAO 1개

2) DAO 1개


총 DAO 2개지면 Manager에서 하나의 단위로 묶는다 - 트랜잭션


트랜스 액션 트랜잭션 트랜젝션 Transaction 이다


-----------------------------------------------------------------------------------------------------------


ReplyProcAction.java


package action;


import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import org.apache.commons.fileupload.FileItem;


import model.BoardDTO;

import model.BoardMgr;

import utility.UploadSave;

import utility.Utility;


public class ReplyProcAction implements Action {


@Override

public String execute(HttpServletRequest request, HttpServletResponse response) throws Throwable {

// TODO Auto-generated method stub

BoardDTO dto = new BoardDTO();

String upDir = request.getRealPath("/view/storage");

String tempDir = request.getRealPath("/view/temp");

UploadSave upload = new UploadSave(request, -1, -1, tempDir);


int num = Integer.parseInt(upload.getParameter("num"));

int ref = Integer.parseInt(upload.getParameter("ref"));

int ansnum = Integer.parseInt(upload.getParameter("ansnum"));

int indent = Integer.parseInt(upload.getParameter("indent"));

String nowPage = upload.getParameter("nowPage");

String col = upload.getParameter("col");

String word = UploadSave.encode(upload.getParameter("word"));


String name = UploadSave.encode(upload.getParameter("name"));

String subject = UploadSave.encode(upload.getParameter("subject"));

String content = UploadSave.encode(upload.getParameter("content"));

String passwd = UploadSave.encode(upload.getParameter("passwd"));


FileItem fileItem = upload.getFileItem("filename");

int filesize = (int) fileItem.getSize();

String filename = "";


if (filesize > 0) {


filename = UploadSave.saveFile(fileItem, upDir);

}


// dto.setNum(num); - 새롭게 생성하는 부분이니까 num을 넣어주지 않음


dto.setName(name);

dto.setSubject(subject);

dto.setContent(content);

dto.setPasswd(passwd);

dto.setFilename(filename);

dto.setFilesize(filesize);

dto.setRefnum(num); // 부모글 확인 컬럼

dto.setRef(ref);

dto.setIndent(indent);

dto.setAnsnum(ansnum);

dto.setIp(request.getRemoteAddr());


BoardMgr mgr = new BoardMgr();

boolean flag = mgr.reply(dto);


request.setAttribute("flag", flag);

request.setAttribute("nowPage", nowPage);

request.setAttribute("col", col);

request.setAttribute("word", word);


return "/view/replyProc.jsp";

}


}


------------------------------------------------

매니저에서 reply


public boolean reply(BoardDTO dto) {
boolean flag = false;
Connection con = DBOpen.getConnection();
try{
//TRANSACTION 처리
//1. ansnum 증가(update)
//2. 답변을 생성(create)한다
// 둘 중 하나가 안 되면 취소되야함
con.setAutoCommit(false); //executeUpdate시 자동으로 Database가 처리하지 못하도록 false로 바꿈

//1. ansnum 증가(update)
dao.upAnsnum(dto.getRef(), dto.getAnsnum(), con); //부모의 ref와 같으면서 ansnum보다 커야하니까
//2. 답변을 생성(create)한다
flag = dao.replyCreate(dto, con);
//1이나 2가 rollback 됨을 처리하려고 같은 connection을 쓴다. 
con.commit(); //위에서 executeUpdate시 자동으로 Database가 처리하지 못하도록 false로 바꿈
//상태였는데 이제 commit 하면 db에 정말로 저장이 된다.
}catch(Exception e){
try {
con.rollback(); //오류가 났을 때 catch로 오니까 여기서 rollback(복귀) 해준다.
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
}finally {
try {
con.setAutoCommit(true); //다시 자동으로 Database가 처리하도록 true 로 바꿈
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} 
DBClose.close(con);
}
return flag;
}
-----------------------------------------------------------------------------







mvc_board.zip

























5. 수업

진도: 

hw: 


6. 할것



//parameter랑 attribute차이... :>
오늘은 아파도 문제 풀고 잘 것... - 아예 세트로 된 거 한 세트 풀고 자기! :>

parameter : 브라우저(사용자)에서 넘어온 값

attribute : 개발자가 코딩으로 설정하는 값

그래서 HttpServletRequest 명세를 보면 setAttribute 는 있지만 setParameter 는 없습니다.

출처: http://okky.kr/article/287288


getParameter와 getAttribute 차이

Development/JSP & Servlet 2012.03.28 21:50



GET / POST 방식으로 파라미터 값을 넘기고, 그 값을 사용할때 쓰는 메소드가 getParameter

 

request, session 등등과 같은 영역에 임의의 속성값(Attribute)을 저장하고 가져올때 사용하는것이

 

set/getAttribute()입니다.


getParameter는 리퀘스트 영역에 있는 메소드 입니다...

 

아실거라 생각하지만....스코프에는 page , request, response , session , aplication 등이 있습니다...

 

getAttribute에 경우 위에있는 모든영역에 공통으로 있는 메소드로...

 

 헤쉬맵 방식으로....키값과 벨류값으로 setAttribute 한 값을 키값을 이용해 벨류값을

 

반환받을수 있습니다...

 

일단 큰차이로는 벨류값에 타입인데요...

 

getParameter는 스트링 타입입니다....

 

그리고 getAttribute 는 오브젝트 타입입니다...

 

getParameter는 스트링값을 다루기때문에 주로 쿼리스트링값등을 받는데 사용되고....

 

getAttribute는 오브젝트 타입을 다루기때문에 자바빈객체나 뭐 다른클레스객체등을 받을때 사용합니다..


출처: http://linuxism.tistory.com/497













http://egloos.zum.com/elindreams/v/821839
이거도 확인해 볼 것






//스크립틀릿에는 일반자바소스코드를 그대로 코딩하기떄문에 끝에 반드시 세미콜론이 있어야한다.

'Programming' 카테고리의 다른 글

160509: 38회차  (0) 2016.05.09
160504: 37회차  (0) 2016.05.04
160502: 35회차  (0) 2016.05.02
160429: 34회차  (0) 2016.04.29
160428: 33회차  (0) 2016.04.28
Posted by DAVID
블로그 이미지

by DAVID

공지사항

    최근...

  • 포스트
  • 댓글
  • 트랙백
  • 더 보기

태그

글 보관함

«   2025/07   »
일 월 화 수 목 금 토
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

링크

카테고리

PC (112)
Programming (109)

카운터

Total
Today
Yesterday
방명록 : 관리자 : 글쓰기
DAVID's Blog is powered by daumkakao
Skin info material T Mark3 by 뭐하라
favicon

PC

  • 태그
  • 링크 추가
  • 방명록

관리자 메뉴

  • 관리자 모드
  • 글쓰기
  • PC (112)
    • Programming (109)

카테고리

PC화면 보기 티스토리 Daum

티스토리툴바