web.xml파일에 선언한 <servlet>태그는 HttpServlet을 상속받고 있는 클래스를 web.xml에 등록할 때 사용한다. 그리고 web.xml파일에 <servlet>태그를 사용할려면 반드시 하위에 <servlet-name>과 <servlet-class>태그를 선언해야 한다.
<servlet-name>태그는 등록할려고 하는 서블릿에 이름을 부여하는 것이고 서블릿의 이름은 개발자가 지정해주는 것이다. 서블릿의 이름을 지정해주고 나면 이후에는 클래스 이름을 사용하면 안돼고 지정해준 이름을 사용해야 한다.
<servlet-class>태그는 등록하는 서블릿의 실제 클래스 이름을 지정한다.
등록하는 서블릿의 위치.서블릿 이름 을 선언하면 된다.
<servlet-class>에 작성한 주소로 웹서버가 서블릿 객체를 찾아 올바르게 서블릿에 관한 설정을 할 수 있다. 웹서버가 서블릿을 찾아갈 때 사용하는 정보이기 때문에 정확하게 작성해야 한다.
<servlet-mapping>태그는 web.xml에서 <servlet>태그로 등록한 서블릿을 실행 요청할때 사용할 URL을 지정하기 위해 사용한다. 이 태그는 <servlet>태그를 사용했을 때만 사용할 수 있고 <servlet>로 등록된 서블릿이 아니면 사용할 수없다.
<servlet-name>태그는 실행할 서블릿 이름을 지정한다. 이때 지정하는 이름은 반드시 <servlet>태그에서 등록한 서블릿 이름으로 지정해야 한다. 위의 사진으로 보면 web.xml파일의 6번줄에 선언한 이름을 16번에 사용해야한다. 만약 6번줄 처럼 <servlet>태그에서 등록하지 않은 이름으로 <servlet-name>을 설정하면 web.xml는 오류가 난다. web.xml은 이정보를 가지고 <servlet>태그를 찾아 매핑한 다음 실제 서블릿 클래스와 연결된다.
<url-pattern>태그는 서블릿을 실행할 때 사용할 URL을 지정한다. URL을 지정할 때 전체 URL정보를 모두 지정하는게 아니라 'http://서버주고:포트번호/웹 애플리케이션이름' 은 생략하고 그 다음인.~만 입력하면된다. 앞부분은 *로 작성하면 된다. 위사진의 web.xml파일을 보면 'http://서버주고:포트번호/웹 애플리케이션이름' 은 *로 대체하고 .do로 패턴을 선언했다.
위의 사진에선 7번줄에 작성한 경로에 위치한 서블릿의 이름을 6번줄에 ControlServlet로 선언했고 15번줄에 mapping태그에서 name을 통해 연결?하고 url패턴을 *.do로 선언해서 주소의 끝에 do를 쓰면 서블릿을 사용할 수 있도록 만들었다.
@WebServlet
@어노테이션은 자바에서 주석처럼 소스안에 @기호와 함께 사용된다. 컴파일러에게 정보를 알려주거나 자바 프로그램 실행에 관한 내용을 설정하는 용도로 사용된다.
어노테이션을 통해 접근하려면 서블릿의 클래스 선언부 앞에 @WebServlet(접근시 사용할 url)를 지정하면 된다. 사용하게 되면 javax.servlet.annotation.WebServlet; 클래스를 임포트해줘야 한다.
여기서는 각jsp로 만든 페이지들을 이동하는 방법중에 sendRedirect와 forward를 이용하는 것을 할 것이다.
send~는 각각의 페이지의 rwquest와 response의 정보가 다르고 공유되지 않아서 aa.jsp에서 apple를 사과라 칭하고 bb.jsp에서 불러내면 bb.jsp에선 aa에서 일어난 일을 모르기 때문에 null값이 나온다. (앞의 페이지와 뒤의 페이지의 정보가 다른데)
forward는 앞의 페이지와 뒤의 페이지의 정보가 같다
네모는 데이터?가 공유하는 공간인데 저렇게 연결이 되면 bb의 request와 response는 사라지고 aa의 request와 response로 공유되서 사용된다.
그리고 aa에서 apple를 사과라고 하면 bb에서도 apple를 사과라고 인식할수 있다. 데이터가 공유된다는 이야기이다.
<input type="text" id="sample6_postcode" placeholder="우편번호">
<input type="button" onclick="sample6_execDaumPostcode()" value="우편번호 찾기"><br>
<input type="text" id="sample6_address" placeholder="주소"><br>
<input type="text" id="sample6_detailAddress" placeholder="상세주소">
<input type="text" id="sample6_extraAddress" placeholder="참고항목">
<script src="https://t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
<script>
function sample6_execDaumPostcode() {
new daum.Postcode({
oncomplete: function(data) {
// 팝업에서 검색결과 항목을 클릭했을때 실행할 코드를 작성하는 부분.
// 각 주소의 노출 규칙에 따라 주소를 조합한다.
// 내려오는 변수가 값이 없는 경우엔 공백('')값을 가지므로, 이를 참고하여 분기 한다.
var addr = ''; // 주소 변수
var extraAddr = ''; // 참고항목 변수
//사용자가 선택한 주소 타입에 따라 해당 주소 값을 가져온다.
if (data.userSelectedType === 'R') { // 사용자가 도로명 주소를 선택했을 경우
addr = data.roadAddress;
} else { // 사용자가 지번 주소를 선택했을 경우(J)
addr = data.jibunAddress;
}
// 사용자가 선택한 주소가 도로명 타입일때 참고항목을 조합한다.
if(data.userSelectedType === 'R'){
// 법정동명이 있을 경우 추가한다. (법정리는 제외)
// 법정동의 경우 마지막 문자가 "동/로/가"로 끝난다.
if(data.bname !== '' && /[동|로|가]$/g.test(data.bname)){
extraAddr += data.bname;
}
// 건물명이 있고, 공동주택일 경우 추가한다.
if(data.buildingName !== '' && data.apartment === 'Y'){
extraAddr += (extraAddr !== '' ? ', ' + data.buildingName : data.buildingName);
}
// 표시할 참고항목이 있을 경우, 괄호까지 추가한 최종 문자열을 만든다.
if(extraAddr !== ''){
extraAddr = ' (' + extraAddr + ')';
}
// 조합된 참고항목을 해당 필드에 넣는다.
document.getElementById("sample6_extraAddress").value = extraAddr;
} else {
document.getElementById("sample6_extraAddress").value = '';
}
// 우편번호와 주소 정보를 해당 필드에 넣는다.
document.getElementById('sample6_postcode').value = data.zonecode;
document.getElementById("sample6_address").value = addr;
// 커서를 상세주소 필드로 이동한다.
document.getElementById("sample6_detailAddress").focus();
}
}).open();
}
</script>
예제코드를 보니 주소입력을 하는 칸도 포함이 되어 있었다. 본인이 만든 회원가입 html에 맞게 합쳐주면 된다.
그리고 스크립트 부분도 넣어주면되는데 나는 js파일을 따로 만들어 스크립트 부분을 모아놨다.
이렇게 스크립트 부분만 떼어내서 js파일에 넣어주고
회원가입 폼에는
이렇게 입력해서 경로?를 알려준다. 저 부분을 쓰지 않는다면 writeForm은 스크립트부분이 어디 있는지 알수 가 없다.
그리고 이제 DB에 회원을 저장하기 위해 테이블을 만들어주는데 주소부분은 다음에서 받은 코드와 같은 변수명으로 만들어준다.