1. HTML <form>을 이용한 데이터 전송
: 기본 폼 제출 방식
<form action="indexTwo.jsp" method="GET"> <!-- method="POST"도 가능 -->
name:<input type="text" name="name" size="20" placeholder="이름"/><br/>
age:<input type="text" name="age" size="20" placeholder="연령"/><br/>
<input type="submit" value="index Two로 이동">
</form>
: 사용자가 입력한 이름(name)과 나이(age) 데이터를 indexTwo.jsp로 전송
: <input> 요소의 name 속성값이 name="name", name="age"로 지정되어 있어 서버에서 데이터를 받을 수 있다.
: submit 버튼을 누르면 GET 방식(기본값)으로 데이터가 URL에 포함되어 전달
ex)
사용자가 홍길동 / 25 입력 후 버튼 클릭 → indexTwo.jsp?name=홍길동&age=25
: get방식을 쓰면 url에 넘어가는 값이 보여짐(보여주지 않기 위해선 post방식 사용)
2. JavaScript를 이용한 동적 페이지 이동
: location.href를 이용한 GET 방식 데이터 전송
name:<input type="text" id="name" size="20" placeholder="이름"/><br/>
age:<input type="text" id="age" size="20" placeholder="연령"/><br/>
<button type="button" onclick="goPage()">index Two로 이동</button>
<script type="text/javascript">
const goPage = () => {
let name = document.getElementById("name").value;
let age = document.getElementById("age").value;
if (name.trim() === "") {
alert("이름을 입력해 주세요!");
return;
}
location.href = `./indexTwo.jsp?name=${encodeURIComponent(name)}&age=${encodeURIComponent(age)}`;
}
</script>
: location.href를 사용하여 JavaScript에서 URL을 변경하고 페이지를 이동
: 사용자가 입력한 값을 encodeURIComponent()를 사용하여 URL 인코딩 후 전달
: 입력 값이 없을 경우 alert()을 이용해 경고 메시지를 띄움
3. JSP에서 폼 데이터 받기
: request.getParameter()로 GET 데이터 받기
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
String name = request.getParameter("name");
String sAge = request.getParameter("age");
int age = 0;
try {
age = Integer.parseInt(sAge);
} catch (NumberFormatException e) {
age = -1;
}
System.out.println("name: " + name);
System.out.println("age: " + age);
%>
: request.getParameter("name")를 사용하여 GET 요청으로 전달된 데이터를 가져옵니다.
: 문자열로 전달된 age 값을 Integer.parseInt(sAge)를 사용해 정수로 변환
: 만약 age가 숫자가 아닐 경우 NumberFormatException이 발생할 수 있으므로 예외 처리가 필요
FormData와 fetch()를 활용한 방식 (요즘? 방식)
: POST 방식 사용
<form id="userForm">
name:<input type="text" id="name" name="name" size="20" placeholder="이름"/><br/>
age:<input type="text" id="age" name="age" size="20" placeholder="연령"/><br/>
<button type="button" onclick="submitForm()">index Two로 이동</button>
</form>
<script>
const submitForm = () => {
let formData = new FormData(document.getElementById("userForm"));
fetch("indexTwo.jsp", {
method: "POST",
body: formData
}).then(response => response.text())
.then(data => console.log("서버 응답:", data))
.catch(error => console.error("에러 발생:", error));
};
</script>
: fetch()를 사용하면 페이지 이동 없이 AJAX 방식으로 데이터를 서버에 전송할 수 있다.
: FormData 객체를 이용하여 POST 요청으로 데이터를 서버에 보낼 수 있다.
: 서버(indexTwo.jsp)에서 request.getParameter("name"), request.getParameter("age")를 이용하여 데이터를 받을 수 있다.
마무리
방법 | 특징 |
<form> 태그 사용 | 전통적인 방식, 페이지 이동 발생 |
location.href 사용 | JavaScript로 URL을 변경하여 이동, URL 인코딩 필요 |
fetch() 사용 | AJAX 요청을 통해 페이지 이동 없이 서버와 통신 가능 |
: 웹 개발에서는 fetch()를 활용한 비동기 요청이 일반적
: 전통적인 <form> 방식은 간단한 데이터 전송 시 유용
GET vs POST 차이점
비교 항목 | GET | POST |
데이터 전송 방식 | URL 쿼리 문자열 | HTTP 요청의 본문(body) |
보안 | 낮음 (URL 노출) | 상대적으로 높음 |
전송 데이터 크기 | 제한 있음 (URL 길이 제한) | 제한 없음 |
페이지 이동 여부 | 새로고침 발생 | 새로고침 발생 |
<form> vs fetch() 언제 사용?
방법 | 특징 | 추천 상황 |
<form method="post"> | 페이지 새로고침 발생, 간단한 구현 | 로그인, 회원가입, 기본 폼 전송 |
fetch() | 새로고침 X, 페이지 이동 없이 서버 요청 가능 | 실시간 검색, SPA(싱글 페이지 애플리케이션) |
: 단순한 폼 전송이라면 <form method="post">를 사용하면 되고,
: AJAX 요청이나 비동기 통신이 필요할 경우에는 fetch()가 더 적합
: 기본적인 GET/POST 요청 (form 사용)은 새로고침이 발생
: fetch()를 사용하면 새로고침 없이 데이터만 서버로 전송 가능
: 비동기 통신을 통해 페이지 이동 없이 서버 응답을 받을 수 있어 사용자 경험(UX)이 향상
'Front > JavaScript' 카테고리의 다른 글
JavaScript) DOM 조작 정리: childNodes / appendChild / removeChild / NodeList 활용 (0) | 2025.02.24 |
---|---|
JavaScript) 이벤트 정리: onload / onblur / onchange / keydown / 마우스 이벤트 (0) | 2025.02.24 |
JavaScript) 내비게이션과 HTML 페이지 이동 (0) | 2025.02.23 |
JavaScript) 문자열 다루기 : 길이 측정, 특정 문자 검색, 자르기, 비교 등 (0) | 2025.02.21 |
JavaScript) 10진수 변환 및 onchange 이벤트 처리 (0) | 2025.02.21 |