Servlet form 태그, Sevlet parameter, 한글깨짐처리

HTML form 태그

html의 form태그는 서버쪽으로 정보를 전달할 때 사용하는 태그이다.

1. input

  • 태그의 종류를 지정한다.

2. 속성(type, name, value)

  • type : 태그 종류 지정(ex. text, password, submit, checkbox, radio, reset)
속성 의미
text 일반적인 데이터를 입력하기 위해 ex) id
password 특수기호(*, ● 등)로 나타남 ex)비밀번호
submit form 내의 데이터를 전송할 때(속성 name은 안적어줌)
checkbox 다중선택
데이터값을 여러 개 전송해야할 때 ex)취미
radio 단일선택
여러 개의 데이터 값 중 한 개의 값만을 전송해야할 때 ex)성별
reset 다시 시작(속성 name은 안적어줌)
  • name : input 태그 이름(클라이언트에서 정한 이름을 서버에서 그대로 사용한다.)
  • value : name에 해당하는 값(ex. 체크박스 값, id 값 등)

2.1. text

1
2
이름 : <input type="text" name="name" size="10"><br/>
아이디 : <input type="text" name="id" size="10"><br/>

2.2. password

1
비밀번호 : <input type="password" name="pw" size="10"><br/>

2.3. checkbox

1
2
3
4
5
취미 : <input type="checkbox" name="hobby" value="read">독서
   	<input type="checkbox" name="hobby" value="cook">요리
   	<input type="checkbox" name="hobby" value="run">조깅
   	<input type="checkbox" name="hobby" value="swim">수영
   	<input type="checkbox" name="hobby" value="sleep">취침<br/>

2.4 radio

1
2
3
4
<input type="radio" name="major" value="kor">국어
<input type="radio" name="major" value="eng" checked="checked">영어
<input type="radio" name="major" value="mat">수학
<input type="radio" name="major" value="des">디자인<br/>

2.5. select

1
2
3
4
5
6
<select name="protocol">
 	<option value="http">http</option>
 	<option value="ftp" selected="selected">ftp</option>
 	<option value="smtp">smtp</option>
 	<option value="pop">pop</option>
</select>

3. form 태그

1
<form action="FormEx(요청하는 컴포넌트 이름)" method="post(요청을 처리하는 방식)">

요청을 처리하는 방식(5강 참고)

  • Get
    • URL에 정보를 실어서 보내기 때문에 보안에 약하다.
    • http://IP주소:port번호/컨텍스트/path/MemberJoin?id=”abcdefg”&name=”홍길동”
  • Post
    • head에 정보를 저장하기 때문에 보안에 강하다.
    • http://IP주소:port번호/컨텍스트/path/MemberJoin

Servlet Parameter

Form태그의 submit 버튼을 클릭하여 데이터를 서버로 전송하면 해당파일(Servlet)에서는 HttpServletRequest객체를 Parameter값을 얻을 수 있다.

메소드 의미
getParameter(name) 반환값으로 value 값을 준다. 이때 반환타입은 String
getParameterValues(name) 값이 여러 개일 때 반환한다.ex)체크박스
getParameterNames() 모든 이름들이 나온다.


한글처리

Tomcat 서버의 기본 문자 처리 방식은 IOS-8859-1방식이다. 이 방식은 한글을 지원하지 않는다.
따라서 개발자가 별도로 한글 인코딩을 하지 않으면 한글이 깨져보이는 현상이 있다.

  • Get 방식 server.xml 수정(URIEncoding=”EUC-KR” 추가해주기)
1
<connector URIEncoding="EUC-KR" port="8181" ......>
  • Post 방식 request.setCharacterEncoding() 메소드 이용
1
2
3
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	    request.setCharacterEncoding("EUC-KR");
}

관련 코드

formex.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>

  <form action="FormEx" method="post">
	이름 : <input type="text" name="name" size="10"><br/>
   	아이디 : <input type="text" name="id" size="10"><br/>
   	비밀번호 : <input type="password" name="pw" size="10"><br/>

   	취미 : <input type="checkbox" name="hobby" value="read">독서
   	<input type="checkbox" name="hobby" value="cook">요리
   	<input type="checkbox" name="hobby" value="run">조깅
   	<input type="checkbox" name="hobby" value="swim">수영
   	<input type="checkbox" name="hobby" value="sleep">취침<br/>

   	<input type="radio" name="major" value="kor">국어
   	<input type="radio" name="major" value="eng" checked="checked">영어
   	<input type="radio" name="major" value="mat">수학
   	<input type="radio" name="major" value="des">디자인<br/>

   	<select name="protocol">
   		<option value="http">http</option>
   		<option value="ftp" selected="selected">ftp</option>
   		<option value="smtp">smtp</option>
   		<option value="pop">pop</option>
   	</select><br/>

   	<input type="submit" value="전송"><input type="reset" value="초기화">
  </form>
</body>
</html>

FormEx.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package com.javalec.ex;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class FormEx
 */
@WebServlet("/FormEx")
public class FormEx extends HttpServlet {
	private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public FormEx() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("doGet");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	    System.out.println("doPost");

	    request.setCharacterEncoding("EUC-KR");

	    String name = request.getParameter("name");
	    String id = request.getParameter("id");
	    String pw = request.getParameter("pw");

	    String[] hobbys = request.getParameterValues("hobby");
	    String major = request.getParameter("major");
	    String protocol = request.getParameter("protocol");

	    response.setContentType("text/html; charset=EUC-KR");
	    PrintWriter writer = response.getWriter();

	    writer.println("<html><head></head><body>");
	    writer.println("이름 : "+name+"<br/>");
	    writer.println("아이디 : "+id+"<br/>");
	    writer.println("비밀번호 : "+pw+"<br/>");
	    writer.println("취미 : "+Arrays.toString(hobbys)+"<br/>");
	    writer.println("전공 : "+major+"<br/>");
	    writer.println("프로토콜 : "+protocol);
	    writer.println("</body></html>");

	    writer.close();
	}

}

입력

출력결과


출처
Seoul Wiz, 신입SW인력을 위한 실전 JSP Servlet 동영상과정, https://www.youtube.com/watch?v=APJAJeePl4g&list=PLYBmkgNU_x7Zj0nCzt5D0qV33C_rU1NK2