ABOUT ME

읽히는 로직을 구현하고 싶습니다.

Today
Yesterday
Total
  • Ajax 사용, DB 읽어와서 웹브라우저에 보이기(레거시 방식 jsp)
    Front/js 2024. 7. 10. 14:25

     

     

     

    ✔ DB연결

    DB에 있는 데이터를 web브라우저에 보이려고 한다.

    DB의 데이터를 가져오기 위해서는 jsp를 사용해야한다. 

     

    데이터 테이블은 아래와 같다.

    sangdata 데이터 테이블

     

    ⌨ 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를 사용하여 프로그램을 짤때는 비동기 방식으로 프로그램을 짜자.

     

     

Designed by Tistory.