fetch가 나오기 전에는 자바스크립트에서 jQuery를 이용해서 아래와 같이 AJAX 작성해왔다.
그렇다면 AJAX와 jQuery는 무엇이었을까 ? 이전에 AJAX 정리했던 내용을 다시 살펴보자.
🌝 Ajax란?
: JavaScript를 이용하여 비동기식으로 클라이언트와 서버가 데이터(XML)를 주고받는(통신) 방식
자세한 내용은, 아래 포스팅을 다시 보고 오자
[Servlet] Ajax란? Ajax를 이용해서 이메일 중복검사하기
➰ Ajax란? : JavaScript를 이용하여 비동기식으로 클라이언트와 서버가 데이터(XML)를 주고받는(통신) 방식 - 전체 페이지를 갱신하지 않고 일부분만 업데이트 가능 - 사용자에게 즉각적인 반응과 풍
jnaa.tistory.com
2023.07.14 - [ON/Servlet] - [Servlet] Ajax란? Ajax를 이용해서 이메일 중복검사하기
➰ fetch() API ( fetch : 가지고 오다)
: JS의 Promise객체를 이용한 비동기 요청 방법으로 JS에서 기본 제공함
- Promise(약속) 객체 : 비동기 요청에 대한 처리가 완료되면 바로 결과를 제공하겠다고 약속
📂 GET 방식
① 요청 작성 방법
fetch("요청주소") // 지정된 주소로 GET방식 비동기 요청(ajax)
// 전달하고자 하는 파라미터를 주소 뒤 쿼리스트링으로 추가
.then(response => response 파싱) // 요청에 대한 응답 객체(response)를 필요한 형태로 파싱
.then(response 파싱 데이터 => {}) // 첫 번째 then에서 파싱한 데이터를 이용한 동작 작성
.catch(e => {}) // 예외 발생시 처리할 내용을 작성
② 요청 데이터 얻어오는 방법
요청 url에 쿼리스트링 형태로 파라미터가 담겨 있어
@RequestParam, @ModelAttribute를 이용해서 얻어옴
③ 요청 데이터 얻어오는 방법 ( GET / POST 동일)
GET/POST 방식 모두 @ResponseBody를 이용해 반환
-> 해당 어노테이션을 작성하면 Controller에서 반환되는 값이
ViewResolver가 아닌 HttpMessageConverter로 전달되어
반환된 Java객체를 text/JSON으로 변환 후 비동기 요청을 한 곳으로 응답함
📕 HttpMessageConverter
: HTTP 요청 Body의 내용을 Java 객체로 변환하고
HTTP 응답의 Body의 내용을 text/JSON 형태로 변환해 주는 Spring Framework 구성 요소
1순위
ByteArrayHttpMessageConverter (바이트 배열 자동 변환)
2순위
StringHttpMessageConverter (Text 형식 자동 변환)
3순위
MappingJackson2HttpMessageConverter (요청 데이터 -> DTO/Map, 응답 데이터 -> JSON)
Jackson이란?
java에서 JSON을 쓰기 위한 라이브러리
💻 코드로 확인하기 🖱
① 이메일로 닉네임 조회
👓 Main.js
function selectNickname(email){
fetch("/selectNickname?email="+ email) // 지정된 주소로 GET방식 비동기 요청(ajax)
// 전달하고자 하는 파라미터를 주소 뒤 쿼리스트링(?키=값)으로 추가
.then(response => response.text()) // 요청에 대한 응답 객체(response)를 필요한 형태로 파싱
// text 형식으로 반환해준다
.then(nickname => {console.log(nickname)}) // 첫 번째 then에서 파싱한 데이터를 이용한 동작 작성
.catch(e => {console.log(e)}) // 예외 발생시 처리할 내용을 작성
}
👓 AjaxController
//이메일로 닉네임 조회
@GetMapping(value="/selectNickname",produces = "application/text; charset=UTF-8")
@ResponseBody
public String selectNickname(String email) {
// 쿼리스트링에 담긴 파라미터
return service.selectNickname(email);
}
👓 AjaxService
/**이메일로 닉네임 조회
* @param email
* @return nickname
*/
String selectNickname(String email);
👓 AjaxServiceImpI
@Service // 서비스임을 명시를 해주고 + bean으로 등록
public class AjaxServiceImpI implements AjaxService{
@Autowired // DI(객체로 등록되어 있는 것중에 AjaxDAO있으면 객체로 넣어줘!)
private AjaxDAO dao;
//이메일로 닉네임 조회
@Override
public String selectNickname(String email) {
return dao.selectNickname(email);
}
}
👓 AjaxDAO
@Repository // DB연결 의미 + bean 등록
public class AjaxDAO {
@Autowired // bean중에서 타입이 같은 객체를 의존성주입(DI)
private SqlSessionTemplate sqlSession;
/** 이메일로 닉네임 조회
* @param email
* @return nickname
*/
public String selectNickname(String email) {
return sqlSession.selectOne("ajaxMapper.selectNickname",email);
}
}
👓 ajax-mapper.xml
<resultMap type="Member" id="member_rm">
<!-- DB의 기본 키(복합키면 여러 개 작성) -->
<id property="memberNo" column="MEMBER_NO" />
<!-- DB의 일반 컬럼들 -->
<result property="memberEmail" column="MEMBER_EMAIL" />
<result property="memberPw" column="MEMBER_PW" />
<result property="memberNickname" column="MEMBER_NICKNAME" />
<result property="memberTel" column="MEMBER_TEL" />
<result property="memberAddress" column="MEMBER_ADDR" />
<result property="profileImage" column="PROFILE_IMG" />
<result property="enrollDate" column="ENROLL_DATE" />
<result property="memberDeleteFlag" column="MEMBER_DEL_FL" />
<result property="authority" column="AUTHORITY" />
</resultMap>
<!-- 이메일로 닉네임 조회 -->
<select id="selectNickname" parameterType="string"
resultType="string">
SELECT MEMBER_NICKNAME
FROM MEMBER
WHERE
MEMBER_EMAIL = #{email}
AND MEMBER_DEL_FL = 'N'
</select>
🔮 출력화면
'ON > spring' 카테고리의 다른 글
[ Spring ] 이메일 인증 기능 - SMTP (0) | 2023.08.21 |
---|---|
[Spring] ajax 이용하기 | 자바스크립트의 fetch() 함수 ② POST 방식 (0) | 2023.08.18 |
[Spring] 필터 | 비밀번호 변경 | 회원 탈퇴 | 회원가입 (유효성검사) ④ (0) | 2023.08.16 |
[Spring] 드롭다운 메뉴 | 회원정보 수정 ③ (0) | 2023.08.14 |
[Spring] 회원가입 | 주소 API 활용 ② (0) | 2023.08.11 |