< POST 입력 방법 >
(jsp 말고 static html 쓰려면 외부설정.xml에 mvc schema로 resources 기본경로를 /static/ 으로 했으니 해당부분 감안하고 url 입력해야 html 문서 제대로 열림)
html
form action="controller에 맵핑된 url" method="post"
button type="submit"
input 입력값의 name 설정값이 controller의 매개변수가 된다
(매개변수명 바꿔주고 싶으면 @RequestParam 쓰면 됨)
@RequestMapping("reg")
@ResponseBody
public String reg(String title, String content) {
return String.format("title:%s<br>content:%s<br>" , title, content);
}
기본 사용법은 GET 방식과 같다
< POST 콤보박스 값 입력 >
<tr>
<th>카테고리</th>
<td class="text-align-left text-indent text-strong text-orange" colspan="3">
<select name="category">
<option value="1">카테고리1</option>
<option value="2">카테고리2</option>
<option value="3">카테고리3</option>
<option value="4">카테고리4</option>
</select>
</td>
</tr>
@RequestMapping("reg")
@ResponseBody
public String reg(String title, String content, String category) {
return String.format("title:%s<br>content:%s<br>category:%s<br>" , title, content, category);
}
>> option에 value 속성이 있으면 value 값이, 없으면 option 의 text 요소(카테고리1)가 전달된다
>> 범용적으로 value를 사용해 식별자를 부여하고 DB의 content list 를 받아오게 된다
< POST 체크박스와 라디오버튼 값 입력 >
-체크박스-
<tr>
<th>좋아하는 음식</th>
<td class="text-align-left text-indent text-strong text-orange" colspan="3">
<input type="checkbox" name="foods" value="1" id="ch1"><label for="ch1">자장면</label>
<input type="checkbox" name="foods" value="2" id="ch2"><label for="ch2">짬뽕</label>
<input type="checkbox" name="foods" value="3" id="ch3"><label for="ch3">볶음밥</label>
<input type="checkbox" name="foods" value="4" id="ch4"><label for="ch4">탕수육</label>
</td>
</tr>
@RequestMapping("reg")
@ResponseBody
public String reg(String title, String content, String category, String[] foods) {
System.out.println(category);
for(String food : foods)
System.out.println(food);
return String.format("title:%s<br>content:%s<br>category:%s<br>" , title, content, category);
}
>> name을 동일하게 주어 배열로 받을 수 있다
>> input의 value 값을 보낸다 (value 속성을 주지 않을 경우 on 이라는 문자열을 보냄)
>> 배열로 받고 for문을 돌렸는데 어떠한 값도 체크하지 않았을 경우 NullPointerException을 뱉어낸다
(물론 for 문을 돌리지 않으면 null 값이 들어있는 상태로 오류는 뱉어내지 않는다. 제어문으로 제어하자)
-라디오버튼-
<tr>
<th>가장 좋아하는 음식</th>
<td class="text-align-left text-indent text-strong text-orange" colspan="3">
<input type="radio" name="food" value="1" id="rd1"><label for="rd1">자장면</label>
<input type="radio" name="food" value="2" id="rd2"><label for="rd2">짬뽕</label>
<input type="radio" name="food" value="3" id="rd3"><label for="rd3">볶음밥</label>
<input type="radio" name="food" value="4" id="rd4"><label for="rd4">탕수육</label>
</td>
</tr>
>> radio 버튼은 name을 같게 하면 같은 name들 중 하나만 선택이 가능하고
>> name을 다르게 하면 각자 선택이 가능해진다 (2개 그룹으로 묶으면 2종류의 배타적 선택이 가능)
@RequestMapping("reg")
@ResponseBody
public String reg(String title, String content, String category, String[] foods, String food) {
// System.out.println(category);
// for(String f : foods)
// System.out.println(f);
System.out.println(food);
return String.format("title:%s<br>content:%s<br>category:%s<br>" , title, content, category);
}
>> input의 value 값을 보낸다 (value 속성을 주지 않을 경우 on 이라는 문자열을 보냄)
< POST 입력 한글 입력이 깨지는 문제 >
-한글이 전달되는 것을 서버에서 받지 못하는 문제
title:ã
ã´ã
ã
ã´ã
content:ì´ì¬ì
category:1
이런식으로 출력됨
servlet만을 사용할 때의 request.setCharacterEncoding("UTF-8"); 을 설정해 줘야 한다
일일히 코드에 삽입해 주는 방법, 톰캣 인코딩 설정을 변경하는 방법 등이 있지만
servlet 필터를 사용해 만드는 것이 가장 효율적이고 문제가 생기지 않는다
(서블렛 필터는 로그인 권한 부여 보안 등에도 유용하게 사용 가능함)
UTF-8 인코딩용 필터 클레스 만들기
package com.newlecture.web.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
@WebFilter("/*")
public class CharacterEncodingFilter implements Filter {
@Override
public void doFilter(ServletRequest request
, ServletResponse response
, FilterChain chain)
throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
}
}
web.xml에 필터 클레스 등록
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>com.newlecture.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>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
한글 입력이 잘 되어 나오는지 확인
'Development > Java' 카테고리의 다른 글
SpringMVC JdbcTemplate #14 (0) | 2022.09.11 |
---|---|
SpringMVC POST 파일 처리와 POST 맵핑, Redirection #13 (0) | 2022.09.03 |
SpringMVC 사용자 입력 방법 5가지와 QueryString 입력 방법 #11 (0) | 2022.09.02 |
@RestController, 한글 깨짐 문제 해결, JSON 출력하기 #10 (0) | 2022.09.01 |
Spring 문서출력 방법 4가지와 @ResponseBody #9 (0) | 2022.09.01 |