-
Ajax 사용, DB 읽어와서 웹브라우저에 보이기(레거시 방식 jsp)Front/js 2024. 7. 10. 14:25
▤ 목차
✔ DB연결
DB에 있는 데이터를 web브라우저에 보이려고 한다.
DB의 데이터를 가져오기 위해서는 jsp를 사용해야한다.
데이터 테이블은 아래와 같다.
⌨ jsp 파일
JDBC로 연결
<%@page import="java.sql.DriverManager"%> <%@page import="java.sql.ResultSet"%> <%@page import="java.sql.PreparedStatement"%> <%@page import="java.sql.Connection"%> <%@ page language="java" contentType="text/plain; charset=UTF-8" pageEncoding="UTF-8"%> {"sangpum":[ <% //sangdata 테이블을 읽어 json형식으로 출력 Connection conn =null; PreparedStatement pstmt=null; ResultSet rs =null; try{ Class.forName("org.mariadb.jdbc.Driver"); String url="jdbc:mariadb://localhost:3306/test"; conn = DriverManager.getConnection(url,"root","123"); pstmt = conn.prepareStatement("select * from sangdata"); rs=pstmt.executeQuery(); rs.next(); out.print(rs.getString("sang")); }catch(Exception e){ System.out.println("err : " + e); }finally{ try{ rs.close(); pstmt.close(); conn.close(); }catch(Exception e){ System.out.println("close : "+e); } } %> ] }
jsp는 <%%>안에 java를 사용한다.
그 밖은 html소스를 사용한다.
위의 코드는 java를 사용해서 DB를 연결하는 코드이다.
우선 프린트가 잘되는지 확인해보기위해
out.print(rs.getString("sang"));
이 코드를 찍어봤다.
데이터베이스와 잘 연결되었음을 알 수 있다.
그럼 각 데이터를 추출해보자.
String result = ""; while(rs.next()){ result +="{"; result +="\"code\":"+ "\"" +rs.getString("code")+ "\","; result +="\"sang\":"+ "\"" +rs.getString("sang")+ "\","; result +="\"su\":"+ "\"" +rs.getString("su")+ "\","; result +="\"dan\":"+ "\"" +rs.getString("dan")+ "\""; result +="},"; } if(result.length()>0){ //마지막 ,버리기 result = result.substring(0,result.length() -1); //전체길이 -1까지만 취함 } out.print(result);
java에서와 같이 .getString을 사용해서 데이터를 가져올 수 있다.
✔웹브라우저(html문서)에 DB가져오기(연결)
⌨ html 문서 가져오기
<script type="text/javascript"> window.onload=()=>{ document.querySelector("#btnOk").onclick = sijak; } let xhr; function sijak(){ xhr = new XMLHttpRequest(); xhr.open('get','DBconn.jsp',true); //get방식, jsp파일경로,비동기 xhr.onreadystatechange = function(){ if(xhr.readyState === 4){ if(xhr.status === 200){ process(); } } } xhr.send(null); } function process(){ let parseData = JSON.parse(data); alert(parseData.sangpum.length); };
이렇게 해당 DB와 잘 연결이 되었는지 확인해보자.
4개의 데이터가 잘 넘어오는 것을 알 수 있다.
👏
html과 jsp를 통해 db의 데이터를 가져올 수 잇었다.
✔DB의 원하는 데이터 브라우저로 가져오기
⌨ jsp 파일
DB의 전체 데이터를 가져오려고 한다. while문을 돌려 모든 데이터를 가져와보자.
String result = ""; while(rs.next()){ result +="{"; result +="\"code\":"+ "\"" +rs.getString("code")+ "\","; result +="\"sang\":"+ "\"" +rs.getString("sang")+ "\","; result +="\"su\":"+ "\"" +rs.getString("su")+ "\","; result +="\"dan\":"+ "\"" +rs.getString("dan")+ "\""; result +="},"; } if(result.length()>0){ result = result.substring(0,result.length() -1); //전체길이 -1까지만 취함 } out.print(result);
💻 html 파일
테이블에 넣어 가져오기로하자.
function process(){ let data = xhr.responseText; let parseData = JSON.parse(data); //alert(parseData.sangpum.length); let str ="<table border='1'>"; str +="<tr><th>코드</th><th>상품명</th><th>수량</th><th>단가</th></tr>"; for(let i=0; i<parseData.sangpum.length; i++){ str+="<tr>"; str+="<td>" + parseData.sangpum[i].code+"</td>"; str+="<td>" + parseData.sangpum[i].sang+"</td>"; str+="<td>" + parseData.sangpum[i].su+"</td>"; str+="<td>" + parseData.sangpum[i].dan+"</td>"; str+="</tr>"; } str +="</table>"; document.getElementById("hi").innerHTML = str; };
버튼을 누르면 테이블이 생성되도록 할것이다.
👏 결과
✔비동기 처리 확인
⌨ 비동기인 경우
네트워크는 언제 넘어올지 모른다. 클라이언트가 요청을하고 해당 데이터를 받아올때까지 클라이언트가 다른 일을 할 수 있도록 해야한다.
지금까지 당연스럽게 비동기를 사용하고 있었다. 만약에 동기인 경우를 살펴보자.
💻 동기인 경우
Thread.sleep(5000);
데이터를 5초뒤에 불러오도록 하자.
그리고 html 파일에 코드를 동기로 바꾸고 텍스트영역을 넣어보자.
<script> xhr.open('get','DBconn.jsp',false); </script> <textarea rows="10" cols="50"></textarea>
해당 화면이 등장한다.
텍스트를 넣다가 json 자료 읽기 버튼을 누르면 입력을 받지 않는다.
5초뒤에 해당 테이블이 나온다. 해당 테이블이 나오고나서 텍스트 입력을 다시 받는다.
😊정리
네트워크의 처리가 어떤 방식으로 진행될지 모른다. 때문에 비동기 방식으로 처리해야 클라이언트에서 기다리는 시간이 줄어든다. 만약 동기방식으로 처리하는데, 다량의 데이터를 로드하거나 파싱해야한다면 클라이언트는 기다리다가 이탈하게 될 것이다. Ajax를 사용하여 프로그램을 짤때는 비동기 방식으로 프로그램을 짜자.
'Front > js' 카테고리의 다른 글
html 에서 javascript 다루기 (0) 2024.07.23 JS의 라이브러리 (jQuery) (0) 2024.07.11 Ajax) get방식/ post 방식 데이터를 받기 (0) 2024.07.10 Ajax( Asynchronous JavaScript and XML / XMLHttpRequest ) (2) 2024.07.09 JavaScript) 모듈이란? (0) 2024.07.08