servlet 실행시 html 문서가 만들어짐
html의 위치는 [webapp]의 위치와 동일함.
그래서 img, 영상, 소리 등.. [webapp]에 넣으면 된다!
데이터를 전송하기 위한 3가지 조건
- action : 어디로 보낼 것인지에 대한 주소
- name : 데이터의 이름표를 붙여주는 것
- submit : 데이터를 보내기 위한 버튼
① webapp 폴더에 html 만들어주기
<!-- html -->
<body>
<form action="Ex01InputServlet">
<input type="text" name="text">
<input type="submit" value="전달">
</form>
</body>

② Servlet 만들기
Client가 전송한 데이터 text 가져오기
name = value 형식으로 전달된다. (parameter 방식)
// .java(Servlet)
@WebServlet("/Ex01InputServlet")
public class Ex01InputServlet extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String text = request.getParameter("text");
System.out.println(text);
}
}

[실습] table 태그를 활용하여 입력한 숫자에 따라 방 생성
<!-- html -->
<body>
<form action="Ex02MakeTable">
몇 개의 방을 만들어볼까요?
<input type="text" name="room">
<input type="submit" value="만들기">
</form>
</body>

// .java(Serlvet)
@WebServlet("/Ex02MakeTable")
public class Ex02MakeTable extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String room = request.getParameter("room");
Integer roomNum = Integer.parseInt(room);
PrintWriter out = response.getWriter();
out.println("<HTML><body>");
if(roomNum >= 1) {
out.println("<table border='1px solid black'><tr>");
for(int i = 1; i <= roomNum; i++) {
out.println("<td>"+i+"</td>");
}
out.println("</tr></table>");
}
out.println("</body></HTML>");
}
}


<!-- html -->
<body>
<form action="Ex03Join">
아이디 : <input type="text" name="id"><br>
비밀번호 : <input type="password" name="pw"><br>
성별 : 남자 <input type="radio" name="gender" value="남자">
여자 <input type="radio" name="gender" value="여자"><br>
<!-- radio, checkbox는 value 필수!! -->
취미 :
여행 <input type="checkbox" name="hobby" value="여행">
페스티벌 <input type="checkbox" name="hobby" value="페스티벌">
독서 <input type="checkbox" name="hobby" value="독서">
클라이밍 <input type="checkbox" name="hobby" value="클라이밍">
스카이다이빙 <input type="checkbox" name="hobby" value="스카이다이빙">
기타 <input type="checkbox" name="hobby" value="기타">
<br>
<input type="submit" value="회원가입">
<input type="reset" value="초기화">
</form>
</body>

// .java(Servlet)
@WebServlet("/Ex03Join")
public class Ex03Join extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 회원가입 데이터 콘솔창에 출력
String id = request.getParameter("id");
String pw = request.getParameter("pw");
String gender = request.getParameter("gender");
// 동일한 name으로 여러개의 값을 가져오는 방법
String[] hobby = request.getParameterValues("hobby");
System.out.println(id);
System.out.println(pw);
System.out.println(gender);
for(int i = 0; i < hobby.length; i++) {
System.out.println(hobby[i]);
}
}
}

// .java(Servlet)
@WebServlet("/Ex04GetPost")
public class Ex04GetPost extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// POST 방식의 인코딩
request.setCharacterEncoding("EUC-KR");
// get방식이나 post방식이나 넘어가는 데이터를 가져오는 코드는 변함이 없다.
String text = request.getParameter("text");
System.out.println(text);
}
}
[실습] html과 servlet을 연결하여 html에서 입력받은 값을 console 창에 출력해보자

// .java(Servlet)
@WebServlet("/Ex04GetPost")
public class Ex04GetPost extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// POST 방식의 인코딩
request.setCharacterEncoding("EUC-KR");
// get방식이나 post방식이나 넘어가는 데이터를 가져오는 코드는 변함이 없다.
String text = request.getParameter("text");
System.out.println(text);
}
}
: 'URL 뒤'에 데이터를 담아서 전달하는 방식
전달하고싶은서버URL?name1=value1&name2=value2
&(n%)
<!-- html -->
<body>
<form action="Ex04GetPost" method="get">
<input type="text" name="text">
<input type="submit">
</form>
</body>

'수박' 입력 후 제출 버튼 클릭

url뒤에 입력받은 데이터가 담긴다

console 창에 입력받은 '수박' 출력
: 데이터를 '패킷 바디'에 담아서 보내는 방식
<!-- html -->
<body>
<form action="Ex04GetPost" method="post">
<input type="text" name="text">
<input type="submit">
</form>
</body>

'수박' 입력 후 제출 버튼 클릭

get방식과 다르게 url 변화 없음.

console 창에 입력받은 '수박' 출력
TCP/IP
- 데이터를 쪼갠 것 : 패킷
- 패킷은 (header(정보), body)로 이루어짐.
- post 방식은 body에 담겨 이동한다. 더 많은 양의 데이터를 보낼 수 있다.