티스토리 뷰
HTTP 요청 메소드: GET vs POST
HTTP는 클라이언트와 서버 간의 통신을 위한 프로토콜로, GET 방식과 POST 방식이 가장 많이 사용된다.

GET 방식
- 데이터 전달: URL 뒤에 파라미터를 추가하여 전달
- 데이터 길이: 브라우저와 서버에 따라 제한이 있을 수 있지만, 일반적으로 2,048자 이하로 권장됨
- 보안성: URL에 데이터가 노출되기 때문에 보안성이 낮음 (민감한 정보 전송에 적합하지 않음)
- 캐싱: 브라우저에서 자동으로 캐싱됨
- 사용 상황: 데이터 조회, 사용자가 입력한 정보가 노출되어도 괜찮을 때
예시:
<form action="http://catSaveTheWorld.com/search" method="GET">
<input type="text" name="query">
<button type="submit">검색</button>
</form>
사용자가 "cat"을 검색하면, 아래와 같은 URL이 요청된다:
http://catSaveTheWorld.com/search?query=cat
POST 방식
- 데이터 전달: HTTP 요청 본문(body)에 데이터를 추가하여 전달
- 데이터 길이: HTTP 요청 본문(body)의 크기에 제한이 있지만, 일반적으로 제한이 거의 없음 (서버 설정에 따라 다름)
- 보안성: HTTP 요청 본문(body)에 데이터가 포함되어 전달되므로 URL에 비해 노출이 덜하지만, HTTPS 사용 여부에 따라 다름
- 캐싱: 브라우저에서 캐싱되지 않음
- 사용 상황: 데이터 추가, 수정, 삭제, 사용자가 입력한 정보가 노출되지 않아야 할 때(로그인 등)
예시:
<form action="http://catSaveTheWorld.com/login" method="POST">
<input type="text" name="username">
<input type="password" name="password">
<button type="submit">로그인</button>
</form>
GET 방식 활용 예
- 데이터 조회: 검색 기능
- 페이지 이동: 브라우저에서 다른 페이지로 이동
- 작은 데이터 전송: 쿠키와 같은 작은 데이터 전송
POST 방식 활용 예
- 회원가입, 로그인: 사용자가 입력한 회원 정보를 서버에 전송하여 회원가입 또는 로그인 처리
- 게시글 작성: 사용자가 입력한 게시글 내용을 서버에 전송하여 게시글 작성
- 파일 업로드: 사용자가 업로드한 파일을 서버에 전송하여 저장
요약
GET 방식과 POST 방식의 차이
GET | POST | |
데이터 전달 | URL 뒤에 파라미터를 추가하여 전달 | HTTP 요청 본문(body)에 데이터를 추가하여 전달 |
데이터 길이 | URL 길이에 제한이 있음 ( 2,048자 이하) | HTTP 요청 본문(body)의 크기에 제한이 있음 ( 2GB 이하) |
보안성 | URL에 데이터가 노출되기 때문에 보안성이 낮음 | HTTP 요청 본문(body)에 데이터가 포함되어 전달되므로 보안성이 높음 |
캐싱 | 브라우저에서 자동으로 캐싱됨 | 브라우저에서 캐싱되지 않음 |
사용상황 | 데이터 조회 사용자가 입력한 정보가 노출되어도 괜찮을 때 |
데이터 추가, 수정, 삭제 사용자가 입력한 정보가 노출되지 않아야할 때(로그인 등) |
JSP 페이지에서 request 객체를 인스턴스를 할당하지 않아도 사용 가능한 이유
JSP 페이지에서 request 객체를 인스턴스를 할당하지 않아도 사용 가능한 이유는 JSP 페이지가 서블릿으로 변환될 때, JSP 컨테이너가 자동으로 request 객체를 생성하고 초기화하기 때문. 이는 JSP의 내장 객체 중 하나로, 서블릿의 라이프사이클 동안 자동으로 관리.
내장 객체의 개념
JSP에는 여러 내장 객체가 있다. 이 내장 객체들은 JSP 페이지에서 기본적으로 사용할 수 있도록 자동으로 제공된다. 주요 내장 객체에는 request, response, session, application, out, config, pageContext, page, exception 등이 있다.
JSP 내장 객체의 자동화
- 자동 생성: JSP 컨테이너는 JSP 페이지를 서블릿으로 변환할 때, 자동으로 request 객체를 생성하고 초기화한다. 이 작업은 JSP 페이지가 요청을 받을 때마다 수행된다.
- 자동 초기화: JSP 내장 객체들은 서블릿의 service 메서드가 호출될 때 자동으로 초기화된다. 예를 들어, request 객체는 클라이언트의 HTTP 요청을 캡처하고, 이를 통해 요청 파라미터, 헤더 정보 등을 접근할 수 있다.
예시 코드
다음은 JSP 페이지에서 request 객체를 사용하는 예시:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Request Example</title>
</head>
<body>
<h1>Request Example</h1>
<%
// request 객체를 사용하여 파라미터 값을 가져옴
String paramValue = request.getParameter("paramName");
if (paramValue != null) {
out.println("Parameter value: " + paramValue);
} else {
out.println("Parameter 'paramName' is not provided.");
}
%>
</body>
</html>
JSP가 서블릿으로 변환되는 과정
JSP 페이지는 실제로는 서블릿으로 변환되어 실행된다. 변환된 서블릿 코드에서 request 객체는 다음과 같이 사용된다:
public class GeneratedServlet extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// JSP 내장 객체들이 초기화됨
HttpSession session = request.getSession();
ServletContext application = getServletContext();
JspWriter out = response.getWriter();
// JSP 페이지의 스크립트릿 코드가 여기에 삽입됨
String paramValue = request.getParameter("paramName");
if (paramValue != null) {
out.println("Parameter value: " + paramValue);
} else {
out.println("Parameter 'paramName' is not provided.");
}
}
}
요약
JSP 페이지에서 request 객체를 인스턴스를 할당하지 않아도 사용할 수 있는 이유는 JSP 컨테이너가 JSP 페이지를 서블릿으로 변환할 때, 자동으로 request 객체를 생성하고 초기화하기 때문. 이는 JSP의 내장 객체 기능 중 하나로, 개발자가 별도로 인스턴스를 생성할 필요 없이 쉽게 HTTP 요청과 응답을 처리할 수 있게 한다.
request.getParameter();설명
request.getParameter() 메서드는 JSP나 서블릿에서 HTTP 요청으로 전달된 파라미터 값을 가져오는 데 사용된다. 이 메서드는 클라이언트가 보낸 데이터(주로 HTML 폼 데이터)를 서버에서 처리할 때 매우 유용.
주요 기능
- 파라미터 값 가져오기: 지정된 이름의 파라미터 값을 반환합니다.
- 반환 타입: String
- 매개변수: 파라미터의 이름(String 타입)
사용 예시
HTML 폼
<form action="process.jsp" method="post">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit" value="Submit">
</form>
JSP 코드 (process.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Form Processing</title>
</head>
<body>
<h1>Form Processing Result</h1>
<%
// request.getParameter() 메서드를 사용하여 폼 데이터 가져오기
String username = request.getParameter("username");
String password = request.getParameter("password");
if (username != null && password != null) {
out.println("Username: " + username + "<br>");
out.println("Password: " + password + "<br>");
} else {
out.println("No data received.");
}
%>
</body>
</html>
동작 원리
- 클라이언트가 폼을 제출하면 브라우저는 입력된 데이터를 쿼리 스트링 또는 요청 바디에 포함시켜 서버로 전송한다.
- 서버에서 해당 요청을 받으면, HttpServletRequest 객체가 생성된다.
- request.getParameter("파라미터이름") 메서드를 호출하면, 해당 파라미터의 값을 문자열로 반환한다.
- 예를 들어, request.getParameter("username")은 폼에서 입력된 username 필드의 값을 반환한다.
- 파라미터가 존재하지 않으면 null을 반환한다.
상세 설명
- 파라미터의 소스: GET 방식에서는 URL 쿼리 스트링에서, POST 방식에서는 요청 바디에서 파라미터를 추출한다.
- GET 방식 예시: http://example.com/page.jsp?username=JohnDoe&password=1234
- POST 방식 예시: 폼 데이터를 요청 바디에 포함하여 전송
- 멀티플 파라미터: 같은 이름의 파라미터가 여러 개 전송된 경우, request.getParameter()는 첫 번째 값을 반환한다. 모든 값을 배열로 가져오려면 request.getParameterValues() 메서드를 사용.
- 인코딩 처리: 폼 데이터의 인코딩 문제를 피하려면, 요청 파라미터를 처리하기 전에 request.setCharacterEncoding("UTF-8")을 호출하여 인코딩을 설정할 수 있다.
예시 코드 (인코딩 설정 포함)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("UTF-8"); // 요청 파라미터의 인코딩을 UTF-8로 설정
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Form Processing with Encoding</title>
</head>
<body>
<h1>Form Processing Result</h1>
<%
String username = request.getParameter("username");
String password = request.getParameter("password");
if (username != null && password != null) {
out.println("Username: " + username + "<br>");
out.println("Password: " + password + "<br>");
} else {
out.println("No data received.");
}
%>
</body>
</html>
요약
- request.getParameter("parameterName")는 HTTP 요청으로 전달된 특정 파라미터의 값을 문자열로 반환한다.
- 폼 데이터를 처리하거나 URL 쿼리 스트링의 값을 읽을 때 사용된다.
- 파라미터가 존재하지 않으면 null을 반환한다.
- 멀티플 파라미터의 경우, 첫 번째 값만 반환하며 모든 값을 가져오려면 request.getParameterValues()를 사용한다.
- 인코딩 설정을 통해 폼 데이터의 인코딩 문제를 해결할 수 있다.
wrapper class
래퍼 클래스(Wrapper Class)는 기본 자료형(Primitive Type)을 객체로 다루기 위해 사용하는 클래스이다. 자바에서는 각 기본 자료형에 대응하는 래퍼 클래스가 존재하며, 이러한 래퍼 클래스를 통해 기본 자료형을 객체처럼 사용할 수 있다. 이를 통해 컬렉션 프레임워크와 같은 객체만을 다루는 API에서도 기본 자료형을 사용할 수 있다.
기본 자료형과 대응하는 래퍼 클래스
기본 | 자료형래퍼 클래스 |
boolean | Boolean |
char | Character |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
주요 기능
- 박싱(Boxing): 기본 자료형 값을 래퍼 클래스 객체로 변환
- 언박싱(Unboxing): 래퍼 클래스 객체를 기본 자료형 값으로 변환
- 유틸리티 메서드: 형변환, 문자열 변환, 상수 값 제공 등의 기능을 제공
박싱(Boxing)과 언박싱(Unboxing)
자바 5부터는 자동 박싱(Auto-Boxing)과 자동 언박싱(Auto-Unboxing)을 지원하여, 기본 자료형과 래퍼 클래스 간의 변환을 자동으로 처리해 준다.
예시: 자동 박싱과 언박싱
public class WrapperExample {
public static void main(String[] args) {
// 자동 박싱: 기본 자료형을 래퍼 클래스 객체로 자동 변환
Integer intObject = 10;
Double doubleObject = 3.14;
// 자동 언박싱: 래퍼 클래스 객체를 기본 자료형으로 자동 변환
int intValue = intObject;
double doubleValue = doubleObject;
// 출력
System.out.println("Integer object: " + intObject);
System.out.println("Double object: " + doubleObject);
System.out.println("int value: " + intValue);
System.out.println("double value: " + doubleValue);
}
}
주요 메서드
래퍼 클래스는 다양한 유틸리티 메서드를 제공합니다. 예를 들어, 문자열을 숫자로 변환하거나, 특정 값의 상수를 제공하는 메서드 등이 있습니다.
문자열을 숫자로 변환
public class WrapperExample {
public static void main(String[] args) {
// 문자열을 숫자로 변환
int intValue = Integer.parseInt("123");
double doubleValue = Double.parseDouble("3.14");
// 출력
System.out.println("int value: " + intValue);
System.out.println("double value: " + doubleValue);
}
}
상수 값 제공
public class WrapperExample {
public static void main(String[] args) {
// 최대값과 최소값 상수
int intMax = Integer.MAX_VALUE;
int intMin = Integer.MIN_VALUE;
// 출력
System.out.println("Integer max value: " + intMax);
System.out.println("Integer min value: " + intMin);
}
}
래퍼 클래스의 필요성
- 컬렉션 프레임워크 사용: 자바 컬렉션 프레임워크는 객체만 다룰 수 있기 때문에, 기본 자료형을 래퍼 클래스로 변환하여 사용해야 한다.
- 메서드 인자로 사용: 메서드는 객체를 인자로 받을 수 있으므로, 기본 자료형 값을 객체로 전달할 때 사용합니다.
- 유틸리티 메서드 활용: 문자열을 숫자로 변환하거나, 숫자의 상수 값 등을 얻을 때 편리합니다.
import java.util.ArrayList;
public class WrapperExample {
public static void main(String[] args) {
ArrayList<Integer> intList = new ArrayList<>();
intList.add(10); // 자동 박싱
intList.add(20); // 자동 박싱
int sum = 0;
for (Integer num : intList) {
sum += num; // 자동 언박싱
}
System.out.println("Sum: " + sum);
}
}
요약
- 래퍼 클래스는 기본 자료형을 객체로 다루기 위해 사용됩니다.
- 자바에서 각 기본 자료형에 대응하는 래퍼 클래스가 있습니다.
- 자바 5부터는 자동 박싱과 언박싱을 지원하여 기본 자료형과 래퍼 클래스 간의 변환이 자동으로 이루어집니다.
- 래퍼 클래스는 컬렉션 프레임워크 사용, 메서드 인자로 사용, 유틸리티 메서드 활용 등의 이유로 필요합니다.
절대경로 상대경로(jsp의 경우)
절대경로 (Absolute Path)
절대경로는 리소스의 전체 경로를 지정하는 방법. 이는 도메인명 또는 서버의 루트 디렉토리를 기준으로 한 경로.
특징
- 서버 루트 또는 도메인명 기준: URL이 서버의 루트 디렉토리 또는 도메인명을 기준으로 작성.
- 변경에 취약: 서버의 도메인명이나 컨텍스트 경로가 변경되면 경로도 변경해야 한다.
예시
도메인명을 포함한 절대경로: http://example.com/css/style.css
<link rel="stylesheet" type="text/css" href="http://example.com/css/style.css">
서버 루트 기준 절대경로: /css/style.css
<link rel="stylesheet" type="text/css" href="/css/style.css">
상대경로 (Relative Path)
상대경로는 현재 문서의 위치를 기준으로 리소스의 위치를 지정하는 방법.
특징
- 현 문서 기준: 현재 문서의 위치를 기준으로 작성.
- 유연성: 서버의 도메인명이나 컨텍스트 경로가 변경되어도 경로가 영향을 받지 않는다.
유형
- 현재 디렉토리 기준 (./): 현재 디렉토리를 기준으로 상대경로를 작성.
- 상위 디렉토리 기준 (../): 상위 디렉토리로 이동하여 상대경로를 작성.
예시
현재 디렉토리 기준: css/style.css
<link rel="stylesheet" type="text/css" href="css/style.css">
상위 디렉토리 기준: ../css/style.css
<link rel="stylesheet" type="text/css" href="../css/style.css">
JSP에서의 경로 사용
JSP 페이지에서 경로를 다룰 때는, 컨텍스트 경로를 동적으로 가져오는 것이 매우 유용하다. 이를 통해 웹 애플리케이션의 배포 경로가 변경되어도 JSP 코드의 수정 없이 경로를 관리할 수 있다.
request.getContextPath() 사용
request.getContextPath() 메서드를 사용하여 웹 애플리케이션의 컨텍스트 경로를 동적으로 가져올 수 있다. 이를 통해 절대경로를 동적으로 생성할 수 있다.
예시
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Example Page</title>
<!-- 상대경로로 CSS 파일 링크 -->
<link rel="stylesheet" type="text/css" href="css/style.css">
<!-- 절대경로로 CSS 파일 링크 -->
<link rel="stylesheet" type="text/css" href="<%= request.getContextPath() %>/css/style.css">
</head>
<body>
<h1>Hello, JSP!</h1>
<!-- 절대경로로 이미지 파일 링크 -->
<img src="<%= request.getContextPath() %>/images/logo.png" alt="Logo">
</body>
</html>
절대경로와 상대경로의 문제점 분석
- 절대경로의 문제점:
- 도메인명이나 서버 주소가 변경되면 모든 절대경로를 수정해야 한다.
- 예: http://localhost:8080/myapp/css/style.css -> http://newdomain.com/myapp/css/style.css
- 상대경로의 문제점:
- 파일 구조가 변경되면 상대경로도 수정해야 할 수 있습니다.
- 예: ../../css/style.css를 사용하던 파일이 디렉토리 구조가 변경되어 ../../../css/style.css로 수정 필요.
권장 사항
- 컨텍스트 경로 사용: JSP 페이지에서는 request.getContextPath()를 사용하여 동적인 절대경로를 생성하는 것이 좋다. 이는 애플리케이션의 이동성 및 유지 보수성을 높인다.
- 상대경로 사용: 단일 디렉토리 내에서의 리소스 참조는 상대경로를 사용하여 코드의 간결성을 유지한다.
요약
- 절대경로는 서버의 루트 또는 도메인명을 기준으로 리소스의 위치를 지정한다. 변경에 취약하다.
- 상대경로는 현재 문서의 위치를 기준으로 리소스의 위치를 지정한다. 파일 구조 변경에 유연하다.
- JSP에서 request.getContextPath()를 사용하여 동적인 절대경로를 생성하면 웹 애플리케이션의 유지 보수성이 높아진다.
'개발자교육' 카테고리의 다른 글
24_07_12 오늘의 수업내용 (0) | 2024.07.12 |
---|---|
24_07_11 오늘의 수업내용 (0) | 2024.07.11 |
24_07_08 오늘의 수업내용 (0) | 2024.07.08 |
24_07_05 오늘의 수업내용 (0) | 2024.07.05 |
24_07_04 오늘의 수업노트 (0) | 2024.07.04 |
- Total
- Today
- Yesterday
- 문자열비교메서드
- 클래스의 구성 멤버
- 반복문
- let-const-var
- javascript자료형
- jdbc
- 조건문
- resultsetimpl
- jsp의 주요 태그
- 제어흐름함수
- 필드 초기화와 사용
- JavaScript
- 데이터변환함수
- 뷰(view)
- 가변 길이 매개변수와 리턴
- get한글인코딩
- http 프로토콜:get vs post
- stored program
- Java
- 변수표기법
- 테이터베이스 설계
- ㅎgroupbyvs윈도우함수
- 참조타입vs기본타입
- 오버로딩vs오버라이딩
- 호이스팅(hoisting)
- cte ( common table expression )
- 배열(Array)
- 객체 지향 프로그래맹의 특징(캡슐화|상속|다형성)
- 데이터베이스(mysql)
- 함수범위vs블록범위
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |