Spring MVC 또는 Servlet 기반 웹 애플리케이션에서 HttpServletRequest 객체는 Parameter와 Attribute를 사용하여 데이터를 처리합니다. 두 개념은 역할과 사용 방법에서 차이가 있으므로 정확히 이해하는 것이 중요합니다.
request.getParameter() 메서드를 사용하여 읽음.request.setAttribute()와 request.getAttribute()를 사용.| 특징 | Parameter | Attribute |
|---|---|---|
| 데이터 출처 | 클라이언트가 보낸 데이터 (폼 데이터, 쿼리 스트링). | 서버에서 설정한 데이터. |
| 읽기/쓰기 여부 | 읽기 전용 (서버에서 값을 변경하거나 추가할 수 없음). | 읽기/쓰기 가능 (서버에서 값을 설정하거나 수정 가능). |
| 사용 목적 | 사용자 입력 데이터를 컨트롤러에서 읽는 데 사용. | 컨트롤러 간, 또는 서버 내부에서 데이터를 공유하는 데 사용. |
| 수명 | 요청 수명 동안 유지 (클라이언트가 요청 시 전송한 데이터로 한정). | 요청 수명 동안 유지 (서버에서 설정한 데이터로 제한). |
| 메서드 | getParameter(String name), getParameterValues() 등. | setAttribute(String name, Object value), getAttribute() 등. |
| 다중 값 처리 | 같은 이름의 파라미터가 여러 개일 경우 배열로 처리 가능. | 다중 값 처리는 직접 구현해야 함. |
| 데이터 유형 | 항상 문자열 또는 문자열 배열로 반환. | 모든 Java 객체를 저장 가능. |
String value = request.getParameter("key"); // 단일 값
String[] values = request.getParameterValues("key"); // 다중 값
Enumeration<String> names = request.getParameterNames(); // 모든 파라미터 이름
?key1=value1&key2=value2):System.out.println(request.getParameter("key1")); // value1
System.out.println(request.getParameter("key2")); // value2
request.setAttribute("key", "value"); // 값 설정
Object value = request.getAttribute("key"); // 값 읽기
Enumeration<String> names = request.getAttributeNames(); // 모든 속성 이름
request.removeAttribute("key"); // 값 제거
request.setAttribute("user", new User("홍길동", "admin"));
User user = (User) request.getAttribute("user");
System.out.println(user.getName()); // 홍길동
폼 데이터 처리:
@PostMapping("/submit")
public String handleForm(HttpServletRequest request) {
String username = request.getParameter("username");
System.out.println("Username: " + username);
return "result";
}
GET 요청 쿼리 스트링 읽기:
-> query parameter를 읽어옴.
```java
@GetMapping("/search")
public String search(HttpServletRequest request) {
String keyword = request.getParameter("q");
System.out.println("Search Keyword: " + keyword);
return "searchResult";
}
```
컨트롤러 간 데이터 전달:
@RequestMapping("/forwardExample")
public String forwardExample(HttpServletRequest request) {
request.setAttribute("message", "Hello from Controller");
return "forward:/nextPage";
}
뷰에 데이터 전달:
request.setAttribute("username", "홍길동");
return "userProfile"; // JSP 또는 HTML에서 username 사용 가능
필터 또는 인터셉터에서 데이터 설정:
@Component
public class AuthFilter implements Filter {
@Override
public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) {
request.setAttribute("user", new User("홍길동", "admin"));
chain.doFilter(request, response);
}
}