doublesprogramming.tistory.com/63
Redirect VS, Forward (Redirect와 forward의 차이)
Redirect VS, Forward (Redirect와 forward의 차이) JSP환경에서 현재 작업중인 페이지에서 다른페이지로 이동하는 두가지 방식의 페이지 전환기능 사례를 통해 redirect와 forward의 차이점에 대해 감을 잡아보
doublesprogramming.tistory.com
리다이렉트는 리퀘스트가 달라진다는 점이 중요하다. 처음에 담았던 파라미터들이 없어진다.
로그인정보는 세션에 담아서 사용하는데, 내가 어느브라우저에서 로긴하면 세션이 만들어짐 세션에 기본정보가 들어있고, ,,,,,,,
글쓰기기능은 왜 리다이렉트? 글쓰기에서 저자어튼을 누르면 insertMember등의 저장서블릿을 호출할텐데, 저장후 페이지바뀌기전에 새고하면 다시똑같은 저장이 일어날수잇따.
저기서 flat말구 hi어쩌고로 실무에서 많이 쓴다.
패키지 구조는
src | |||
kr.or.ddit | |||
ibatis | |||
base | |||
common혹은 com | :공통으로사용하는 소스들 | ||
그다음부터는 업무관련 패키지 | |||
member | |||
product | |||
order | |||
board | |||
dao | 실제 쿼리 호출 | ||
vo | 오브젝트들 정리 | ||
service | 브라우저가 어던기능을 요청했는지 서비그쪽에서 처리를 해줌 | ||
servlet | : 브라우저와의 접점. 브라우저가 호출하는 부분 |
클래스명 바꾸는 방법
같은 방법(ALT SHIFT R)으로 파일명, 변수명, 함수명도 바꿀수있음
오라클들어가서
MEM_ID VARCHAR2 (12) 로 바꾸고 하기
모두바꾸는 방법 : 바꾸고싶은 단어블록설정하고 CTRL R
TIP
필드나가면 4가지 필드 (등록일자REG_DATE, 등록자아이디REG_ID, 수정일자UPDATE_DATE 수정자아이디UPDATE_ID)가 들어감
나중에 문제가 생겼을때를 대비함
REG_ID는 프로그램 명으로 들어감. UPDATE_ID는 실제글을 작성한 사람으로 들어가고
~NAME 은 ~에 대한 한글 명, 한글 설명
~NAME 은 화면에표시되는 부분이라고 생각하면 된다.
코드는 다 같이 스는거라 common에 넣었다.
ctrl shift y : 소문자로 바꾸는거 이용
중간에 변수추가할떄, dB랑 순서 같이 해주는게 좋다
memberVO
package kr.or.ddit.member.vo;
public class MemberVO {
private String memId;
private String memPass;
private String memName;
private String memBir;
private String memZip;
private String memAdd1;
private String memAdd2;
private String memHp;
private String memMail;
private String recvEmailYn;
private String memJob;
private String memLike;
private String memMemorialYype;
private String memMemorialDate;
private int memMileage;
private String memComment;
private String memDelete;
public String getMemId() {
return memId;
}
public void setMemId(String memId) {
this.memId = memId;
}
public String getMemPass() {
return memPass;
}
public void setMemPass(String memPass) {
this.memPass = memPass;
}
public String getMemName() {
return memName;
}
public void setMemName(String memName) {
this.memName = memName;
}
public String getMemBir() {
return memBir;
}
public void setMemBir(String memBir) {
this.memBir = memBir;
}
public String getMemZip() {
return memZip;
}
public void setMemZip(String memZip) {
this.memZip = memZip;
}
public String getMemAdd1() {
return memAdd1;
}
public void setMemAdd1(String memAdd1) {
this.memAdd1 = memAdd1;
}
public String getMemAdd2() {
return memAdd2;
}
public void setMemAdd2(String memAdd2) {
this.memAdd2 = memAdd2;
}
public String getMemHp() {
return memHp;
}
public void setMemHp(String memHp) {
this.memHp = memHp;
}
public String getMemMail() {
return memMail;
}
public void setMemMail(String memMail) {
this.memMail = memMail;
}
public String getRecvEmailYn() {
return recvEmailYn;
}
public void setRecvEmailYn(String recvEmailYn) {
this.recvEmailYn = recvEmailYn;
}
public String getMemJob() {
return memJob;
}
public void setMemJob(String memJob) {
this.memJob = memJob;
}
public String getMemLike() {
return memLike;
}
public void setMemLike(String memLike) {
this.memLike = memLike;
}
public String getMemMemorialYype() {
return memMemorialYype;
}
public void setMemMemorialYype(String memMemorialYype) {
this.memMemorialYype = memMemorialYype;
}
public String getMemMemorialDate() {
return memMemorialDate;
}
public void setMemMemorialDate(String memMemorialDate) {
this.memMemorialDate = memMemorialDate;
}
public int getMemMileage() {
return memMileage;
}
public void setMemMileage(int memMileage) {
this.memMileage = memMileage;
}
public String getMemComment() {
return memComment;
}
public void setMemComment(String memComment) {
this.memComment = memComment;
}
public String getMemDelete() {
return memDelete;
}
public void setMemDelete(String memDelete) {
this.memDelete = memDelete;
}
}
codevo
package kr.or.ddit.common.vo;
public class CodeVO {
private String groupCode;
private String groupCodeName;
private String code;
private String codeName;
private String description;
private String useYn;
public String getGroupCode() {
return groupCode;
}
public void setGroupCode(String groupCode) {
this.groupCode = groupCode;
}
public String getGroupCodeName() {
return groupCodeName;
}
public void setGroupCodeName(String groupCodeName) {
this.groupCodeName = groupCodeName;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getCodeName() {
return codeName;
}
public void setCodeName(String codeName) {
this.codeName = codeName;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getUseYn() {
return useYn;
}
public void setUseYn(String useYn) {
this.useYn = useYn;
}
}
임포트 할 때 팁
Ctrl Shift O
memberDao
package kr.or.ddit.member.dao;
import java.sql.SQLException;
import java.util.List;
import com.ibatis.sqlmap.client.SqlMapClient;
import kr.or.ddit.base.dao.BaseDao;
import kr.or.ddit.member.vo.MemberVO;
public class MemberDao extends BaseDao{
MemberVO mv;
private SqlMapClient smc;
public MemberDao() {
smc = super.getSqlMapClient();//BaseDao 에게서 받아다 쓸거니까
}
public List<MemberVO> retrieveMemberList () throws SQLException{//외부에서 써야하기때문에 public//memberVO로 이루어진 LIst 리턴
smc.queryForList("member.retrieveMemberList");//목록을 위한 조회를 하는데 member.retrieveMemberList 이 키를 가지고 쿼리를 돌리는거임. sql실행하는거니까 에러발생할수있음
return null;
}
}
테이블명으로 vo만들고 테이블명으로 xml만들고 그 이름으로 namespace 를 쓴다. 즉 멤버테이블에 대해서 쿼리하는것들으 다 여기서 정의를 하겠따 (CRUD 모두)
근데 product 테이블에 대애서 (는 따로 product.xml만들겠지) 두개 조인해서 쓸때는 어느쪽? 둘중 메인이 되는 쪽의 xml에 써주면 된다.
memberdao
여기서 member.cre~~에서 member 는 name스페이스가 된다
. 뒤는 네임스페이스 안에있는 아이디를찾는거이
ㅁ
xml은 컨피그에서 쓰고, 컨피그는 누까슬까?
jar파일없으니까 톰캣 라이브러리임포트해주기
**익셉션이났을때 화면단까지 던지는게아니고 (예를 들면 인서트를하다가에러나가면 오류가났ㄴ을때 오류를 보고서 사용자에게 뭔가를 해주고싶을때 try catch로 다른페이지를 보여준다든가할때 씀)근데 대부분 throw를 함
에러가났어도 작업을 이어서 해야할때 catch 바깥에 그 이후에 작업해야하는걸 기술할거임 그런경우에도 트라이캐치씀