## a04_reqSynch.html
<body>
// 1. form 화면 구현
<form>
물건명:<input type="text" name = "name">
가격:<input type="text" name = "price">
갯수:<input type="text" name = "cnt">
<input type="button" value="구매" onclick="send()">
</form>
<div id="container"></div>
</body>
<script type="text/javascript">
var div = document.querySelector("#container")
function send(){
// 2. 요청 query string 만들기 (만들어서 전송하기 때문에 form태그 안써도 됌)
var qstr = "name="+name+"&price="+price+"&cnt="+cnt
// 3. 이벤트에 의해 요청값 및 XMLHttpRequest 객체 호출
var xhr = new XMLHttpRequest()
var name = document.querySelector("[name=name]").value
var price = document.querySelector("[name=price]").value
var cnt = document.querySelector("[name=cnt]").value
// 4. get방식으로 요청값 전달 false는 동기방식
xhr.open("get","z04_data.jsp?"+qstr,false)
xhr.send()
// 6. 서버로 넘어온 데이터 처리
div.innerText = xhr.responseText
}
</script>
## z04_data.jsp
// 5. 받는 페이지에서 요청값 처리 및 전달할 데이터 만들기
${param.name}을/를 ${param.price*param.cnt}에 구매하셨습니다.
## a07_asynchroEmp.html
<body>
<h2>사원정보 조회</h2>
// 검색 테이블 만들기
<table>
<col width="40%">
<tr><th>사원명</th><td colspan="2"><input class="sch" type="text" name="ename" value=""></td></tr>
<tr><th>직책</th><td colspan="2"><input class="sch" type="text" name="job" value=""></td></tr>
<tr><th>급여</th><td><input class="sch" type="text" name="frSal" value="0"></td>
<td><input class="sch" type="text" name="toSal" value="9999"></td></tr>
<tr><td colspan="3"> <input type="button" id="schB" value="검색">
</td></tr>
</table>
// 검색된 결과가 출력될 div 설정
<div id="container"></div>
</body>
<script type="text/javascript">
// DOM 객체 선언
var enameOb = document.querySelector("[name=ename]")
var jobOb = document.querySelector("[name=job]")
var frSalOb = document.querySelector("[name=frSal]")
var toSalOb = document.querySelector("[name=toSal]")
var schArr = document.querySelectorAll(".sch")
var schB = document.querySelector("#schB")
// 각각 input 칸에서 enter 키를 누르면 바로 검색
schArr.forEach(function(sch){
sch.onkeyup=function(){
if(event.keyCode==13)
search()
}
})
// 검색 버튼 클릭 시, mapping시키는 로직이라 괄호없이 메서드 명만 호출
schB.onclick = search
// DOM객체 선언해서 query string 만들기
function search(){
var ename = enameOb.value
var job = jobOb.value
var frSal = frSalOb.value
var toSal = toSalOb.value
var qstr = "?ename="+ename+"&job="+job+"&frSal="+frSal+"&toSal="+toSal
loadData(qstr)
}
// ajax 선언 및 호출 비동기 방식 처리
function loadData(qstr){
var xhr = new XMLHttpRequest()
xhr.open("get","z05_EmpList.jsp"+qstr,true) // 비동기 방식으로 화면 로딩
xhr.send()
// 비동기 이벤트 선언 및 핸들러 할당
xhr.onreadystatechange = function (){
// 전송 상태 check : readyState 4번 (전송완료)
// http 반응코드가 에러가 없는 200일 때
if(xhr.readyState == 4 && xhr.status == 200){
console.log(xhr.responseText)
document.querySelector("#container").innerHTML = xhr.responseText
}
}
}
</script>
## z05_EmpList.jsp
<jsp:useBean id="dao" class="jspexp.a13_database.A02_EmpDao"/>
<jsp:useBean id="sch" class="jspexp.a13_database.vo.Emp"/>
<jsp:setProperty property="*" name="sch"/>
<c:if test="${empty param.ename }">${sch.setEname("") }</c:if>
<c:if test="${empty param.job }">${sch.setJob("") }</c:if>
<c:if test="${empty param.frSal }">${sch.setToSal(9999) }</c:if>
<table>
<tr><th>사원번호</th><th>사원명</th><th>직책명</th><th>관리자번호</th><th>급여</th><th>부서번호</th></tr>
<c:forEach var="emp" items="${dao.getEmpSch(sch) }">
<tr><td>${emp.empno }</td><td>${emp.ename }</td><td>${emp.job }</td>
<td>${emp.mgr }</td><td><fmt:formatNumber pattern="0,000.00" value="${emp.sal }"/></td><td>${emp.deptno }</td></tr>
</c:forEach>
</table>