카테고리 없음

오전servlet

logloglog 2020. 12. 24. 13:31

doublesprogramming.tistory.com/63

 

Redirect VS, Forward (Redirect와 forward의 차이)

Redirect VS, Forward (Redirect와 forward의 차이) JSP환경에서 현재 작업중인 페이지에서 다른페이지로 이동하는 두가지 방식의 페이지 전환기능 사례를 통해 redirect와 forward의 차이점에 대해 감을 잡아보

doublesprogramming.tistory.com

리다이렉트는 리퀘스트가 달라진다는 점이 중요하다. 처음에 담았던 파라미터들이 없어진다.

 

로그인정보는 세션에 담아서 사용하는데, 내가 어느브라우저에서 로긴하면 세션이 만들어짐 세션에 기본정보가 들어있고, ,,,,,,,

 

글쓰기기능은 왜 리다이렉트? 글쓰기에서 저자어튼을 누르면 insertMember등의 저장서블릿을 호출할텐데, 저장후 페이지바뀌기전에 새고하면 다시똑같은 저장이 일어날수잇따.

 

서블릿_forward_redirect.pdf
1.95MB


여기다가도 jar파일넣을수있다.

 

 

 

 

ibatis-2.3.4.726.jar
0.37MB
log4j-1.2.17.jar
0.47MB
ojdbc6.jar
2.05MB

 

여기에 자바시간에 하는 파일도 만들거임
패키지의 . 은 사실 폴더안의 폴더인데 그걸 입체적으로 보는게 hi어쩌고.. 그걸로바꿔준다

 

저기서 flat말구 hi어쩌고로 실무에서 많이 쓴다.

 

 

 

패키지만들고

 

 

이거복사해서

 

src에 넣기
jdbc.properties
0.00MB
log4j.xml
0.00MB
SqlMapConfig.properties
0.00MB
SqlMapConfig.xml
0.00MB
ddit밑에 ibatis 만들고 그 안에 파일 복붙
SqlMapClientFactory.java
0.00MB
ddit 밑에 base도 만든다

 

 

BaseDao.java
0.00MB

 


얘들 5개는 처음 만들어놓은 다음에는 거의 건드릴 일이 없다.

 

패키지 구조는

src    
  kr.or.ddit  
    ibatis  
    base  
    common혹은 com :공통으로사용하는 소스들
    그다음부터는 업무관련 패키지
    member  
    product  
    order  
    board  
    dao 실제 쿼리 호출
    vo 오브젝트들 정리
    service 브라우저가 어던기능을 요청했는지 서비그쪽에서 처리를 해줌
    servlet : 브라우저와의 접점. 브라우저가  호출하는 부분

 

 

클래스명 바꾸는 방법

Alt Shift R 누르면 파란색 박스 생기면서 바꿀수있음

같은 방법(ALT SHIFT R)으로 파일명, 변수명, 함수명도 바꿀수있음


오라클들어가서

 

MEM_ID  VARCHAR2 (12) 로 바꾸고 하기

TB_MEMBER_TB_CODE.sql
0.00MB

모두바꾸는 방법 : 바꾸고싶은 단어블록설정하고 CTRL R

MEMBER 우클릭 편집 에서 바꿔준다

 

TIP

SQL누르면 생성할수있는 쿼리나옴

 

 

아이디는 12자리까지 허용한다는 뜻임 근데 한글은 3BYTE차지함.. 암튼 이럴걸 보고 화면상에서 아이디길이등을 체크하면됨

 

 

필드나가면 4가지 필드 (등록일자REG_DATE, 등록자아이디REG_ID, 수정일자UPDATE_DATE 수정자아이디UPDATE_ID)가 들어감

나중에 문제가 생겼을때를 대비함

REG_ID는 프로그램 명으로 들어감.  UPDATE_ID는 실제글을 작성한 사람으로 들어가고

 

CODE테이블

~NAME 은 ~에 대한 한글 명, 한글 설명

~NAME 은 화면에표시되는 부분이라고 생각하면 된다.

 

3개 추가하고 커밋누르면 됨

 

 

 

 

 

 

 

코드는 다 같이 스는거라 common에 넣었다.

 

 

03.TB_MEMBER_HOBBY.sql
0.00MB
복붙해서 

ctrl shift y : 소문자로 바꾸는거 이용

 

중간에 변수추가할떄, dB랑 순서 같이 해주는게 좋다

after~ 이건 예시고 추가하진말것

 

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;
	}
}

xml문서 만들고(소문자로)
doc타입을 이렇게 정의해주는거임 무슨유형문서인지

테이블명으로 vo만들고 테이블명으로 xml만들고 그 이름으로 namespace  를 쓴다. 즉 멤버테이블에 대해서 쿼리하는것들으 다 여기서 정의를 하겠따 (CRUD 모두)

 

근데 product 테이블에 대애서 (는 따로 product.xml만들겠지) 두개 조인해서 쓸때는 어느쪽? 둘중 메인이 되는 쪽의 xml에 써주면 된다.

 

인서트든 셀렉트든 여러개슬수있지만 아디는 각각 달라야한다

 

memberdao

여기서 member.cre~~에서 member 는 name스페이스가 된다

. 뒤는 네임스페이스 안에있는 아이디를찾는거이

 

DB접속정보가 여기있따
 driver를 가져와서 세팅하겠다
사용하고자 하는 sql을 세팅해줘야함. db연결할떄 여기에 세팅되어있는xml을 불러다가 쓸수있음
삭제 (필드에선 jdbc 프로퍼티라고 더 많이씀)

xml은 컨피그에서 쓰고, 컨피그는 누까슬까?

 


jar파일없으니까 톰캣 라이브러리임포트해주기

 

어노테이션 안에 저건 클래스명이랑똑같이 한다 보통
서비스에 이렇게 생김 여기서 조회전에 작업할게잇으면 사전작업해주고, dao호출하면되는거임

 

**익셉션이났을때 화면단까지 던지는게아니고 (예를 들면 인서트를하다가에러나가면 오류가났ㄴ을때 오류를 보고서 사용자에게 뭔가를 해주고싶을때 try catch로 다른페이지를 보여준다든가할때 씀)근데 대부분  throw를 함
에러가났어도 작업을 이어서 해야할때 catch 바깥에 그 이후에 작업해야하는걸 기술할거임 그런경우에도 트라이캐치씀

파라미터로 두번째껄 던지고, member~라는걸 통해서 뭘...??