본문 바로가기
Java/Servlet & JSP

JSP) GET방식

by 박채니 2022. 6. 15.

안녕하세요, 코린이의 코딩 학습기 채니 입니다.

 

개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.


GET 방식

 

HTML 코드 (src - main - webapp 하위에 위치!)

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>개인 취향 테스트</title>
</head>
<body>
	<h2>개인 취향 테스트(GET)</h2>
	당신의 취향을 테스트 합니다.<br/>
	데이터 입력후 확인 버튼을 누르세요<br/>
	
	<form name="personFrm" action="/web2/testPerson1.do" method="get"> 
	 <ul style="list-style: none; line-height: 200%;">
		<li>이름은? 
			<input type="text" name="name" size="10" required/>
		</li>
		<li>좋아하는 색?
			<input type="radio" id="red" name="color" value="빨강" required/><label for="red">빨강</label>
			<input type="radio" id="blue" name="color" value="파랑" /><label for="blue">파랑</label>
			<input type="radio" id="yellow" name="color" value="노랑" /><label for="yellow">노랑</label>
			<input type="radio" id="green" name="color" value="초록" /><label for="green">초록</label>
		</li>
		<li>좋아하는 동물은?
			<select name="animal">
				<option value="강아지">강아지</option>
				<option value="고양이">고양이</option>
				<option value="병아리">병아리</option>
			</select>	
		</li>
		<li>좋아하는 음식?(모두 고르세요)
			<input type="checkbox" name="food" id="food1" value="짜장면" /><label for="food1">짜장면</label>
			<input type="checkbox" name="food" id="food2" value="짬봉" /><label for="food2">짬봉</label>
			<input type="checkbox" name="food" id="food3" value="탕수육" /><label for="food3">탕수육</label>
			<input type="checkbox" name="food" id="food4" value="양장피" /><label for="food4">양장피</label>
			<input type="checkbox" name="food" id="food5" value="팔보채" /><label for="food5">팔보채</label> 
		</li>
		<li>
			<br/>
			<input type="submit" id="btnOK" value="확인"  />&nbsp;&nbsp; 
			<input type="reset"  value="취소" />
		</li>
		
	 </ul>
	
	</form>
</body>
</html>

action = '/web2/testPerson1.do'

/web2/testPerson1.do에 사용자 입력 값들을 제출해줄 겁니다.

 

폼을 제출해보겠습니다.

/web2/testPerson1.do가 존재하지 않기 때문에 찾을 수 없다는 404 오류가 발생하였습니다.

https://www.w3schools.com/tags/ref_httpmessages.asp

 

HTTP Messages

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

개발도구 - 네트워크에서 확인해보면, 전송은 잘 된 것으로 확인됩니다.


웹 요청을 처리하기 위한 Servlet 생성하기

 

Servlet

- 웹 요청을 처리할 수 있는 자바 클래스

- 웹 요청 처리 기능이 있는 HttpServlet 클래스를 상속해서 servlet 작성

- 요청 방식에 따라 doGet, doPost 오버라이드

 

package com.ce.web;

import javax.servlet.http.HttpServlet;

public class TestPersonServlet1 extends HttpServlet{
	
}

HttpServlet을 상속하여 servlet을 작성할 것인데,

HttpServlet은 Server Runtime(Tomcat)에서 제공해주는 servlet-api.jar 하위에 존재합니다.

 

GET 방식으로 요청하였으므로, doGet 메소드를 오버라이드하여 사용하겠습니다.

 

doGet()

- Get 방식 요청 시 처리 코드

- HttpServletRequest : 요청 관련 정보를 가진 객체

- HttpServletResponse : 응답 처리 관련 정보를 가진 객체

 

① 요청 인코딩 처리 (Get 방식은 생략 가능)
setCharacterEncoding()

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) 
	throws ServletException, IOException {
    	// 1. 요청 인코딩 처리(GET 방식은 생략 가능)
    	request.setCharacterEncoding("UTF-8");
}

 

② 사용자 입력 값 처리 (사용자 입력 값은 모두 문자열)

getParameter()

getParameterValues() - 복수개의 값 처리

// 2. 사용자 입력 값 처리
// ?name=박채니&color=노랑&animal=강아지&food=짬봉&food=탕수육
// 사용자 입력 값은 모두 문자열
String name = request.getParameter("name");
String color = request.getParameter("color");
String animal = request.getParameter("animal");
String[] foods = request.getParameterValues("food");

System.out.println("name = " + name);
System.out.println("color = " + color);
System.out.println("animal = " + animal);
System.out.println("foods = " + foods != null ? Arrays.toString(foods):null);

매개인자로 name값을 전달해주며, 대소문자를 구분하므로 올바르게 전달해줘야 합니다.

 

여기까지 했다면,

web2/testPerson1.do를 요청했을 때 testPersonServlet 클래스에서 처리할 수 있도록 해주겠습니다.

web.xml 에서 작성해줍니다.

 

배포서술자 (Deployment Descriptor)

- 특정 url로 요청했을 때, 특정 servlet이 처리할 수 있도록 연결 시켜줌

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>hello-web2</display-name>
  	
  <servlet>
  	<servlet-name>testPersonServvvlet1</servlet-name>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>testPersonServvvlet1</servlet-name>
  </servlet-mapping>

</web-app>

servlet-name으로 servlet과 servlet-mapping을 연결시켜줍니다.

 

  <servlet>
  	<servlet-name>testPersonServvvlet1</servlet-name>
  	<servlet-class>com.ce.web.TestPersonServlet1</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>testPersonServvvlet1</servlet-name>
  	<url-pattern>/testPerson1.do</url-pattern>
  </servlet-mapping>

/testPerons1.do 요청이 들어오면 servlet-name을 가진 servlet을 찾아 servlet-class에 해당 요청을 처리하도록 합니다.

 

서버를 껐다가 켜보고 브라우저를 확인해보겠습니다.

서버 구축에 성공하였습니다!

하지만, 404 오류가 사라진 것을 확인할 수 있지만, 브라우저 상에 확인 되는 것이 아무것도 없습니다.

요청이 잘 도착하긴 했지만, 응답으로 아무것도 작성해주지 않아서 그렇습니다.

 

③ 업무로직

생략

 

④ 응답 메세지 작성

// 4. 응답 메세지 작성
// 헤더 (설정정보)
response.setContentType("text/html; charset=utf-8");

// 바디 (html)
PrintWriter out = response.getWriter(); // 응답메세지를 대상으로 하는 문자 기반 출력 스트림
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='utf-8'>");
out.println("<title>개인취향검사결과</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>개인취향검사결과 " + request.getMethod() + "</h1>");
out.println("<p>이름 : " + name + "</p>");
out.println("<p>선호색상 : " + color + "</p>");
out.println("<p>선호동물 : " + animal + "</p>");
out.println("<p>선호중국음식 : " + (foods!=null?Arrays.toString(foods):"없음") + "</p>");
out.println("</body>");
out.println("</html>");

대상이 Http 응답 메세지인 출력 스트림을 response가 가지고 있으며, 이를 가져와 사용합니다.

생성한 HTML이 잘 반영된 것을 확인할 수 있습니다.

페이지 소스 보기

 

또한, 자바 코드를 수정하면 서버는 반드시 껐다가 다시 켜줘야 합니다.

매번 수정하고 서버를 껐다 켜는 것이 많이 번거로워서 이클립스가 tomcat reload 기능을 제공해줍니다.

이렇게 변경사항들을 즉시 서버에 반영해줍니다. (메소드 시그니처 혹은 클래스 생성 등에는 반영 안됨)

 

 

실제로 주고 받는 웹 통신 메세지