alter table tbl_member add zipcode varchar(30) ;
alter table tbl_member drop colum address;
alter table tbl_member add address1 varchar(500);
alter table tbl_member add address2 varchar(100);
* 도로명 주소 구축 방법 (데이터 1.7GB )
1. 직접 개발 ( http://www.juso.go.kr/)
2. API 활용
DB 에 텍스트 자료 를 넣는 방법
1. 주소 테이블을 만든다.
http://www.juso.go.kr/ 자바 개발 소스가 있다.
샘플
create table zipcode(
postcode varchar(10) not null,
sido varchar(50) not null,
gugun varchar(50) not null,
road_name varchar(50),
bulid_no1 int,
build_no2 int,
build_name varchar(100),
dong1 varchar(50),
dong2 varchar(50),
bunji1 int ,
bunji2 int
);
2. txt 파일을 엑셀 로 불러 온다.
왜? 토드에서 SQL 파일과 CSV 파일만 불러 올수 있기 때문이다.
3. 엑셀로
https://support.microsoft.com/ko-kr/kb/979845
4. 컬럼을 정리하고 1번 라인에 컬럼명을 넣는다. 컬럼명은 DB 테이블 컬럼명과 같게 한다.
5. 정리한 엑셀 파일을 CSV 파일로 저장 한다.
6. 토드로 파일을 임포트 해서 DB 에 자료를 저장한다.
(서식이 과 컬럼 이 일치 해야 한다.)
토드 ->데이터 베이스 -> 임포트
그러나 지금까지 1~ 6번 설명은
이클립스의 마켓에서 토드프로그램을 플러그인 한 경우 이다.
토드 프로그램을 직접 설치한 경우
Tools -> import ->impotWizard
로 txt 파일을 직접 임포트하면 된다.
아주 간단 하다.
==============================================
초 간단한
다음 소스 사용 법
검색창에 ( 다음 주소 api )
http://postcode.map.daum.net/guide
메세지
Key를 발급받을 필요가 없습니다. 사용량에 대한 제한은 전혀 없습니다. 기업용이든 상업적 용도이든 상관없이 무조건 무료로 사용 가능합니다. 도로명 주소, 지번 주소, 영문 주소까지 모두 확인 가능합니다. 행정자치부에서 제공하는 주소 DB를 직접 업데이트 받고 있으므로 가장 최신의 데이터를 이용하실 수 있습니다. PC 및 모바일웹 환경에서 일반적으로 사용되는 모든 브라우저를 지원합니다. https 환경에서 사용하시려면 https 사용가이드를 참고하세요. 하단 로고를 임의로 가릴 경우, 사용에 제약이 발생할 수 있습니다. |
문제점은 로그를 표시 해야 한다는 점.
다음 주소 => 예제 => 2번예제 활용
=>스크립트 소스 카피 =>header 에 붙인다.
주소 변경 및 회원 정보 수정 개발 코드
뷰
<%@page import="com.example.wbe04.model.shop.dto.CartDTO"%>
<%@page import="java.util.Iterator"%>
<%@page import="java.util.HashMap"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ include file="../include/header.jsp" %>
<%@ include file="../include/menu.jsp" %>
<script src="http://dmaps.daum.net/map_js_init/postcode.v2.js"></script>
<script>
function sample6_execDaumPostcode() {
new daum.Postcode({
oncomplete: function(data) {
// 팝업에서 검색결과 항목을 클릭했을때 실행할 코드를 작성하는 부분.
// 각 주소의 노출 규칙에 따라 주소를 조합한다.
// 내려오는 변수가 값이 없는 경우엔 공백('')값을 가지므로, 이를 참고하여 분기 한다.
var fullAddr = ''; // 최종 주소 변수
var extraAddr = ''; // 조합형 주소 변수
// 사용자가 선택한 주소 타입에 따라 해당 주소 값을 가져온다.
if (data.userSelectedType === 'R') { // 사용자가 도로명 주소를 선택했을 경우
fullAddr = data.roadAddress;
} else { // 사용자가 지번 주소를 선택했을 경우(J)
fullAddr = data.jibunAddress;
}
// 사용자가 선택한 주소가 도로명 타입일때 조합한다.
if(data.userSelectedType === 'R'){
//법정동명이 있을 경우 추가한다.
if(data.bname !== ''){
extraAddr += data.bname;
}
// 건물명이 있을 경우 추가한다.
if(data.buildingName !== ''){
extraAddr += (extraAddr !== '' ? ', ' + data.buildingName : data.buildingName);
}
// 조합형주소의 유무에 따라 양쪽에 괄호를 추가하여 최종 주소를 만든다.
fullAddr += (extraAddr !== '' ? ' ('+ extraAddr +')' : '');
}
// 우편번호와 주소 정보를 해당 필드에 넣는다.
document.getElementById('sample6_postcode').value = data.zonecode; //5자리 새우편번호 사용
document.getElementById('sample6_address').value = fullAddr;
// 커서를 상세주소 필드로 이동한다.
document.getElementById('sample6_address2').focus();
}
}).open();
}
</script>
<div class="bg-content">
<!--============================== content =================================-->
<div class="container" >
<article class="container" >
<div class="page-header">
<h3>회원 정보 수정 <small>basic form</small></h3>
</div>
<div class="col-md-3" >
</div>
<div class="col-md-6 col-md-offset-3" style="background-color: white; margin: 10px; padding: 10px; padding-left: 300px;">
<form role="form" method="post" action="/member/memebrUpate.do">
<div class="form-group">
<label for="username">이름</label>
<input type="text" class="form-control" id="username" name="username" value="${loginUser.username }">
</div>
<div class="form-group">
<label for="InputEmail">이메일 주소</label>
<input type="email" class="form-control" id="email" name="email" value="${loginUser.email }">
</div>
<div class="form-group">
<label for="InputPassword1">아이디</label>
<input type="text" style="background-color: white;" class="form-control" id="userid" readonly="readonly" name="userid" value="${loginUser.userid }">
</div>
<div class="form-group">
<label for="InputPassword1">전화번호</label>
<input type="text" class="form-control" id="tel" name="tel" placeholder="전화번호" value="${loginUser.tel }">
</div>
<div class="form-group">
<label for="InputPassword2">비밀번호</label>
<input type="password" class="form-control" id="userpw" placeholder="비밀번호" name="userpw" >
</div>
<hr>
<input type="text" id="sample6_postcode" placeholder="우편번호" name="zipcode" value="${loginUser.zipcode }">
<input type="button" onclick="sample6_execDaumPostcode()" value="우편번호 찾기" class="btn btn-success"><br>
<div class="form-group" >
<input type="text" id="sample6_address"
placeholder="주소" name="address1" size="30" value="${loginUser.address1 }">
</div>
<div class="form-group">
<input type="text" id="sample6_address2" placeholder="상세주소" name="address2" value="${loginUser.address2 }">
</div>
<hr>
<div class="form-group text-center">
<button type="submit" class="btn btn-info" id="infoSubmit">정보수정<i class="fa fa-check spaceLeft"></i></button>
<button type="submit" class="btn btn-warning">취소<i class="fa fa-times spaceLeft"></i></button>
</div>
</form>
</div>
</article>
</div>
</div>
<script >
$(document).ready(function(){
var message ="${message}";
if(message.length >3){
alert(message);
}
$("#infoSubmit").click(function(event){
event.preventDefault();
var pw=$("#userpw").val();
if(pw.trim().length < 3){
alert("비밀번호 입력은 필수 입니다.");
$("#userpw").focus();
return;
}
var form1 =$("form[role='form']");
form1.submit();
});
});
</script>
<%@ include file="../include/footer.jsp" %>
컨트롤
@RequestMapping(value="/login", method=RequestMethod.POST)
public String login2(String userid, String userpw, HttpServletRequest request, RedirectAttributes rttr){
try{
//DB에서 가져온 패스워드
String dbPw=memberDAO.loginPasswd(userid);
//내가 입력한 input 패스워드 와 매치 해서 비교
//true 일치.
logger.info("DB에서 가져온 dbpw 값: " +dbPw );
if(passwordEncoding.matches(userpw, dbPw)){
HttpSession session =request.getSession(false);
//다시 로그인 수정
MemberDTO dto =memberDAO.login(userid, dbPw);
session.setAttribute("loginUser", dto);
return "redirect:/";
}else{
rttr.addFlashAttribute("loginError", "아이디 또는 패스워드가 일치하지 않습니다.");
return "redirect:login";
}
}catch(Exception e){
logger.info(e.getMessage());
return "redirect:login";
}
}
@RequestMapping(value="/memebrUpate.do" , method=RequestMethod.POST)
public String memebrUpdate(@ModelAttribute MemberDTO memberDTO , RedirectAttributes rttr){
//패스워드 암호화
String userpw =passwordEncoding.encode(memberDTO.getUserpw());
memberDTO.setUserpw(userpw);
memberDAO.memberUpdate(memberDTO);
rttr.addFlashAttribute("message", "정보가 변경 되었습니다.");
return "redirect:member_info.do";
}
Mybatis
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 다른 mapper와 중복되지 않도록 네임스페이스 기재 -->
<mapper namespace="member.Mapper">
<select id="login" resultType="MemberDTO">
select * from tbl_member where userid=#{userid} and userpw= HEX(AES_ENCRYPT(#{userpw},'java$$##1'))
</select>
<!-- # AES_DECRYPT 복호화
?SELECT AES_DECRYPT(UNHEX(필드명), '가나다라') FROM tbname; -->
<select id="loginPasswd" resultType="string">
select AES_DECRYPT(UNHEX(userpw), 'java$$##1') from tbl_member where userid=#{userid}
</select>
<select id="loginInfo" resultType="MemberDTO">
select * from tbl_member where userid=#{userid}
</select>
<update id="memberUpdate">
update tbl_member SET address1 =#{address1} , address2 =#{address2},
email=#{email}, tel=#{tel}, zipcode=#{zipcode} , username =#{username}
, userpw =HEX(AES_ENCRYPT(#{userpw},'java$$##1'))
where userid =#{userid} ;
</update>
</mapper>
댓글 ( 4)
댓글 남기기