160503: 36회차
종료하기 전 티스토리 네이버 로그아웃 할 것
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";
}
}
5. 수업
진도:
hw:
6. 할것
parameter : 브라우저(사용자)에서 넘어온 값
attribute : 개발자가 코딩으로 설정하는 값
그래서 HttpServletRequest 명세를 보면 setAttribute 는 있지만 setParameter 는 없습니다.
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 |