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">축구
<input type="checkbox" name="hobby" value="reading">독서
<input type="checkbox" name="hobby" value="music">음악
<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">축구
<input type="checkbox" name="hobby" value="reading">독서
<input type="checkbox" name="hobby" value="music">음악
<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> 내부에 넣어야 한다.
'Backend > Spring & SpringBoot' 카테고리의 다른 글
[Spring boot] JPA vs Hibernate (0) | 2022.03.07 |
---|---|
[Spring Boot] Hibernate 의 동작 원리 및 특징과 사용 예시 (1) | 2022.03.05 |
[Spring Framework] 03_02. GET / POST 요청 메서드 매핑 (0) | 2020.08.18 |
[Spring Framework] 03_01. Spring Framework 설계 모델 (0) | 2020.08.18 |
[Spring Framework] 03. Spring 개발환경 구축 (0) | 2020.08.13 |