param, request.getParameter, requestScope, request.getAttribute의 차이
용어 | 목적 | 데이터유형 | 접근 방식 | 주용 사용처 |
param | 파라미터 값 접근 (EL) |
클라이언트 파라미터 | $(param.name) | 클라이언트에서 보낸 파라미터 접근 |
request.getParameter | 파라미터 값 접근 | 클라이언트 파라미터 | request.getParameter ("name") |
클라이언트에서 보낸 파라미터 접근 |
requestScope | 속성 값 접근 (EL) | 서버 측 속성 | ${requestScope.name} | 서버에서 설정한 속성 접근 |
request.getAttribute | 속성 값 접근 | 서버 측 속성 | request.getAttribute ("name") |
서버에서 설정한 속성 접근 |
1. param (EL Expression)
역할: 클라이언트가 서버로 전송한 파라미터 값에 접근.
사용 방식: EL(Expression Language)을 사용
파라미터: param 객체를 통한 GET 요청의 쿼리 스트링 또는 POST 요청의 폼 데이터에 담긴 값.
예시:
아이디: ${param.id}
비밀번호: ${param.passwd}
- ${param.id}: 클라이언트가 보낸 "id" 파라미터 값을 EL을 통해 가져온다.
- ${param.passwd}: 클라이언트가 보낸 passwd라는 파라미터 값을 EL을 통해 출력한다.
payload에서 param을 가져온다는 것은 클라이언트(주로 브라우저)가 서버로 보내는 요청(request)의 데이터(payload)에 담긴 파라미터 값을 JSP 페이지에서 EL(Expression Language)을 사용하여 접근하는 것을 의미한다.이때, GET 요청의 경우 payload는 URL 쿼리 스트링에 포함되며 POST 요청의 경우 payload는 요청 본문(body)에 포함된다.
📍페이로드 (Payload)
- 정의: 클라이언트가 서버로 전송하는 요청의 본문이나 요청에 포함된 모든 데이터를 의미한다. HTTP 요청에서 클라이언트가 서버에 전달하고자 하는 실제 데이터를 포함하며, GET, POST 등 다양한 요청 방식에서 나타날 수 있다.
- 예시:
- GET 요청: 쿼리 스트링에 담긴 데이터 (예: http://example.com/page?id=123&name=John에서 id와 name이 페이로드에 포함됨).
- POST 요청: 요청 본문에 담긴 데이터 (예: 폼 제출 시 전송되는 데이터, JSON 등).
📍파라미터 (Parameter)
- 정의: 함수, 메소드 또는 요청에서 특정 데이터 항목을 전달하는 방식으로, 클라이언트가 서버에 요청할 때 전송하는 데이터의 이름과 값 쌍을 의미한다. 주로 GET 요청의 쿼리 스트링 또는 POST 요청의 폼 데이터에서 사용된다.
- 예시: URL 쿼리 스트링에서 ?id=123&name=John에서 id와 name은 파라미터이다.
📍속성 (Property)
- 정의: 객체 지향 프로그래밍에서 객체의 상태를 나타내는 데이터 필드로, 특정 객체가 가지는 특성이다. 주로 서버 측에서 설정된 데이터로, 요청의 속성을 나타낸다.
- 예시: JSP에서 request.setAttribute("username", "John")와 같은 방식으로 설정된 username 속성.
${param}은 request.getParameter()와 동일한 역할을 하며, 보다 간결하게 사용할 수 있다.
장점: param을 사용하면 request.getParameter()보다 간결하게 파라미터에 접근할 수 있다.
제한: param은 오직 파라미터만 가져오므로, request.setAttribute()와 같은 방식으로 설정된 **속성(attribute)**에는 접근할 수 없다.
2. request.getParameter
역할: 클라이언트가 요청(Request)에서 보낸 파라미터 값에 접근.
사용 방식: 서블릿이나 JSP 스크립틀릿에서 직접 파라미터 값을 가져올 때 사용된다.
파라미터: GET 요청의 쿼리 스트링 또는 POST 요청의 폼 데이터에 담긴 값.
예시:
아이디: <%= request.getParameter("id") %>
비밀번호: <%= request.getParameter("passwd") %>
- request.getParameter("id")를 사용하여 클라이언트로부터 전달받은 파라미터 "id" 값을 가져온다.
- request.getParameter("passwd")를 사용하여 파라미터 "passwd" 값을 가져온다.
장점: JSP뿐 아니라 서블릿 등에서도 사용 가능하다.
서블릿(Servlet): Java 코드로 작성되어 있어 직접적으로 요청을 처리하는 데 최적화되어 있다.
ex)
@WebServlet("/login")
public class LoginServlet {
String username = request.getParameter("username");
}
JSP(JavaServer Pages): HTML과 Java 코드가 혼합되어 있다. 서블릿으로 변환되고 컴파일된다.
ex)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<% String username = request.getParameter("username");%>
제한: 요청(Request)에 포함된 파라미터 값만 가져올 수 있다. 즉, 속성(attribute)에는 접근할 수 없다.
~>파라미터는 메소드 생략이 불가능하다.생략하게 되면 그냥 속성에 접근하는것이 된다.
3. requestScope (EL Expression)
역할: request 범위(scope)에 저장된 **속성(attribute)**에 접근.
사용 방식: EL을 사용하여 request scope에 저장된 속성에 접근할 때 사용된다.
예시:
아이디: ${requestScope.val}
- ${requestScope.val}: requestScope 객체를 사용하여 "val"이라는 속성을 가져온다.
- ${val}: requestScope는 생략이 가능하여 바로 속성 이름으로도 접근할 수 있다.
- requestScope.val은 request.setAttribute("val", value)메서드를 통해 설정된 값을 가져온다.
request.setAttribute("val", "hahahaha");
RequestDispatcher rd = request.getRequestDispatcher("el2.jsp");
rd.forward(request, response);
- request.setAttribute("val", "hahahaha"): "val"이라는 이름으로 "hahahaha" 값을 request 객체에 저장한다.
- RequestDispatcher를 사용하여 다른 JSP 페이지로 이동할 때, 설정된 request의 속성 값이 함께 전달된다.
장점: EL을 사용해 간단하게 request scope의 속성에 접근할 수 있다.
자동 탐색: requestScope는 생략 가능하며, EL은 기본적으로 requestScope부터 속성을 자동으로 찾는다.
👉생략 가능
아이디: ${val} <!-- 자동으로 requestScope에서 찾음 -->
(오직 requestScope에 저장된 속성만을 대상으로 한다.)
4. request.getAttribute
역할: request 범위(scope)에 저장된 **속성(attribute)**에 접근.
사용 방식: JSP 스크립틀릿 또는 서블릿에서 직접 request 객체에 저장된 속성 값을 가져올 때 사용된다.
예시:
<%= request.getAttribute("val") %>
request.getAttribute("val")은 서버 측에서 request.setAttribute("val", value)메서드로 설정한 값을 가져온다.
장점: JSP, 서블릿 등에서 공통적으로 사용 가능하다.
제한: 파라미터와 다르게, 클라이언트가 보낸 데이터가 아닌 서버에서 설정된 데이터만 접근 가능하다.
'SPRING' 카테고리의 다른 글
[spring]스프링 부트 MVC구조 (3) | 2024.10.08 |
---|---|
[spring] 스프링 부트 Controller (0) | 2024.10.08 |
[spring] Spring Framework에서의 datasource 설정 및 Spring Boot migration (2) | 2024.10.04 |
[spring]JSTL(JSP Standard Tag Library) (2) | 2024.10.01 |
[spring] EL (Expression Language) (0) | 2024.09.29 |