Jam's story

[JSP] MVC2패턴으로 회원가입 구현 본문

JSP

[JSP] MVC2패턴으로 회원가입 구현

애플쩀 2022. 7. 7. 23:04

 

  • Member 테이블에 담기는 주소는 주소가 아닌 주소코드이기 때문에 MemAdr 테이블을 이용하여 메인주소와 상세주소를 담아주어야 합니다. 그렇기 때문에 MemberDTO에 추가로 MemAdrDTO  객체를 만들었습니다. 
  • 주소코드는  회원정보의 외래키로 속하기 때문에, 주소테이블의 데이터를 먼저 처리해야 합니다. 
  • (SQL) Insert문에서 여러 값을 넣을때는 (Member와 MemAdr 테이블을 조인한 ) 서브쿼리를 사용할 수 없기  때문에 (값 1개만 넣을때는 편법으로 가능하다고 합니다.)  먼저 주소테이블에 데이터를 넣어주는 메소드를 실행시키고, 그 후에 멤버테이블에 고객정보를 넣어주는 메소드를 실행 시켰습니다. 

 

MemberDTO
package domain;

public class MemberDTO {
   private String mem_code;
   private String mem_id;
   private String mem_pw;
   private String mem_gender;
   private String mem_name;
   private String mem_tel;
   private String mem_lan;
   private String adr_code;
   private int check;

public MemberDTO() {
      super();
   }
   
   
   public MemberDTO(String mem_code, String mem_id, String mem_pw, String mem_gender, String mem_name, String mem_tel,
         String mem_lan, String adr_code, int check) {
      super();
      this.mem_code = mem_code;
      this.mem_id = mem_id;
      this.mem_pw = mem_pw;
      this.mem_gender = mem_gender;
      this.mem_name = mem_name;
      this.mem_tel = mem_tel;
      this.mem_lan = mem_lan;
      this.adr_code = adr_code;
      this.check = check;
   }

   
   //회원가입을 위한 
   public MemberDTO(String mem_id, String mem_pw, String mem_gender, String mem_name, String mem_tel) {
	      super();
	  
	      this.mem_id = mem_id;
	      this.mem_pw = mem_pw;
	      this.mem_gender = mem_gender;
	      this.mem_name = mem_name;
	      this.mem_tel = mem_tel;
	   
	   }
   public int getCheck() {
	   return check;
   }
   
   
   public void setCheck(int check) {
	   this.check = check;
   }
   public String getMem_code() {
      return mem_code;
   }
   public void setMem_code(String mem_code) {
      this.mem_code = mem_code;
   }
   public String getMem_id() {
      return mem_id;
   }
   public void setMem_id(String mem_id) {
      this.mem_id = mem_id;
   }
   public String getMem_pw() {
      return mem_pw;
   }
   public void setMem_pw(String mem_pw) {
      this.mem_pw = mem_pw;
   }
   public String getMem_gender() {
      return mem_gender;
   }
   public void setMem_gender(String mem_gender) {
      this.mem_gender = mem_gender;
   }
   public String getMem_name() {
      return mem_name;
   }
   public void setMem_name(String mem_name) {
      this.mem_name = mem_name;
   }
   public String getMem_tel() {
      return mem_tel;
   }
   public void setMem_tel(String mem_tel) {
      this.mem_tel = mem_tel;
   }
   public String getMem_lan() {
      return mem_lan;
   }
   public void setMem_lan(String mem_lan) {
      this.mem_lan = mem_lan;
   }
   public String getAdr_code() {
      return adr_code;
   }
   public void setAdr_code(String adr_code) {
      this.adr_code = adr_code;
   }


@Override
public String toString() {
	return "MemberDTO [mem_code=" + mem_code + ", mem_id=" + mem_id + ", mem_pw=" + mem_pw + ", mem_gender="
			+ mem_gender + ", mem_name=" + mem_name + ", mem_tel=" + mem_tel + ", mem_lan=" + mem_lan + ", adr_code="
			+ adr_code + ", check=" + check + "]";
}
  
   
   
}

 

MemAdrDTO
package domain;


public class MemAdrDTO {
	private String adr_code;
	private String adr_main;
	private String adr_sub;
	private String adr_other;
	
	
	
	public MemAdrDTO() {
		super();
		// TODO Auto-generated constructor stub
	}
	
	public MemAdrDTO(String adr_main, String adr_sub) {
		super();

		this.adr_main = adr_main;
		this.adr_sub = adr_sub;
	}
	public MemAdrDTO(String adr_code, String adr_main, String adr_sub) {
		super();
		this.adr_code = adr_code;
		this.adr_main = adr_main;
		this.adr_sub = adr_sub;
	}
	
	public MemAdrDTO(String adr_code, String adr_main, String adr_sub, String adr_other) {
		super();
		this.adr_code = adr_code;
		this.adr_main = adr_main;
		this.adr_sub = adr_sub;
		this.adr_other = adr_other;
	}

	public String getAdr_code() {
		return adr_code;
	}
	public void setAdr_code(String adr_code) {
		this.adr_code = adr_code;
	}
	public String getAdr_main() {
		return adr_main;
	}
	public void setAdr_main(String adr_main) {
		this.adr_main = adr_main;
	}
	public String getAdr_sub() {
		return adr_sub;
	}
	public void setAdr_sub(String adr_sub) {
		this.adr_sub = adr_sub;
	}
	public String getAdr_other() {
		return adr_other;
	}
	public void setAdr_other(String adr_other) {
		this.adr_other = adr_other;
	}
	@Override
	public String toString() {
		return "MemAdrDTO [adr_code=" + adr_code + ", adr_main=" + adr_main + ", adr_sub=" + adr_sub + ", adr_other="
				+ adr_other + "]";
	}
	
	
}

 

주소적는 폼이 있는 뷰 -guest.jsp
 <!--시작:지번주소 입력-->
 <form id="jibunSform" name="jibunSform" method="post" action="">
  <div id="p_inbox gibun_add" style="margin-left:40px;">
  <p class="tip01">&nbsp;</p>
  <table border="0">
    <tbody><tr>
      <th>지역명</th>
      <td class="area"><span class="add_01">
        <input type="text" id="admin_cty_nm" name="admin_cty_nm" class="input_add" placeholder="지번,도로명,건물명으로 검색해주세요" onkeypress="doIfEnter(event, getBuildList)">
        </span><span class="add_02">
        <button type="button" onclick="getBuildList();" class="btn">검색</button>
        </span>
        <!--시작:주소선택-->

        <div id="admin_cty_build" class="area_select" style="width: 560px; display: none;">


        <ul>
			
				<li>
					<span class="select_address">
						<a id="dong_build_sel" sidoname="서울특별시" gunguname="중구" dongname="만리동1가" donggovname="중림동" jibunaddress="서울특별시 중구 만리동1가 62-7 서울역 디오빌 (중림동)" streetaddress="서울특별시 중구 만리재로 193 (만리동1가)" dongaddress="서울특별시 중구 만리동1가(중림동)" fulladdress="서울특별시 중구 만리재로  193 (만리동1가,중림동,서울역 디오빌) 지번: 62-7" location="37.55495010313553,126.96719338217979" updatedate="2022-07-08" legaldongandleename="만리동1가" jibunmainandsub="62-7" streetname="만리재로" bdmainandsub="193" bdname="서울역 디오빌" sidonameorder="0" mega_cty_nm="서울특별시" cty_rgn_nm="중구" admin_cty_nm="만리동1가" admin_cty_cd="" street_no="62-7" build_nm="서울역 디오빌" href="javascript:;">
						
						서울특별시 중구 만리재로  193 (만리동1가,중림동,서울역 디오빌) 지번: 62-7
						</a>
					</span>
					<span class="select_btn">
						<a id="dong_build_sel" sidoname="서울특별시" gunguname="중구" dongname="만리동1가" donggovname="중림동" jibunaddress="서울특별시 중구 만리동1가 62-7 서울역 디오빌 (중림동)" streetaddress="서울특별시 중구 만리재로 193 (만리동1가)" dongaddress="서울특별시 중구 만리동1가(중림동)" fulladdress="서울특별시 중구 만리재로  193 (만리동1가,중림동,서울역 디오빌) 지번: 62-7" location="37.55495010313553,126.96719338217979" updatedate="2022-07-08" legaldongandleename="만리동1가" jibunmainandsub="62-7" streetname="만리재로" bdmainandsub="193" bdname="서울역 디오빌" sidonameorder="0" mega_cty_nm="서울특별시" cty_rgn_nm="중구" admin_cty_nm="만리동1가" admin_cty_cd="" street_no="62-7" build_nm="서울역 디오빌" href="javascript:;">
								선택
						</a>
					</span>
				</li>
			
				<li>
					<span class="select_address">
						<a id="dong_build_sel" sidoname="서울특별시" gunguname="중구" dongname="봉래동2가" donggovname="회현동" jibunaddress="서울특별시 중구 봉래동2가 123 서울역앞우체국 (회현동)" streetaddress="서울특별시 중구 통일로 21 (봉래동2가)" dongaddress="서울특별시 중구 봉래동2가(회현동)" fulladdress="서울특별시 중구 통일로  21 (봉래동2가,회현동,서울역앞우체국) 지번: 123" location="37.55753890576452,126.97144409996395" updatedate="2022-07-08" legaldongandleename="봉래동2가" jibunmainandsub="123" streetname="통일로" bdmainandsub="21" bdname="서울역앞우체국" sidonameorder="0" mega_cty_nm="서울특별시" cty_rgn_nm="중구" admin_cty_nm="봉래동2가" admin_cty_cd="" street_no="123" build_nm="서울역앞우체국" href="javascript:;">
						
						서울특별시 중구 통일로  21 (봉래동2가,회현동,서울역앞우체국) 지번: 123
						</a>
					</span>
					<span class="select_btn">
						<a id="dong_build_sel" sidoname="서울특별시" gunguname="중구" dongname="봉래동2가" donggovname="회현동" jibunaddress="서울특별시 중구 봉래동2가 123 서울역앞우체국 (회현동)" streetaddress="서울특별시 중구 통일로 21 (봉래동2가)" dongaddress="서울특별시 중구 봉래동2가(회현동)" fulladdress="서울특별시 중구 통일로  21 (봉래동2가,회현동,서울역앞우체국) 지번: 123" location="37.55753890576452,126.97144409996395" updatedate="2022-07-08" legaldongandleename="봉래동2가" jibunmainandsub="123" streetname="통일로" bdmainandsub="21" bdname="서울역앞우체국" sidonameorder="0" mega_cty_nm="서울특별시" cty_rgn_nm="중구" admin_cty_nm="봉래동2가" admin_cty_cd="" street_no="123" build_nm="서울역앞우체국" href="javascript:;">
								선택
						</a>
					</span>
				</li>
			
				<li>
					<span class="select_address">
						<a id="dong_build_sel" sidoname="서울특별시" gunguname="중구" dongname="남대문로5가" donggovname="회현동" jibunaddress="서울특별시 중구 남대문로5가 73-6 서울역 1호선 (회현동)" streetaddress="서울특별시 중구 세종대로 지하 2 (남대문로5가)" dongaddress="서울특별시 중구 남대문로5가(회현동)" fulladdress="서울특별시 중구 세종대로 지하 2 (남대문로5가,회현동,서울역 1호선) 지번: 73-6" location="37.55692795477362,126.97255639854666" updatedate="2022-07-08" legaldongandleename="남대문로5가" jibunmainandsub="73-6" streetname="세종대로" bdmainandsub="2" bdname="서울역 1호선" sidonameorder="0" mega_cty_nm="서울특별시" cty_rgn_nm="중구" admin_cty_nm="남대문로5가" admin_cty_cd="" street_no="73-6" build_nm="서울역 1호선" href="javascript:;">
						
						서울특별시 중구 세종대로 지하 2 (남대문로5가,회현동,서울역 1호선) 지번: 73-6
						</a>
					</span>
					<span class="select_btn">
						<a id="dong_build_sel" sidoname="서울특별시" gunguname="중구" dongname="남대문로5가" donggovname="회현동" jibunaddress="서울특별시 중구 남대문로5가 73-6 서울역 1호선 (회현동)" streetaddress="서울특별시 중구 세종대로 지하 2 (남대문로5가)" dongaddress="서울특별시 중구 남대문로5가(회현동)" fulladdress="서울특별시 중구 세종대로 지하 2 (남대문로5가,회현동,서울역 1호선) 지번: 73-6" location="37.55692795477362,126.97255639854666" updatedate="2022-07-08" legaldongandleename="남대문로5가" jibunmainandsub="73-6" streetname="세종대로" bdmainandsub="2" bdname="서울역 1호선" sidonameorder="0" mega_cty_nm="서울특별시" cty_rgn_nm="중구" admin_cty_nm="남대문로5가" admin_cty_cd="" street_no="73-6" build_nm="서울역 1호선" href="javascript:;">
								선택
						</a>
					</span>
				</li>
			
				<li>
					<span class="select_address">
						<a id="dong_build_sel" sidoname="서울특별시" gunguname="용산구" dongname="서계동" donggovname="청파동" jibunaddress="서울특별시 용산구 서계동 219-17 서울역풍림아이원플러스 (청파동)" streetaddress="서울특별시 용산구 만리재로 202 (서계동)" dongaddress="서울특별시 용산구 서계동(청파동)" fulladdress="서울특별시 용산구 만리재로  202 (서계동,청파동,서울역풍림아이원플러스) 지번: 219-17" location="37.555067730026316,126.96846575335744" updatedate="2022-07-08" legaldongandleename="서계동" jibunmainandsub="219-17" streetname="만리재로" bdmainandsub="202" bdname="서울역풍림아이원플러스" sidonameorder="0" mega_cty_nm="서울특별시" cty_rgn_nm="용산구" admin_cty_nm="서계동" admin_cty_cd="" street_no="219-17" build_nm="서울역풍림아이원플러스" href="javascript:;">
						
						서울특별시 용산구 만리재로  202 (서계동,청파동,서울역풍림아이원플러스) 지번: 219-17
						</a>
					</span>
					<span class="select_btn">
						<a id="dong_build_sel" sidoname="서울특별시" gunguname="용산구" dongname="서계동" donggovname="청파동" jibunaddress="서울특별시 용산구 서계동 219-17 서울역풍림아이원플러스 (청파동)" streetaddress="서울특별시 용산구 만리재로 202 (서계동)" dongaddress="서울특별시 용산구 서계동(청파동)" fulladdress="서울특별시 용산구 만리재로  202 (서계동,청파동,서울역풍림아이원플러스) 지번: 219-17" location="37.555067730026316,126.96846575335744" updatedate="2022-07-08" legaldongandleename="서계동" jibunmainandsub="219-17" streetname="만리재로" bdmainandsub="202" bdname="서울역풍림아이원플러스" sidonameorder="0" mega_cty_nm="서울특별시" cty_rgn_nm="용산구" admin_cty_nm="서계동" admin_cty_cd="" street_no="219-17" build_nm="서울역풍림아이원플러스" href="javascript:;">
								선택
						</a>
					</span>
				</li>
			
				<li>
					<span class="select_address">
						<a id="dong_build_sel" sidoname="서울특별시" gunguname="중구" dongname="만리동2가" donggovname="중림동" jibunaddress="서울특별시 중구 만리동2가 288 서울역한라비발디센트럴 (중림동)" streetaddress="서울특별시 중구 만리재로 177 (만리동2가, 서울역한라비발디센트럴)" dongaddress="서울특별시 중구 만리동2가(중림동)" fulladdress="서울특별시 중구 만리재로  177 (만리동2가,중림동,서울역한라비발디센트럴) 지번: 288" location="37.554536898328166,126.9654615504536" updatedate="2022-07-08" legaldongandleename="만리동2가" jibunmainandsub="288" streetname="만리재로" bdmainandsub="177" bdname="서울역한라비발디센트럴" sidonameorder="0" mega_cty_nm="서울특별시" cty_rgn_nm="중구" admin_cty_nm="만리동2가" admin_cty_cd="" street_no="288" build_nm="서울역한라비발디센트럴" href="javascript:;">
						
						서울특별시 중구 만리재로  177 (만리동2가,중림동,서울역한라비발디센트럴) 지번: 288
						</a>
					</span>
					<span class="select_btn">
						<a id="dong_build_sel" sidoname="서울특별시" gunguname="중구" dongname="만리동2가" donggovname="중림동" jibunaddress="서울특별시 중구 만리동2가 288 서울역한라비발디센트럴 (중림동)" streetaddress="서울특별시 중구 만리재로 177 (만리동2가, 서울역한라비발디센트럴)" dongaddress="서울특별시 중구 만리동2가(중림동)" fulladdress="서울특별시 중구 만리재로  177 (만리동2가,중림동,서울역한라비발디센트럴) 지번: 288" location="37.554536898328166,126.9654615504536" updatedate="2022-07-08" legaldongandleename="만리동2가" jibunmainandsub="288" streetname="만리재로" bdmainandsub="177" bdname="서울역한라비발디센트럴" sidonameorder="0" mega_cty_nm="서울특별시" cty_rgn_nm="중구" admin_cty_nm="만리동2가" admin_cty_cd="" street_no="288" build_nm="서울역한라비발디센트럴" href="javascript:;">
								선택
						</a>
					</span>
				</li>
			
				<li>
					<span class="select_address">
						<a id="dong_build_sel" sidoname="서울특별시" gunguname="은평구" dongname="역촌동" donggovname="역촌동" jibunaddress="서울특별시 은평구 역촌동 29-24 서울역촌유치원" streetaddress="서울특별시 은평구 진흥로7길 25 (역촌동)" dongaddress="서울특별시 은평구 역촌동" fulladdress="서울특별시 은평구 진흥로7길  25 (역촌동,서울역촌유치원) 지번: 29-24" location="37.60434976874782,126.91892128631066" updatedate="2022-07-08" legaldongandleename="역촌동" jibunmainandsub="29-24" streetname="진흥로7길" bdmainandsub="25" bdname="서울역촌유치원" sidonameorder="0" mega_cty_nm="서울특별시" cty_rgn_nm="은평구" admin_cty_nm="역촌동" admin_cty_cd="" street_no="29-24" build_nm="서울역촌유치원" href="javascript:;">
						
						서울특별시 은평구 진흥로7길  25 (역촌동,서울역촌유치원) 지번: 29-24
						</a>
					</span>
					<span class="select_btn">
						<a id="dong_build_sel" sidoname="서울특별시" gunguname="은평구" dongname="역촌동" donggovname="역촌동" jibunaddress="서울특별시 은평구 역촌동 29-24 서울역촌유치원" streetaddress="서울특별시 은평구 진흥로7길 25 (역촌동)" dongaddress="서울특별시 은평구 역촌동" fulladdress="서울특별시 은평구 진흥로7길  25 (역촌동,서울역촌유치원) 지번: 29-24" location="37.60434976874782,126.91892128631066" updatedate="2022-07-08" legaldongandleename="역촌동" jibunmainandsub="29-24" streetname="진흥로7길" bdmainandsub="25" bdname="서울역촌유치원" sidonameorder="0" mega_cty_nm="서울특별시" cty_rgn_nm="은평구" admin_cty_nm="역촌동" admin_cty_cd="" street_no="29-24" build_nm="서울역촌유치원" href="javascript:;">
								선택
						</a>
					</span>
				</li>
			
				<li>
					<span class="select_address">
						<a id="dong_build_sel" sidoname="서울특별시" gunguname="용산구" dongname="동자동" donggovname="남영동" jibunaddress="서울특별시 용산구 동자동 43-205 서울역(철도역) (남영동)" streetaddress="서울특별시 용산구 한강대로 405 (동자동)" dongaddress="서울특별시 용산구 동자동(남영동)" fulladdress="서울특별시 용산구 한강대로  405 (동자동,남영동,서울역(철도역)) 지번: 43-205" location="37.55483771349384,126.9718120082412" updatedate="2022-07-08" legaldongandleename="동자동" jibunmainandsub="43-205" streetname="한강대로" bdmainandsub="405" bdname="서울역(철도역)" sidonameorder="0" mega_cty_nm="서울특별시" cty_rgn_nm="용산구" admin_cty_nm="동자동" admin_cty_cd="" street_no="43-205" build_nm="서울역(철도역)" href="javascript:;">
						
						서울특별시 용산구 한강대로  405 (동자동,남영동,서울역(철도역)) 지번: 43-205
						</a>
					</span>
					<span class="select_btn">
						<a id="dong_build_sel" sidoname="서울특별시" gunguname="용산구" dongname="동자동" donggovname="남영동" jibunaddress="서울특별시 용산구 동자동 43-205 서울역(철도역) (남영동)" streetaddress="서울특별시 용산구 한강대로 405 (동자동)" dongaddress="서울특별시 용산구 동자동(남영동)" fulladdress="서울특별시 용산구 한강대로  405 (동자동,남영동,서울역(철도역)) 지번: 43-205" location="37.55483771349384,126.9718120082412" updatedate="2022-07-08" legaldongandleename="동자동" jibunmainandsub="43-205" streetname="한강대로" bdmainandsub="405" bdname="서울역(철도역)" sidonameorder="0" mega_cty_nm="서울특별시" cty_rgn_nm="용산구" admin_cty_nm="동자동" admin_cty_cd="" street_no="43-205" build_nm="서울역(철도역)" href="javascript:;">
								선택
						</a>
					</span>
				</li>
			
				<li>
					<span class="select_address">
						<a id="dong_build_sel" sidoname="서울특별시" gunguname="중구" dongname="만리동1가" donggovname="중림동" jibunaddress="서울특별시 중구 만리동1가 231 LIG 서울역 리가 (중림동)" streetaddress="서울특별시 중구 만리재로33길 21 (만리동1가, LIG 서울역 리가)" dongaddress="서울특별시 중구 만리동1가(중림동)" fulladdress="서울특별시 중구 만리재로33길  21 (만리동1가,중림동,LIG 서울역 리가) 지번: 231" location="37.55559404897448,126.96707115682004" updatedate="2022-07-08" legaldongandleename="만리동1가" jibunmainandsub="231" streetname="만리재로33길" bdmainandsub="21" bdname="LIG 서울역 리가" sidonameorder="0" mega_cty_nm="서울특별시" cty_rgn_nm="중구" admin_cty_nm="만리동1가" admin_cty_cd="" street_no="231" build_nm="LIG 서울역 리가" href="javascript:;">
						
						서울특별시 중구 만리재로33길  21 (만리동1가,중림동,LIG 서울역 리가) 지번: 231
						</a>
					</span>
					<span class="select_btn">
						<a id="dong_build_sel" sidoname="서울특별시" gunguname="중구" dongname="만리동1가" donggovname="중림동" jibunaddress="서울특별시 중구 만리동1가 231 LIG 서울역 리가 (중림동)" streetaddress="서울특별시 중구 만리재로33길 21 (만리동1가, LIG 서울역 리가)" dongaddress="서울특별시 중구 만리동1가(중림동)" fulladdress="서울특별시 중구 만리재로33길  21 (만리동1가,중림동,LIG 서울역 리가) 지번: 231" location="37.55559404897448,126.96707115682004" updatedate="2022-07-08" legaldongandleename="만리동1가" jibunmainandsub="231" streetname="만리재로33길" bdmainandsub="21" bdname="LIG 서울역 리가" sidonameorder="0" mega_cty_nm="서울특별시" cty_rgn_nm="중구" admin_cty_nm="만리동1가" admin_cty_cd="" street_no="231" build_nm="LIG 서울역 리가" href="javascript:;">
								선택
						</a>
					</span>
				</li>
			
				<li>
					<span class="select_address">
						<a id="dong_build_sel" sidoname="서울특별시" gunguname="용산구" dongname="동자동" donggovname="남영동" jibunaddress="서울특별시 용산구 동자동 14-151 4호선 서울역 (남영동)" streetaddress="서울특별시 용산구 한강대로 지하 392 (동자동)" dongaddress="서울특별시 용산구 동자동(남영동)" fulladdress="서울특별시 용산구 한강대로 지하 392 (동자동,남영동,4호선 서울역) 지번: 14-151" location="37.55320347710953,126.97275360634195" updatedate="2022-07-08" legaldongandleename="동자동" jibunmainandsub="14-151" streetname="한강대로" bdmainandsub="392" bdname="4호선 서울역" sidonameorder="0" mega_cty_nm="서울특별시" cty_rgn_nm="용산구" admin_cty_nm="동자동" admin_cty_cd="" street_no="14-151" build_nm="4호선 서울역" href="javascript:;">
						
						서울특별시 용산구 한강대로 지하 392 (동자동,남영동,4호선 서울역) 지번: 14-151
						</a>
					</span>
					<span class="select_btn">
						<a id="dong_build_sel" sidoname="서울특별시" gunguname="용산구" dongname="동자동" donggovname="남영동" jibunaddress="서울특별시 용산구 동자동 14-151 4호선 서울역 (남영동)" streetaddress="서울특별시 용산구 한강대로 지하 392 (동자동)" dongaddress="서울특별시 용산구 동자동(남영동)" fulladdress="서울특별시 용산구 한강대로 지하 392 (동자동,남영동,4호선 서울역) 지번: 14-151" location="37.55320347710953,126.97275360634195" updatedate="2022-07-08" legaldongandleename="동자동" jibunmainandsub="14-151" streetname="한강대로" bdmainandsub="392" bdname="4호선 서울역" sidonameorder="0" mega_cty_nm="서울특별시" cty_rgn_nm="용산구" admin_cty_nm="동자동" admin_cty_cd="" street_no="14-151" build_nm="4호선 서울역" href="javascript:;">
								선택
						</a>
					</span>
				</li>
			
				<li>
					<span class="select_address">
						<a id="dong_build_sel" sidoname="서울특별시" gunguname="종로구" dongname="신문로2가" donggovname="사직동" jibunaddress="서울특별시 종로구 신문로2가 2-1 서울역사박물관 (사직동)" streetaddress="서울특별시 종로구 새문안로 55 (신문로2가)" dongaddress="서울특별시 종로구 신문로2가(사직동)" fulladdress="서울특별시 종로구 새문안로  55 (신문로2가,사직동,서울역사박물관) 지번: 2-1" location="37.56984406751715,126.97076185585868" updatedate="2022-07-08" legaldongandleename="신문로2가" jibunmainandsub="2-1" streetname="새문안로" bdmainandsub="55" bdname="서울역사박물관" sidonameorder="0" mega_cty_nm="서울특별시" cty_rgn_nm="종로구" admin_cty_nm="신문로2가" admin_cty_cd="" street_no="2-1" build_nm="서울역사박물관" href="javascript:;">
						
						서울특별시 종로구 새문안로  55 (신문로2가,사직동,서울역사박물관) 지번: 2-1
						</a>
					</span>
					<span class="select_btn">
						<a id="dong_build_sel" sidoname="서울특별시" gunguname="종로구" dongname="신문로2가" donggovname="사직동" jibunaddress="서울특별시 종로구 신문로2가 2-1 서울역사박물관 (사직동)" streetaddress="서울특별시 종로구 새문안로 55 (신문로2가)" dongaddress="서울특별시 종로구 신문로2가(사직동)" fulladdress="서울특별시 종로구 새문안로  55 (신문로2가,사직동,서울역사박물관) 지번: 2-1" location="37.56984406751715,126.97076185585868" updatedate="2022-07-08" legaldongandleename="신문로2가" jibunmainandsub="2-1" streetname="새문안로" bdmainandsub="55" bdname="서울역사박물관" sidonameorder="0" mega_cty_nm="서울특별시" cty_rgn_nm="종로구" admin_cty_nm="신문로2가" admin_cty_cd="" street_no="2-1" build_nm="서울역사박물관" href="javascript:;">
								선택
						</a>
					</span>
				</li>
			
				<li>
					<span class="select_address">
						<a id="dong_build_sel" sidoname="서울특별시" gunguname="중구" dongname="봉래동2가" donggovname="회현동" jibunaddress="서울특별시 중구 봉래동2가 122-28 서울역(본옥) (회현동)" streetaddress="서울특별시 중구 통일로 1 (봉래동2가)" dongaddress="서울특별시 중구 봉래동2가(회현동)" fulladdress="서울특별시 중구 통일로  1 (봉래동2가,회현동,서울역(본옥)) 지번: 122-28" location="37.555865059770774,126.97181674982701" updatedate="2022-07-08" legaldongandleename="봉래동2가" jibunmainandsub="122-28" streetname="통일로" bdmainandsub="1" bdname="서울역(본옥)" sidonameorder="0" mega_cty_nm="서울특별시" cty_rgn_nm="중구" admin_cty_nm="봉래동2가" admin_cty_cd="" street_no="122-28" build_nm="서울역(본옥)" href="javascript:;">
						
						서울특별시 중구 통일로  1 (봉래동2가,회현동,서울역(본옥)) 지번: 122-28
						</a>
					</span>
					<span class="select_btn">
						<a id="dong_build_sel" sidoname="서울특별시" gunguname="중구" dongname="봉래동2가" donggovname="회현동" jibunaddress="서울특별시 중구 봉래동2가 122-28 서울역(본옥) (회현동)" streetaddress="서울특별시 중구 통일로 1 (봉래동2가)" dongaddress="서울특별시 중구 봉래동2가(회현동)" fulladdress="서울특별시 중구 통일로  1 (봉래동2가,회현동,서울역(본옥)) 지번: 122-28" location="37.555865059770774,126.97181674982701" updatedate="2022-07-08" legaldongandleename="봉래동2가" jibunmainandsub="122-28" streetname="통일로" bdmainandsub="1" bdname="서울역(본옥)" sidonameorder="0" mega_cty_nm="서울특별시" cty_rgn_nm="중구" admin_cty_nm="봉래동2가" admin_cty_cd="" street_no="122-28" build_nm="서울역(본옥)" href="javascript:;">
								선택
						</a>
					</span>
				</li>
			
        </ul>
</div></td>
    </tr>
    
    
  </tbody></table>
  <table border="0" id="detail_addr_el" style="display: block;">
    <tbody><tr>
      <th>상세주소</th>
      <td><ul>
          <!--시작:상세주소-->
          <li class="address"> <div id="dis_addr_build" name="dis_addr_build">서울특별시 중구 통일로  21 (봉래동2가,회현동,서울역앞우체국) 지번: 123</div></li>
          <li><span class="add_01">
            <input type="text" id="address" name="address" class="input_add" placeholder="나머지 주소를 입력해 주세요" onkeypress="doIfEnter(event, codeAddress)">
            </span><span class="add_02">
            <button type="button" onclick="codeAddress();" class="btn">확인</button>
            </span></li>
          <li class="tip">신속한 배달을 위해 동-호수를 정확히 입력해 주세요</li>
        </ul></td>
    </tr>
  </tbody></table>
  </div>
  </form>

  <!--시작:도로명주소-->
  <form id="roadSform" name="roadSform" method="post" action="">
  <div id="p_inbox dolo_add" style="display:none">
  <p class="tip01"> 찾으시려는 도로명주소의 건물번호 또는 건물명까지 상세히 입력 후 검색해 주세요. (<span class="tip02">도로명 주소 확인 : </span><a href="http://www.juso.go.kr" target="open"> www.juso.go.kr</a>) </p>
  <table border="0">
    <tbody><tr>
      <th rowspan="2">지역명</th>
      <td class="road" style="padding-top:20px;">


							<span class="fl ad1">
				                <select id="mega_cty_cd" name="mega_cty_cd" tabindex="1" sb="61383327" style="display: none;">
                                        <option value="" selected="">광역시도</option>
                                        
                                            <option value="42">강원도</option>
                                        
                                            <option value="41">경기도</option>
                                        
                                            <option value="48">경상남도</option>
                                        
                                            <option value="47">경상북도</option>
                                        
                                            <option value="29">광주광역시</option>
                                        
                                            <option value="27">대구광역시</option>
                                        
                                            <option value="30">대전광역시</option>
                                        
                                            <option value="26">부산광역시</option>
                                        
                                            <option value="11">서울특별시</option>
                                        
                                            <option value="36">세종특별자치시</option>
                                        
                                            <option value="31">울산광역시</option>
                                        
                                            <option value="28">인천광역시</option>
                                        
                                            <option value="46">전라남도</option>
                                        
                                            <option value="45">전라북도</option>
                                        
                                            <option value="50">제주특별자치도</option>
                                        
                                            <option value="44">충청남도</option>
                                        
                                            <option value="43">충청북도</option>
                                        
				                </select><div id="sbHolder_61383327" class="sbHolder" tabindex="1"><a id="sbToggle_61383327" href="#" class="sbToggle"></a><a id="sbSelector_61383327" href="#" class="sbSelector">광역시도</a><ul id="sbOptions_61383327" class="sbOptions" style="display: none;"><li><a href="#" rel="" class="sbFocus">광역시도</a></li><li><a href="#42" rel="42">강원도</a></li><li><a href="#41" rel="41">경기도</a></li><li><a href="#48" rel="48">경상남도</a></li><li><a href="#47" rel="47">경상북도</a></li><li><a href="#29" rel="29">광주광역시</a></li><li><a href="#27" rel="27">대구광역시</a></li><li><a href="#30" rel="30">대전광역시</a></li><li><a href="#26" rel="26">부산광역시</a></li><li><a href="#11" rel="11">서울특별시</a></li><li><a href="#36" rel="36">세종특별자치시</a></li><li><a href="#31" rel="31">울산광역시</a></li><li><a href="#28" rel="28">인천광역시</a></li><li><a href="#46" rel="46">전라남도</a></li><li><a href="#45" rel="45">전라북도</a></li><li><a href="#50" rel="50">제주특별자치도</a></li><li><a href="#44" rel="44">충청남도</a></li><li><a href="#43" rel="43">충청북도</a></li></ul></div>
							</span>
							<span id="left_content_sec" class="fl ad2 ml7">
						      <select id="cty_rgn_cd" name="cty_rgn_cd" style="width: 200px; display: none;" sb="3710006">
						      <option value="" selected="">시구군</option>
						      </select><div id="sbHolder_3710006" class="sbHolder" tabindex="0"><a id="sbToggle_3710006" href="#" class="sbToggle"></a><a id="sbSelector_3710006" href="#" class="sbSelector">시구군</a><ul id="sbOptions_3710006" class="sbOptions" style="display: none;"><li class="last"><a href="#" rel="" class="sbFocus">시구군</a></li></ul></div>
							</span>

        </td>
    </tr>
    <tr>
      <td style="padding:5px 5px 20px;"><span class="add_01">
        <input type="text" id="admin_cty_cd_road" name="admin_cty_cd_road" class="input_add" placeholder="도로명 입력" style="width:315px;">
        &nbsp;&nbsp;<input type="text" id="address1" name="address1" class="input_add" placeholder="건물번호" style="width:95px;">
        <span style="padding:0 6px;">-</span>
        <input type="text" id="address2" name="address2" class="input_add" placeholder="건물번호" style="width:95px;">
        </span><span class="add_02">
        <button type="button" id="BTN_NewAddrBuildSearch" class="btn">검색</button>
        </span></td>
    </tr>

    <tr>
      <th>상세주소</th>
      <td><ul>
          <!--시작:상세주소-->
          <li class="address"> <div id="dis_addr_build_road" name="dis_addr_build_road"></div></li>
          <li><span class="add_01">
            <input type="text" id="address" name="address" class="input_add" placeholder="나머지 주소를 입력해주세요">
            </span><span class="add_02">
            <button type="button" onclick="codeAddress();" class="btn">확인</button>
            </span></li>
          <li class="tip">신속한 배달을 위해 동-호수를 정확히 입력해 주세요</li>
        </ul></td>
    </tr>

  </tbody></table>
  </div>
  </form>
  <!--시작:최종배달주소 및 특이사항-->

  <form id="korResultForm" name="korResultForm" method="post" action="">
      <input type="hidden" id="mega_cty_nm" name="mega_cty_nm" value="서울특별시">
      <input type="hidden" id="cty_rgn_nm" name="cty_rgn_nm" value="중구">
      <input type="hidden" id="admin_cty_nm" name="admin_cty_nm" value="봉래동2가">
      <input type="hidden" id="admin_cty_cd" name="admin_cty_cd" value="">
      <input type="hidden" id="address_bld" name="address_bld" value="서울역앞우체국">
      <input type="hidden" id="delivery_sel_addr" name="delivery_sel_addr" value="">
      <input type="hidden" id="addr_build" name="addr_build" value="서울특별시 중구 통일로  21 (봉래동2가,회현동,서울역앞우체국) 지번: 123">
      <input type="hidden" id="address" name="address" value="">
      <input type="hidden" id="echo_sidoName" name="echo_sidoName" value="서울특별시">
      <input type="hidden" id="echo_gunguName" name="echo_gunguName" value="중구">
      <input type="hidden" id="echo_dongName" name="echo_dongName" value="봉래동2가">
      <input type="hidden" id="echo_dongGovName" name="echo_dongGovName" value="회현동">
      <input type="hidden" id="echo_jibunAddress" name="echo_jibunAddress" value="서울특별시 중구 봉래동2가 123 서울역앞우체국 (회현동)">
      <input type="hidden" id="echo_streetAddress" name="echo_streetAddress" value="서울특별시 중구 통일로 21 (봉래동2가)">
      <input type="hidden" id="echo_dongAddress" name="echo_dongAddress" value="서울특별시 중구 봉래동2가(회현동)">
      <input type="hidden" id="echo_fullAddress" name="echo_fullAddress" value="서울특별시 중구 통일로  21 (봉래동2가,회현동,서울역앞우체국) 지번: 123">
      <input type="hidden" id="echo_location" name="echo_location" value="37.55753890576452,126.97144409996395">
      <input type="hidden" id="echo_updateDate" name="echo_updateDate" value="2022-07-08">
      <input type="hidden" id="echo_legalDongAndLeeName" name="echo_legalDongAndLeeName" value="봉래동2가">
      <input type="hidden" id="echo_jibunMainAndSub" name="echo_jibunMainAndSub" value="123">
      <input type="hidden" id="echo_streetName" name="echo_streetName" value="통일로">
      <input type="hidden" id="echo_bdMainAndSub" name="echo_bdMainAndSub" value="21">
      <input type="hidden" id="echo_bdName" name="echo_bdName" value="서울역앞우체국">
      <input type="hidden" id="echo_sidoNameOrder" name="echo_sidoNameOrder" value="0">
  <div id="last_addr_el" style="display:none; width: 100%; margin-left:40px;">
	<table>
    <tbody><tr>
      <th>최종 배달주소</th>
      <td><div id="delivery_addr" name="delivery_addr" class=" cnfm_input"></div></td>
    </tr>
    <tr>
      <th>배달 특이사항</th>
      <td><textarea id="remark" name="remark" class="apply_text" placeholder="예) 아이가 있으니 노크해 주세요"></textarea></td>
    </tr>
    </tbody></table>
  </div>
  </form>

</div>

 

회원가입폼  register.jsp
				<form action="<%=contextPath %>/md/enterJoin.do"  method="post"  >
					

										<div class="row1" style="display:none;">
									<div class="col-xs-12">
										 <div class="form-group">
										 	 <label class="field-label" for="form_register_firstname"><span class="required-symbol">*</span>주소:</label>
									 <input type="text" class="form-control input-lg required no-special-characters" 
									 id="form_register_firstname" name="address1" value="<%= request.getParameter("wosStreet") %>" aria-required="true">	
									 <input type="text" class="form-control input-lg required no-special-characters" 
									 id="form_register_firstname" name="address2" value="<%= request.getParameter("wosBlock")+request.getParameter("wosUnit")  %>" aria-required="true">	

										</div> 
									</div>
							</div>
					
					
					
					
					
							<div class="row">
									<div class="col-xs-12">
										 <div class="form-group">
										 	 <label class="field-label" for="form_register_firstname"><span class="required-symbol">*</span>성함:</label>									 
											 <input type="text" class="form-control input-lg required no-special-characters" id="form_register_firstname" name="firstName" value="김아아" aria-required="true">
											 
										</div> 
									</div>
							</div>
						
							<div class="row">
									<div class="col-xs-6">
										 <div class="form-group">
										 	 <label class="field-label" for="form_register_gender">성별:</label>
											 <select name="gender" id="form_register_gender" class="select-lg" tabindex="0" style="display: none;" aria-disabled="false">
											 	<option selected="selected" value=""></option>
											 	<option value="Male" selected="selected">남</option>
											 	<option value="Female">여</option>
											 	<option value="Do Not Specify">선택 안함</option>
											 </select>
									 
										</div> 
									</div>
							</div>
						
							<div class="row">
									<div class="col-xs-12">
										 <div class="form-group">
										 	 <label class="field-label" for="form_register_contactno"><span class="required-symbol">*</span>휴대전화 번호:</label>
											 
											 
											 <input type="text" class="form-control input-lg required number digit-only" maxlength="11" id="form_register_contactno" name="contactNo" placeholder="숫자만 입력" value="01012345679" aria-required="true">
											 
											 
										</div> 
									</div>
							</div>
						
				
				
			</fieldset>
				<fieldset class="fieldset">
					 
					
					
						<div class="fieldset-heading">
							<h2 class="fieldset-title">계정 정보</h2>
						</div>
						
						<div class="form-group">
							<label class="field-label" for="form_register_email"><span class="required-symbol">*</span>이메일:</label>
							<input type="email" class="form-control input-lg required" id="form_register_email" name="email" placeholder="name@mail.com" value="kimjm33@naver.com" aria-required="true">
							<label class="control-hint" for="form_register_email">이메일 주소는 고객님의 안전한 거래와 회원정보 보호를 위해 정확하게 입력해 주세요.</label>
						</div>
						
						<div class="form-group">
							<label class="field-label" for="form_register_email_comfirm"><span class="required-symbol">*</span>이메일 확인:</label>
							<input type="email" class="form-control input-lg required" id="form_register_email_comfirm" name="confirmEmail" placeholder="name@mail.com" value="kimjm33@naver.com"aria-required="true">
						</div>
					 
						<div class="form-group">
						
							<label class="field-label" for="form_register_password"><span class="required-symbol">*</span>비밀번호:</label>
							
							<input type="password" class="form-control input-lg required" id="form_register_password" name="password" autocomplete="off"  value="kk123456789" data-rule-required="true" data-rule-rangelength="${passLengthMin},${passLengthMax}" data-rule-verifypassword="true" data-msg-verifypassword="비밀번호는 문자, 숫자를 조합한 최소 8 글자 이상이어야 합니다." data-msg-required="비밀번호를 입력해 주십시오." data-msg-rangelength="비밀번호는 8에서 20글자이어야 됩니다." maxlength="20" value="" aria-required="true">
							<label for="form_register_password" class="control-hint">비밀번호는 문자, 숫자를 조합한 최소 8 글자 이상이어야 합니다.</label>
						</div>
						<div class="form-group">
							<label class="field-label" for="form_register_password_confirm"><span class="required-symbol">*</span>비밀번호 확인:</label>
							<input type="password" class="form-control input-lg required" id="form_register_password_confirm" name="comfirmPassword"value="kk123456789"   autocomplete="off" maxlength="20" value="" aria-required="true">
						</div> 						
					 </fieldset>
																																																																																																																												<div class="fieldset-heading">
					<h2 class="fieldset-title">인증방법</h2>
						<select name="preferredNotification" id="">
							<option value="1">이메일</option>
							<option value="2">휴대폰</option>
						</select>
					<br>
					<br>
					<br>
					<br>
			        <input type="submit" id="jjinjja" value="계정 생성"></input>
	      </form>
컨트롤러 
package controller;

import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import command.CommandHandler;


public class DispatcherServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
  
    public DispatcherServlet() {
        super();
    
    }

    private Map<String, CommandHandler>commandHandlerMap =new HashMap<String, CommandHandler>();
	
    
    @Override
	public void init() throws ServletException {
		//이 함수는 DispatcherServlet 서블릿 객체로 생성될 때 초기화 작업 -init() 메서드
		//즉 xml에서 loadon 1이니까 여기서 먼저 1번 호출
    	//web-INF/ commandHandler.properties 파일을 읽어서 어떤 요청 URL = commandhandler가 일하는지 가져와서 위 map에추가
    	//web.xm에서 init-param 만들고
    	String path= this.getInitParameter("path"); //web-INF/ commandHandler.properties를 가져온다
    	String realPath=this.getServletContext().getRealPath(path); //****
    	
    	Properties prop = new Properties();
    	try(FileReader fr= new FileReader(realPath)) {
    		prop.load(fr);
			
		} catch (Exception e) {
			throw new ServletException();
		}
    	//여기까지는 파properties에서 파일 찾아옴
    	
    	
    	//key: /board/list.do
    	//value: days08.mvc.command.ListHandler 실제 객체 생성해서
    	//commandHandlerMap에 추가
    	
    	Iterator<Object>  ir = prop.keySet().iterator();
    	while (ir.hasNext()) {
			String url = (String) ir.next(); //key: /board/list.do
			String  commandHandlerFullName= prop.getProperty(url);////value: days08.mvc.command.~~Handler n개 가져오기
			
			
			try {
				Class<?> handlerClass=   Class.forName(commandHandlerFullName);
				CommandHandler commandHandler = (CommandHandler) handlerClass.newInstance();
				
				this.commandHandlerMap.put(url,commandHandler);
				
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}catch (InstantiationException e) {
				e.printStackTrace();
			}catch (IllegalAccessException e) {
				e.printStackTrace();
			}
			
		}
		
	}//


	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	System.out.println("서블릿호출");
		//1. 요청 url분석  (모든 요청들을 분석)  list.do 요청이 왔다면 -> Command~.properties로 가서 ListHandler가 일을 한다고 하고 -> new ListHandler() 객체 생성 로직처리
		String requestURI = request.getRequestURI(); //   /jspPro/board/list.do
		//request.getRequestURL(); //경로 절대경로 다
		
		//requestURI 컨텍스트 패스 제거
		String contextPath= request.getContextPath();
		
		if(requestURI.indexOf(contextPath)==0) {
			
			requestURI=requestURI.substring(contextPath.length()); //  /board/list.do만 가져옴 (key)
		}
		///board/list.do는 키값으로 사용
		
		//2. 요청 url -> 로직을 처리하는 모델객체 (커맨드 핸들러)를 찾는 작업 + 처리해라 + 처리결과를 받고 request.setAttribute()로 또는 세션에 저장한다면
		CommandHandler modelHandler =    this.commandHandlerMap.get(requestURI ); //get에 key값을 주면 value를 구할 수 있음
		//value=get(key) -> 인터페이스 upcasting 해서 list,edit등등 핸들러를 받아옴다.
		String viewPage=null;
		try {
			viewPage = modelHandler.process(request, response); //ex) 리스트 핸들러의 프로세스를 받아와서 실행시킨다
		} catch (Exception e) {
		
			e.printStackTrace();
		}
		
		
		//3. 어떤 view가 응답해야하는지 찾아서 리다이렉트 또는 포워딩 시키기 (이건 로직 처리한 후 결과를 받아서 return받아서)
		
		if(viewPage!=null) {
			RequestDispatcher dispatcher =request.getRequestDispatcher(viewPage);
			dispatcher.forward(request, response);
		}
		
	}//doget
	
	
	

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("post서블릿호출");
		//1. 요청 url분석  (모든 요청들을 분석)  list.do 요청이 왔다면 -> Command~.properties로 가서 ListHandler가 일을 한다고 하고 -> new ListHandler() 객체 생성 로직처리
		String requestURI = request.getRequestURI(); //   /jspPro/board/list.do
		//request.getRequestURL(); //경로 절대경로 다
		
		//requestURI 컨텍스트 패스 제거
		String contextPath= request.getContextPath();
		
		if(requestURI.indexOf(contextPath)==0) {
			
			requestURI=requestURI.substring(contextPath.length()); //  /board/list.do만 가져옴 (key)
		}
		///board/list.do는 키값으로 사용
		
		//2. 요청 url -> 로직을 처리하는 모델객체 (커맨드 핸들러)를 찾는 작업 + 처리해라 + 처리결과를 받고 request.setAttribute()로 또는 세션에 저장한다면
		CommandHandler modelHandler =    this.commandHandlerMap.get(requestURI ); //get에 key값을 주면 value를 구할 수 있음
		//value=get(key) -> 인터페이스 upcasting 해서 list,edit등등 핸들러를 받아옴다.
		String viewPage=null;
		try {
			viewPage = modelHandler.process(request, response); //ex) 리스트 핸들러의 프로세스를 받아와서 실행시킨다
		} catch (Exception e) {
		
			e.printStackTrace();
		}
		
		
		//3. 뷰페이지 받아서 리다이렉트 시키는 경우
		
		if(viewPage!=null) {
			response.sendRedirect(viewPage);
		}
		
		
		
	}//dopost

}

 

properties
/md/mdmain.do= command.MdMainHandler
/md/logon.do = command.MdMainLogonHandler
/md/guest.do = command.GuestHandler
/md/register.do = command.RegisterHandler
/md/enterJoin.do=command.JoinMemberHandler

 

회원가입처리를 위한 Handler
  • register.jsp 폼태그에  <form action="<%=contextPath %>/md/enterJoin.do"  method="post"  >  회원정보이므로 url에 표시되지 않도록  post방식으로 지정하였습니다. enterJoin.do요청으로 컨트롤러에 의해  JoinMemberHandler가 실행됩니다. 
  • request.getParameter("name")으로 태그들의 값들을 받아옵니다. 
  • MemberDTO와 MemAdrDTO에  해당 값들로 객체를 생성합니다. 
  • service클래스로 객체 두개를 모두 전달합니다. 
  • 회원가입이 완료되면 1을 반환하는데,  그 중에서도 인증방식을 선택하는 select태그 값의 value를 받아와 , 이메일이라면 , 즉 value값이 1 이라면 이메일로 전송되었다는 문구를 띄운 페이지를 리턴합니다. 반대로 휴대폰번호를 선택하였다면 (value ==2) 문자메세지로 전송되었다는 문구를 띄운 페이지를 리턴합니다. 
  • select 태그의 값을 불러올대는 request.getParameterValues()를 사용하고, 선택된 한개의 값만 리턴됩니다.(배열로 받아야합니다. ) 
package command;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import domain.MemAdrDTO;
import domain.MemberDTO;
import service.MemberService;

public class JoinMemberHandler implements CommandHandler{

	@Override
	public String process(HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		System.out.println("호출 JoinMemberHandler");		

		request.setCharacterEncoding("UTF-8");
	
		String address1=request.getParameter("address1"); //기본주소 
		String address2=request.getParameter("address2"); //상세주소
		String userName = request.getParameter("firstName"); //성함
		String gender = request.getParameter("gender"); //성별 
		String phone = request.getParameter("contactNo"); //휴대전화 번호 
		String userId = request.getParameter("email"); //이메일
		//String confirmUserId = request.getParameter("confirmEmail"); //이메일확인 
		String userPwd = request.getParameter("password"); //비밀번호 
		//String comfirmPassword = request.getParameter("comfirmPassword"); //비밀번호 확인 
		System.out.println("username:"+userName);
		String[] authen=request.getParameterValues("preferredNotification"); //인증방법
		System.out.println("authen:"+authen[0]);
		
		for (int i = 0; i < authen.length; i++) {
			System.out.println("authen:["+i+"]:"+authen[i]);
		}
		
		
		/*
		 * 이용약관없앰 
		String[] terms=request.getParameterValues("agreeChk"); //체크박스이용약관동의 
		
		//int형으로바꿔야함 
		int[] agree=new int[terms.length]; //이용약관 int형으로 
		for (int i = 0; i < terms.length; i++) {	
		            agree[i] = Integer.parseInt(terms[i]);
		}
		*/
		
		
		System.out.println(userId);
		//String mem_code
		
		
		MemberDTO memberDTO =new MemberDTO(userId, userPwd, gender, userName, phone);
		MemAdrDTO memAdrDTO =new MemAdrDTO (address1, address2);
		MemberService memberService = MemberService.getInstance();
		
		int result = memberService.insertOneMember(memberDTO, memAdrDTO );
		System.out.println(result);
	
		if(result==1){
			System.out.println("회원가입 성공");
		
			 if(authen[0].equals("1")) {//이메일 
				 return "/mcNew/md/enterJoin.jsp"; 
				 }
			 else {//휴대폰
			 return "/mcNew/md/enterJoinPhone.jsp"; }

		}else {
			System.out.println("회원가입실패 ");
			return "/mcNew/md/mdmain.do"; //jsp로하면 이미지안뿌려짐
		}

	}
}

 

 

Service
  • 주소를 입력하는 메소드에는 MemAdrDTO가 매개변수입니다. 주소정보를 입력하고 해당하는 주소코드를 리턴합니다.
  • 회원정보를 입력하는 메소드에는 MemberDTO객체와 리턴받은 주소코드가 매개변수입니다.

	public int insertOneMember(MemberDTO memberDTO , MemAdrDTO memAdrDTO) {
		Connection con = null;
		try {
			con = ConnectionProvider.getConnection();
			MemberDAOImpl dao =MemberDAOImpl.getInstance();
			//insert문에서는 서브쿼리를 쓸 수 없기때문에, 주소입력따로 회원정보입력따로 
			String adrCode=dao.insertAddress(con, memAdrDTO);
			int result= dao.insertOneMember(con,  memberDTO, adrCode);
			return result;
		} catch (NamingException | SQLException e) { 
			//e.printStackTrace(); 
			throw new RuntimeException(e);
		} finally {
			JdbcUtil.close(con);
		}

}

 

MemberDAO 인터페이스 

package persistence;

import java.sql.Connection;
import java.sql.SQLException;

import domain.MemAdrDTO;
import domain.MemberDTO;

public interface MemberDAO {

   //로그인
   MemberDTO login(Connection conn, String userId, String userPwd) throws SQLException;
   
   //로그인 맴버 있는지 확인
   MemberDTO loginCheck(Connection conn, String userId, String userPwd) throws SQLException;
   //회원가입-주소넣기 (주소코드를 반환 )
   String  insertAddress(Connection con, MemAdrDTO memAdrDTO) throws SQLException;
   //회원가입 
 int insertOneMember(Connection con, MemberDTO memberDTO,String adrCode)  throws SQLException;
}

 

MemberDAOImpl

  • 멤버가 추가될때마다 자동으로 순번이 붇도록 시퀀스를 생성해주었습니다. 회원코드는'm'+숫자 형식으로 되어있기 때문에 문자열 m을 이어주었습니다. 
  • adrCode를 가져오기 위해서 select문의 sql을 한번 더 실행시켜주었습니다. 
public int insertOneMember(Connection con, MemberDTO memberDTO, String adrCode)   throws SQLException{
		System.out.println(" lnsert회원가입()- lmpl시작");
		int result=0;
		String lan="한국어";
			/* MEM_CODE ,MEM_ID ,MEM_PW ,MEM_GENDER ,MEM_NAME ,MEM_TEL ,MEM_LAN ,ADR_CODE */
		String sql = "insert into member values ('m'||member_seq.nextval,?,?, ?,?,?,?,?)";

		try {
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1,  memberDTO.getMem_id());
			pstmt.setString(2, memberDTO.getMem_pw());
			pstmt.setString(3, memberDTO.getMem_gender());
			pstmt.setString(4, memberDTO.getMem_name());
			pstmt.setString(5, memberDTO.getMem_tel());
			pstmt.setString(6,lan);
			pstmt.setString(7, adrCode);
			result=pstmt.executeUpdate();
			 
		} finally {
			JdbcUtil.close(pstmt);
			JdbcUtil.close(rs);         
		} // finally
		System.out.println("result:"+result);
return result;
	}//insertOneMember
	
	

	public String  insertAddress(Connection con, MemAdrDTO memAdrDTO) throws SQLException {
		System.out.println(" impl -  insertAddress() 시작");
		System.out.println(memAdrDTO.getAdr_main());
		System.out.println(memAdrDTO.getAdr_sub());
		String adrCode="";
		int result=0;
		String sql = "insert into mem_adr(adr_code, adr_main, adr_sub) values ('a'||memAdr_seq.nextval,?,?)";
		try {
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1,  memAdrDTO.getAdr_main());
			pstmt.setString(2, memAdrDTO.getAdr_sub());
			/* rs=pstmt.executeQuery(); */
			result=pstmt.executeUpdate();
			System.out.println("result: "+result);
			if(result==1) {
				System.out.println("이제 adr코드 가져올게");
				//문제점!!!!!!!여기가 안나온다.  - >select 하는 쿼리문 다시 써보기  
				sql="select adr_code from mem_adr where adr_main=? and adr_sub=?";
				try {
					pstmt = con.prepareStatement(sql);
				
					pstmt.setString(1, memAdrDTO.getAdr_main());
					pstmt.setString(2, memAdrDTO.getAdr_sub());
					
					rs=pstmt.executeQuery();
					if(rs.next()){
						adrCode=rs.getString("adr_code"); //회원가입의 외부키가 될 것 
						System.out.println("adrCode:"+adrCode);	
					}
				}finally {
					
				}
			}
		} finally {
			JdbcUtil.close(pstmt);
			JdbcUtil.close(rs);         
		} // finally
		
		System.out.println("adrCode: "+adrCode);
			return adrCode;
		
	}

 

실행성공 캡쳐 

'JSP' 카테고리의 다른 글

[JSP] MVC2모델을 이용한 로그인 구현  (0) 2022.07.07
[JSP] 구글 맵 api  (0) 2022.07.04
[JSP] JSON  (0) 2022.07.01
[JSP] AJAX  (0) 2022.06.30
[JSP] EmpDeptList를 MVC패턴으로 구현  (0) 2022.06.29
Comments