본문 바로가기
WEB

[WEB] 11. 비동기 처리

by ssunooo 2024. 8. 23.




비동기 처리란?

"DB"를 V에서 사용하는데, "화면 변경이 없다"

화면이 깜빡거림(리로드)이 없다.

 

ex)

[동기 처리]
어플에서 사용자가 "DB에 이미 존재하는 아이디를 입력"했을때 기능을 수행하는 경우(무조건 기능을 수행하는 것이 아닌)
DB를 확인해봐야 수행할 수 있다.

DB(Model)에게 정보를 요청 --->> Controller 한테 DB확인 --->> "요청"
V에서 C에게 요청을 하면 화면이 reload된다

 

[비동기 처리]
C를 통해 DB(M) 한테 SELECTONE 요청을 했는데도
reload가 안되고 V단에서 DB(M)의 정보를 화면 까빡임없이 받아오는 기술

<ajax(json타입) 코드 작성법>

$.ajax({ // {}==json타입
type : 요청 방식,
url : 요청할 URL,
dataType : 서버에서 응답해오는 데이터의 형식,
success : function() {},
error : function() {}
})
// {key:value, key:value, ....} JSON 타입의 형식은 Map 객체와 유사하다!!



옛날에는 .xml로도 데이터를 주고받았었는데
가독성이 안좋고 무거우니까
.json 형식으로 바꿔 쓰는 방향으로 바꼈다.
 React 등에서도 데이터를 주고받을때 JSON 형식을 사용한다!
[{"key":"value","key":"value", ... },{....},{....}]
.ajax() 인자로도 사용된다.

좋아요 버튼을 눌렀다가 취소할 수도 있게 만드는 코드를 작성해 보았다.

 

<NewFile.jsp>

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>비동기 처리</title>
</head>
<body>

	<script src="https://code.jquery.com/jquery-3.7.1.min.js"
		integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo="
		crossorigin="anonymous"></script>
	<script type="text/javascript">
		$(document).ready(function() {
			$("#btn").click(function() {
				$.ajax({ // {}==json타입
					type : "GET", // 요청 메서드
					url : "main.do", // 요청할 URL
					dataType : "text", // 서버에서 응답해오는 데이터의 형식
					success : function(data) { // 콜백 함수 == 바로바로 수행되는 것이 아니라 응답을 제대로 받아야지 수행된다.
						console.log("data는 서버에서 응답한 데이터");
						console.log(data);
						if (data == 'true') {
							// 좋아요를 누른 행위
							$("#btn").text("♥");
						} else {
							// 좋아요를 취소한 행위
							$("#btn").text("♡");
						}
					},
					error : function(error) { // 실패 콜백 함수
						console.log("응답실패...");
						console.log(error); // 왜 실패 했는지 보여줘
					}
				});
			});
		});
		// {key:value, key:value, ....} JSON 타입의 형식은 Map 객체와 유사하다!!
	</script>

	<button id="btn">♡</button>

</body>
</html>

 

 

<TestServlet.java>

package test;

import java.io.IOException;
import java.io.PrintWriter;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

@WebServlet("*.do")
public class TestServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	private boolean flag=false; // DB에 저장된 데이터라는 뜻
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public TestServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("GET 요청 도착");
		
		flag = !flag; // false <<--->> true
		
		PrintWriter out=response.getWriter();
		out.print(flag);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("POST 요청 도착");
	}

}

 

 

 

2024.08.23

'WEB' 카테고리의 다른 글

[WEB] 13. 효율적인 모달창(알람)  (1) 2024.09.04
[WEB] 12. 리스너  (0) 2024.09.03
[WEB] 10. 핸들러맵핑과 싱글톤 패턴  (0) 2024.08.22
[WEB] 09. 스프링 프레임워크의 구조  (0) 2024.08.20
[WEB] 08. jQuery  (0) 2024.08.19