Servlet [02] html, get, post

totwo·2024년 7월 10일

JSP/Servlet/JSTL

목록 보기
2/15
post-thumbnail

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);	
	}
}

Get 방식 (QueryString)

: 'URL 뒤'에 데이터를 담아서 전달하는 방식
전달하고싶은서버URL?name1=value1&name2=value2
&(n%)

  • 장점 : 데이터가 한눈에 보인다
    post에 비해 속도 조금 더 빠르다
    검색결과가 필요할 때, 공유할 때 사용
  • 단점 : 보약에 취약하다
    데이터 전송양의 한계가 있다 (약 1024byte)
<!-- html -->
<body> 
	<form action="Ex04GetPost" method="get">
		<input type="text" name="text">
		<input type="submit">
	</form> 
</body>


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

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

console 창에 입력받은 '수박' 출력

Post 방식

: 데이터를 '패킷 바디'에 담아서 보내는 방식

  • 장점 : 많은 양의 데이터를 보낼 수 있다.
    데이터가 노출되지 않는다 (get보다 보안에 강력)
 <!-- 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에 담겨 이동한다. 더 많은 양의 데이터를 보낼 수 있다.
profile
Hello, World!

0개의 댓글