본문 바로가기

Backend/Spring & SpringBoot

[Spring Framework] 03_03. 요청 파라미터 처리 방법

728x90

1. 컨텍스트 루트 경로가 변경될 경우 처리 방법.
   

1) 컨텍스트 루트 경로를 변수로 지정함.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>  
 <c:set var="path" value="<%=request.getContextPath()%>" scope="application" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h2>요청 파라미터값 테스트!!!</h2>
	<form action="${path}/request/join">
		<fieldset>
			<legend>회원 가입 양식</legend>
			<p>
				- ID: <input type="text" name="userId" size="10"> <br>
				- PW: <input type="password" name="userPw" size="10"> <br>
				- NAME: <input type="text" name="userName" size="10"> <br>
				- HOBBY:
				<input type="checkbox" name="hobby" value="soccer">축구&nbsp;
				<input type="checkbox" name="hobby" value="reading">독서&nbsp;
				<input type="checkbox" name="hobby" value="music">음악&nbsp;
				<br>
				<input type="submit" value="회원가입">
			</p>
		</fieldset>
	</form>
</body>
</html>

 

- jstl 사용

<c:set var="path" value="<%= request.getContextPath()" scope="application"/>

 

- EL 사용

<form action = "${path}/request/join"> 

 

2) <c:url> 태그를 사용함.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
     <c:set var="path" value="<%=request.getContextPath()%>" scope="application" />
 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<h2>요청 파라미터값 테스트!!!</h2>
	<form action="<c:url value='/request/join' />" method="post">
		<fieldset>
			<legend>회원 가입 양식</legend>
			<p>
				- ID: <input type="text" name="userId" size="10"> <br>
				- PW: <input type="password" name="userPw" size="10"> <br>
				- NAME: <input type="text" name="userName" size="10"> <br>
				- HOBBY:
				<input type="checkbox" name="hobby" value="soccer">축구&nbsp;
				<input type="checkbox" name="hobby" value="reading">독서&nbsp;
				<input type="checkbox" name="hobby" value="music">음악&nbsp;
				<br>
				<input type="submit" value="회원가입">
			</p>
		</fieldset>
	</form>
</body>
</html>

<form action = "<c:url value='/request/join' />" method ="post"> 로 변경

 

2. 요청 파라미터 처리 방법

* 파라미터 받는 VO 객체 생성

* UserVo.java

 

package com.spring.web.model;

import java.util.List;

public class UserVO {
	
	private String userId;
	private String userPw;
	private String userName;
	private List<String> hobby;
	
	public String getUserId() {
		return userId;
	}
	public void setUserId(String userId) {
		this.userId = userId;
	}
	public String getUserPw() {
		return userPw;
	}
	public void setUserPw(String userPw) {
		this.userPw = userPw;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public List<String> getHobby() {
		return hobby;
	}
	public void setHobby(List<String> hobby) {
		this.hobby = hobby;
	}
}

 

1) 전통적인 jsp/servlet의 파라미터 처리 방법.
- HttpServletRequest 객체를 사용.

- HttpServletRequest 객체를 매개변수로 받아야 request.getParameter() 를 사용할 수 있다. 

 

@PostMapping("/join") 
	public void register(HttpServletRequest request) {
		System.out.println("/request/join: POST");
		
		System.out.println("ID: " + request.getParameter("userId"));
		System.out.println("PW: " + request.getParameter("userPw"));
		System.out.println("HOBBY: " 
		+ Arrays.toString(request.getParameterValues("hobby")));
	}

2) @RequestParam 아노테이션을 이용한 요청 처리 방법.

 

@PostMapping("/join")
	public void register(@RequestParam("userId") String id,
						 @RequestParam("userPw") String pw,
						 @RequestParam(value="hobby", required=false, defaultValue="no hobby person") List<String> hobbys) {
		System.out.println("ID: " + id);
		System.out.println("PW: " + pw);
		System.out.println("HOBBY: " + hobbys);
		
	}

 

-@RequestParam 어노테이션을 사용

* hobby에서 파라미터가 없으면, 400오류(요청 방식 처리가 잘못된 경우)가 뜬다.
해결하기 위해 required = false, defaultValue="" 를 추가한다. 

@RequestParam이 기본적으로 값이 있어야 된다고 설정되어 있기 때문이다. 

 

3) 커맨드 객체를 통한 파라미터 처리. -> 계속 이 방법을 사용!

@PostMapping("/join")
	public void register(UserVO user) {
		
		System.out.println("ID: " + user.getUserId());
		System.out.println("PW: " + user.getUserPw());
		System.out.println("NAME: " + user.getUserName());
		System.out.println("HOBBY: " + user.getHobby());
	}

 

매개값을 VO 객체를 받아온다. 가장 편한 방법. 

커맨드 객체가 파라미터 변수명 체크, 실제 userVO 필드명 체크, setter를 불러서 값을 다 넣는다. 
커맨드 객체가 알아서 해준다는 점. 

 

 

***** POST 방식 인코딩 *****
JSP 에서 POST 요청을 보내면 request.setCharaterEncoding("utf-8")을 해서 인코딩 방식을 바꿔서, 글자가 꺠지는걸 막아준다. 하지만 java class로 보낼때 사용하지 못하기 때문에, 설정을 변경 해준다. 

GET / POST 모든 요청을 UTF-8로 인코딩 변경하도록 한다. 

 

<!-- 한글 인코딩 필터 설정(톰캣 내부의 한글처리) -->
   <filter>
       <filter-name>encodingFilter</filter-name>
       <filter-class>
            org.springframework.web.filter.CharacterEncodingFilter
         </filter-class>
       <init-param>
         <param-name>encoding</param-name>
         <param-value>UTF-8</param-value>
       </init-param>
       <init-param>
         <param-name>forceEncoding</param-name>
         <param-value>true</param-value>
       </init-param>
    </filter>
    <!-- 위에 지정한  encodingFilter이름을 모든 패턴에 적용-->
    <filter-mapping>
       <filter-name>encodingFilter</filter-name>
       <url-pattern>/*</url-pattern>
    </filter-mapping>

 

이 코드를 web.xml 파일에 추가한다. <web-app> 내부에 넣어야 한다. 

728x90