๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ปStudy/Spring

POST ์ž…๋ ฅ (ํ…์ŠคํŠธ๋ฐ•์Šค, ์ฝค๋ณด๋ฐ•์Šค, ์ฒดํฌ๋ฐ•์Šค, ๋ผ๋””์˜ค๋ฒ„ํŠผ) / ํ•„ํ„ฐ๋ฅผ ์ด์šฉํ•œ ํ•œ๊ธ€ ์ธ์ฝ”๋”ฉ

* admin์„ ์œ„ํ•œ ์ปจํŠธ๋กค๋Ÿฌ ์ถ”๊ฐ€

 

์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

 

 

NoticeController.java (com.newlecture.web.controller.admin.board)

@Controller("adminNoticeController")
@RequestMapping("/admin/board/notice/")
public class NoticeController {

	@RequestMapping("list")
	public String list() {
		
		return "";
	}
	
	@RequestMapping("reg")
	@ResponseBody //์ž…๋ ฅ๊ฐ’์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹ค์‹œ ๋ณด์—ฌ์ฃผ๊ธฐ๋งŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ
	public String reg() {
		
		return "reg";
	}
	
	@RequestMapping("edit")
	public String edit() {
		
		return "";
	}
	
	@RequestMapping("del")
	public String del() {
		
		return "";
	}
}

 

 

@Controller ์–ด๋…ธํ…Œ์ด์…˜์— ์ด๋ฆ„์„ ์ง€์ •ํ•œ ์ด์œ ๋Š”, ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์— ๊ฐ™์€ ์ด๋ฆ„์˜ NoticeController๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋นˆ์„ ์ƒ์„ฑํ•  ๋•Œ ์ด๋ฆ„์ด ๊ฒน์ณ์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

์‚ฌ์šฉ์ž์˜ ๊ฐ’์„ ์ž…๋ ฅ ๋ฐ›์„ reg ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  "http://localhost:8080/admin/board/notice/reg" url ์š”์ฒญ์„ ํ•˜๋ฉด ํ™”๋ฉด์— reg๊ฐ€ ๋œฌ๋‹ค. @ResponseBody ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด ์š”์ฒญํ•œ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜์˜€๋‹ค.

 

 

 

* POST ์ž…๋ ฅ ๋ฐฉ๋ฒ• - ํ…์ŠคํŠธ ๋ฐ•์Šค

 

์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ธ€์“ฐ๊ธฐ ํ™”๋ฉด์„ ์‹คํ–‰ํ•ด ๋ณด์ž.

 

 

 

html, css, image, js ๋“ฑ ์ •์  ํŒŒ์ผ์„ static ํด๋”์— ๋ชฐ์•„์„œ ๋„ฃ์–ด๋†“์•˜๋‹ค. ์‹คํ–‰ํ•  ๋•Œ๋Š” 

 

localhost:8080/static/admin/board/notice/reg.html์ด ์•„๋‹Œ

localhost:8080/admin/board/notice/reg.html์œผ๋กœ ์š”์ฒญํ•ด์•ผ ํ•œ๋‹ค.

 

๊ทธ ์ด์œ ๋Š” ๋งคํ•‘ ๋ฐฉ์‹์—์„œ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

servlet-context.xml

    <mvc:resources location="/static/" mapping="/**"></mvc:resources>

 

"/**"์œผ๋กœ ์š”์ฒญ์ด ์™”์„ ๋•Œ(mapping) "/static/" ๊ฒฝ๋กœ์—์„œ ์ฐพ์•„๋ณด๊ฒŒ ์ฒ˜๋ฆฌํ•˜์˜€๋‹ค(location). (์ •์  ํŒŒ์ผ ๋งคํ•‘ ํฌ์ŠคํŒ… ์ฐธ๊ณ )

 

 

 

"localhost:8080/static/admin/board/notice/reg.html" ์š”์ฒญ์„ ํ•˜๋ฉด ํ™”๋ฉด์— reg๊ฐ€ ์ถœ๋ ฅ๋˜๋Š”๋ฐ, NoticeContoller์—์„œ "/reg"๋ผ๋Š” url๋กœ ๋งคํ•‘์„ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

NoticeController.java

	@RequestMapping("reg")
	@ResponseBody
	public String reg() {
		return String.format("title:%s, content:%s<br>", title, content);
	}

 

 

reg.html ํŒŒ์ผ์˜ ์ด๋ฆ„์„ reg1.html์œผ๋กœ ์ˆ˜์ •ํ•œ ํ›„ ๋‹ค์‹œ ์‹คํ–‰ํ•œ๋‹ค.

 

 

reg1.html ํŽ˜์ด์ง€ ์‹คํ–‰

 

 

reg1.html

<form action="reg" method="post">
	<div class="margin-top first">
		<h3 class="hidden">๊ณต์ง€์‚ฌํ•ญ ์ž…๋ ฅ</h3>
		<table class="table">
			<tbody>
				<tr>
					<th>์ œ๋ชฉ</th>
					<td class="text-align-left text-indent text-strong text-orange" colspan="3">
						<input type="text" name="title" />
					</td>
				</tr>
				<tr>
					<th>์ฒจ๋ถ€ํŒŒ์ผ</th>
					<td colspan="3" class="text-align-left text-indent"><input type="file" name="file" /> </td>
				</tr>
				<tr class="content">
					<td colspan="4"><textarea class="content" name="content"></textarea></td>
				</tr>
				<tr>
					<td colspan="4" class="text-align-right"><input class="vertical-align" type="checkbox" id="open" name="open" value="true">
						<label for="open" class="margin-left">๋ฐ”๋กœ๊ณต๊ฐœ</label> 
					</td>
				</tr>
			</tbody>
		</table>
	</div>
	<div class="margin-top text-align-center">
		<input class="btn-text btn-default" type="submit" value="๋“ฑ๋ก" />
		<a class="btn-text btn-cancel" href="list.html">์ทจ์†Œ</a>
	</div>
</form>

 

 

form ํƒœ๊ทธ์˜ action ๊ฒฝ๋กœ๋Š” "reg"์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ๋‹ค. ์ œ๋ชฉ๊ณผ ๋‚ด์šฉ input์— ํ…์ŠคํŠธ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  submit ๋ฒ„ํŠผ(๋“ฑ๋ก)์„ ํด๋ฆญํ•˜๋ฉด ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ฐ›์•„ ๊ฐ’์„ ํ™”๋ฉด์— ์ถœ๋ ฅํ•œ๋‹ค.

 

 

form ํƒœ๊ทธ๋Š” action="reg"์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ๋Š”๋ฐ, submit ํด๋ฆญ ์‹œ admin/board/notice/reg1.html์™€ ๊ฐ™์€ ์œ„์น˜์—์„œ ์‹œ์ž‘ํ•ด์„œ admin/board/notice/reg์œผ๋กœ ๊ฒฝ๋กœ๋ฅผ ๋ฐ›๊ฒŒ ๋œ๋‹ค. <form action="/admin/board/notice/reg"...>์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

 

(๋งŒ์•ฝ action="admin/board/notice/reg" ์ด๋ผ๋ฉด http://localhost:8080/admin/board/notice/admin/board/notice/์ด ๋จ)

 

 

 

* POST ์ž…๋ ฅ ๋ฐฉ๋ฒ• - ์ฝค๋ณด ๋ฐ•์Šค

 

 

reg1.html

<form action="reg" method="post">
	<div class="margin-top first">
		<h3 class="hidden">๊ณต์ง€์‚ฌํ•ญ ์ž…๋ ฅ</h3>
		<table class="table">
			<tbody>
				<tr>
					<th>์ œ๋ชฉ</th>
					<td class="text-align-left text-indent text-strong text-orange" colspan="3">
						<input type="text" name="title" />
					</td>
				</tr>
				<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>
				<tr>
					<th>์ฒจ๋ถ€ํŒŒ์ผ</th>
					<td colspan="3" class="text-align-left text-indent"><input type="file" name="file" /> </td>
				</tr>
				<tr class="content">
					<td colspan="4"><textarea class="content" name="content"></textarea></td>
				</tr>
				<tr>
					<td colspan="4" class="text-align-right"><input class="vertical-align" type="checkbox" id="open" name="open" value="true">
						<label for="open" class="margin-left">๋ฐ”๋กœ๊ณต๊ฐœ</label> 
					</td>
				</tr>
			</tbody>
		</table>
	</div>
	<div class="margin-top text-align-center">
		<input class="btn-text btn-default" type="submit" value="๋“ฑ๋ก" />
		<a class="btn-text btn-cancel" href="list.html">์ทจ์†Œ</a>
	</div>
</form>

 

 

์ œ๋ชฉ ๋ฐ‘์— ์นดํ…Œ๊ณ ๋ฆฌ๋ผ๋Š” select ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

 

 

โ€ป ์ฐธ๊ณ 

์˜ต์…˜ ํƒœ๊ทธ์— value๊ฐ€ ์—†๋‹ค๋ฉด?

๋”๋ณด๊ธฐ

 (ex. <option>์นดํ…Œ๊ณ ๋ฆฌ1</option>)

 

ํ•ด๋‹น ์˜ต์…˜์„ ์„ ํƒํ•˜๊ณ  submitํ•˜๋ฉด ํ™”๋ฉด์—์„œ ํ•œ๊ธ€์ด ๊นจ์ ธ์„œ ์ถœ๋ ฅ๋œ๋‹ค. servlet-context.xml์—์„œ ๋ฉ”์‹œ์ง€ ์ปจ๋ฒ„ํ„ฐ ์„ค์ •์„ ํ†ตํ•ด @ResponseBody์˜ String ํ•œ๊ธ€ ์ธ์ฝ”๋”ฉ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ถœ๋ ฅํ•  ๋•Œ์˜ ๋ฌธ์ œ๋Š” ์•„๋‹ˆ๊ณ  ์ž…๋ ฅ๋ฐ›์„ ๋•Œ์˜ ์ธ์ฝ”๋”ฉ ๋ฌธ์ œ์ด๋‹ค. (@ResponseBody => ์ถœ๋ ฅ ๊ฐ’์— ๊ด€ํ•œ ์„ค์ •)

 

    <mvc:annotation-driven>
    	<mvc:message-converters> 
    	<!-- 
    	@ResponseBody๋กœ String ์ฒ˜๋ฆฌํ•  ๋•Œ ํ•œ๊ธ€ ์ฒ˜๋ฆฌ
    	๋งคํ•‘๋œ url์„ ์ฐพ์•„๊ฐ„ ํ›„ ๊ฐ’์„ ResponseBody ํƒ€์ž…์œผ๋กœ ๊ฐ’์„ ๋ฆฌํ„ดํ•  ๋•Œ, ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ’์ด ํ•œ๊ธ€์ด๋ผ๋ฉด ๊ฐ€๋กœ์ฑ„์„œ ํ•œ๊ธ€ ์„ค์ •.
    	์ถœ๋ ฅํ•  ๋•Œ ํ•œ๊ธ€์ด ๊นจ์ง€์ง€ ์•Š๊ฒŒ ํ•จ.
    	-->
    		<bean class="org.springframework.http.converter.StringHttpMessageConverter">
    			<property name="supportedMediaTypes">
    				<list>
    					<value>text/html;charset=UTF-8</value>
    				</list>
    			</property>
    		</bean>
    	</mvc:message-converters>
    </mvc:annotation-driven> 

 

 

 

NoticeController.java

	@RequestMapping("reg")
	@ResponseBody
	public String reg(String title, String content, String category) {
		
		return String.format("title:%s, content:%s<br>category:%s", title, content, category);
	}

 

category ๊ฐ’๋„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋„๋ก ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋ฉด ํ™”๋ฉด์— ์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ option์˜ value ๊ฐ’์œผ๋กœ ์ถœ๋ ฅ๋œ๋‹ค.

 

 

 

* POST ์ž…๋ ฅ ๋ฐฉ๋ฒ• - ์ฒดํฌ ๋ฐ•์Šค

 

 

reg1.html

<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>

 

reg1.html์— ์ฒดํฌ๋ฐ•์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  name="foods"์œผ๋กœ ์„ค์ •ํ•œ๋‹ค.

 

 

 

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž…๋ ฅํ•˜๊ณ  ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ์—ฐ ์ƒํƒœ์—์„œ ๋“ฑ๋ก ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ๋‹ค(submit).

 

 

 

Network ํƒญ์—์„œ reg์„ ํด๋ฆญํ•˜๋ฉด Form ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด ์ „์†ก๋˜๋Š” ๊ฐ’์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. foods์˜ ๊ฐ’์œผ๋กœ๋Š” ์งœ์žฅ๋ฉด๊ณผ ์งฌ๋ฝ•์˜ ๊ฐ’์ธ 1, 2๊ฐ€ ๊ฐ๊ฐ ๋ณด์—ฌ์ง„๋‹ค.

 

 

Form Data์˜ view source ํด๋ฆญ

 

view source๋ฅผ ํด๋ฆญํ•˜๋ฉด ์ด์™€ ๊ฐ™์ด ์š”์ฒญ url ๊ฒฝ๋กœ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. foods๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐ’์ด ์ „์†ก๋˜๋ฏ€๋กœ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ๋Š” ๋ฐฐ์—ด๋กœ ๋ฐ›์œผ๋ฉด ๋œ๋‹ค.

 

 

NoticeController.java

	@RequestMapping("reg")
	@ResponseBody //์ž…๋ ฅ๊ฐ’์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹ค์‹œ ๋ณด์—ฌ์ฃผ๊ธฐ๋งŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ
	public String reg(String title, String content, String category, String[] foods) {
		
		for(String f : foods) {
			System.out.println(f);
		}
		
		return String.format("title:%s, content:%s<br>category:%s", title, content, category);
	}

 

 

String[] foods, ์ฆ‰ ๋ฐฐ์—ด๋กœ ๋ฐ›๊ณ  ์ถœ๋ ฅํ•˜๋ฉด value ๊ฐ’์ด ์ž˜ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

* POST ์ž…๋ ฅ ๋ฐฉ๋ฒ• - ๋ผ๋””์˜ค ๋ฒ„ํŠผ

 

 

reg1.html

<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>

 

๋ผ๋””์˜ค ๋ฒ„ํŠผ์—์„œ name์„ ๋‹ค ๋‹ค๋ฅด๊ฒŒ ์„ ํƒํ•˜๋ฉด ์„œ๋กœ ๋‹ค๋ฅธ ํ•ญ๋ชฉ์˜ ๋ฒ„ํŠผ์œผ๋กœ ๊ฐ„์ฃผํ•˜์—ฌ ๋‹ค ๋ˆŒ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜๋งŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋ ค๋ฉด ์ „๋ถ€ name์„ food๋กœ ๊ฐ™๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค. 

 

 

NoticeController.java

	@RequestMapping("reg")
	@ResponseBody
	public String reg(String title, String content, String category, String[] foods, String food) {
		
		for(String f : foods) {
			System.out.println(f);
		}
		
		return String.format("title:%s, content:%s<br>category:%s, food:%s", title, content, category, food);
	}

 

์ปจํŠธ๋กค๋Ÿฌ์—์„œ value๋ฅผ String์œผ๋กœ ๋ฐ›์œผ๋ฉด ๋œ๋‹ค.

 

 

 

* ํ•œ๊ธ€ ์ž…๋ ฅ์ด ๊นจ์ง€๋Š” ๋ฌธ์ œ

 

 

 

 

form์—์„œ ํ•œ๊ธ€์„ ์ž…๋ ฅํ•ด์„œ submit ํ•˜๋ฉด ์œ„์™€ ๊ฐ™์ด ๊นจ์ ธ์„œ ๋‚˜ํƒ€๋‚˜๊ฒŒ ๋œ๋‹ค.

 

 

 

์‚ฌ์šฉ์ž๊ฐ€ ํ•œ๊ธ€์„ ์ž…๋ ฅํ•ด์„œ ์„œ๋ฒ„์— ์ „๋‹ฌํ•˜๊ณ ์ž ํ•  ๋•Œ, ํ•œ๊ธ€์ด ์ง์ ‘ ์ „์†ก๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•œ๊ธ€์„ ๋Œ€์‹ ํ•˜๋Š” ์‹๋ณ„์ž(๋ฌธ์ž ์ฝ”๋“œ)๊ฐ€ ์ „๋‹ฌ๋œ๋‹ค. 

 

UTF-8๋กœ 6๋ฐ”์ดํŠธ์˜ ํ•œ๊ธ€์„ ์ „๋‹ฌํ•˜๋Š” ์ƒํ™ฉ์„ ์ƒ๊ฐํ•ด ๋ณด์ž. POST ๋ฐฉ์‹์œผ๋กœ ์œ„์ฒ˜๋Ÿผ URL Encoding์ด ์ „๋‹ฌ๋  ๊ฒƒ์ด๋‹ค. ํ•œ๊ธ€ ํ•˜๋‚˜๋Š” 2๋ฐ”์ดํŠธ๋ฅผ ์†Œ๋น„ํ•œ๋‹ค. (๊ทธ๋ฆผ์—์„œ ํŒŒ๋ž€์ƒ‰ ๋ฐ•์Šค ํ•˜๋‚˜๊ฐ€ 1๋ฐ”์ดํŠธ)

 

์ด๋•Œ ์„œ๋ฒ„์ชฝ์˜ ์ธ์ฝ”๋”ฉ์— ๋”ฐ๋ผ์„œ ์ „๋‹ฌ๋ฐ›์€ ๊ฐ’์˜ ํ•ด์„์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค. ํ†ฐ์บฃ์˜ ๊ธฐ๋ณธ ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์€ ISO-8859-1์ด๋ฏ€๋กœ 1๋ฐ”์ดํŠธ์”ฉ ๋Š์–ด์„œ ์ฝ๊ฒŒ ๋œ๋‹ค. ํ˜น์€ ๋‹ค๋ฅธ 2๋ฐ”์ดํŠธ์”ฉ ์ฝ๋Š” ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ๋‹ค๋ฅธ ๋ฌธ์ž ์ฝ”๋“œ๋กœ ํ•ด์„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ’์ด ์ž˜๋ชป ํ•ด์„๋œ๋‹ค.

 

 

 

 

 

ํด๋ผ์ด์–ธํŠธ ์ชฝ์—์„œ ๋ณด๋‚ธ ๋ฐ์ดํ„ฐ๋ฅผ request๋ฅผ ํ†ตํ•ด ์ฝ์–ด์˜ค๋Š”๋ฐ ๊ทธ ๋•Œ request.setCharacterEncoding์„ ํ†ตํ•ด ์ธ์ฝ”๋”ฉ์„ "UTF-8"๋กœ ์ง€์ •ํ•ด ์ฃผ๋ฉด ํ•œ๊ธ€์ด ๊นจ์ง€๋Š” ๊ฒƒ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. (UTF-8๋กœ ์ฝ์–ด๋ผ, ๋ผ๋Š” ์„ค์ •)

 

๋ชจ๋“  ์„œ๋ธ”๋ฆฟ๋งˆ๋‹ค ์ผ์ผ์ด request.setCharacterEncoding ์„ค์ •์„ ํ•  ์ˆ˜๋„ ์žˆ๊ณ , <Connector URIEncoding="UTF-8"> ์ฒ˜๋Ÿผ ํ†ฐ์บฃ ์„ค์ •์„ ์ „๋ถ€ ๋ฐ”๊ฟ€ ์ˆ˜๋„ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ํ›„์ž์˜ ๋ฐฉ๋ฒ•์ฒ˜๋Ÿผ ํ†ฐ์บฃ ์ „์ฒด์˜ ์ธ์ฝ”๋”ฉ์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์€ ์œ„ํ—˜ ์š”์†Œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ธ”๋ฆฟ์—์„œ ์ธ์ฝ”๋”ฉ ์„ค์ •์„ ํ•ด์ฃผ๋Š” ํŽธ์ด ์ข‹๋‹ค. ์ด๋•Œ, ์ž…๋ ฅ์„ ๋ฐ›์„ ๋•Œ๋งˆ๋‹ค ์„œ๋ธ”๋ฆฟ์— ์ธ์ฝ”๋”ฉ ์„ค์ •์„ ํ•˜๋Š” ๊ฒƒ์€ ๋ฒˆ๊ฑฐ๋กญ๊ธฐ ๋•Œ๋ฌธ์— ํ•„ํ„ฐ๋ฅผ ์ด์šฉํ•œ๋‹ค.

 

 

 

 

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์— ๋กœ๋“œ๋œ ์„œ๋ธ”๋ฆฟ์— ์ธ์ฝ”๋”ฉ๊ณผ ๊ฐ™์€ ์‚ฌ์ „ ์ž‘์—…์„ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ํ•„ํ„ฐ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•„ํ„ฐ๋Š” ์š”์ฒญ๊ณผ ์„œ๋ธ”๋ฆฟ์˜ ์ค‘๊ฐ„ ์—ญํ• ์„ ํ•œ๋‹ค. ํ•„ํ„ฐ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ธ์ฝ”๋”ฉ ํ•„ํ„ฐ, ์‚ฌ์šฉ์ž ๊ถŒํ•œ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•„ํ„ฐ ๋“ฑ์ด ์žˆ๋‹ค. ํ•„ํ„ฐ๋Š” ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๊ณ  ์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” ํ•„ํ„ฐ๋ฅผ ๊ฐ„๋‹จํžˆ ์„ค์ •๋งŒ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

 

web.xml

<filter>
	<filter-name>charaterEncodingFilter</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>
<filter-mapping>
	<filter-name>charaterEncodingFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

 

 

web.xml์— ํ•„ํ„ฐ ์„ค์ •์„ ํ•˜๊ณ  ํ•œ๊ธ€ ๊ฐ’์„ ์ž…๋ ฅ, submit ํ•˜๋ฉด ํ•œ๊ธ€์ด ๊นจ์ง€์ง€ ์•Š๊ฒŒ ์ธ์ฝ”๋”ฉ ๋˜์—ˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.