프루트 2022. 8. 10. 20:15

Servlet

  • 동작 원리

작성 방법

public class HelloWorld extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOExcption, ServletException {}
}

  • GET 방식 : 255자 이하 -> 보안에 취약, 주소에 id,pw가 보임
<form method = “get” action = “servlet/Method”> <input type = “submit” value = “get 방식으로 호출”> </form>
  • POST 방식 : 255자 이상
<form method = “post” action = “servlet/Method”> <input type = “submit” value = “post 방식으로 호출”> </form>

  • 응답 방식
resp.setContentType(”text/html;charset=euc-kr”);
  • 출력 통로
PrintWriter out = resp.getWriter(); out.println(”<html>”); out.close();

    1. 요청이 오면, Servlet 클래스가 로딩되어 요청에 대한Servlet 객체가 생성
    2. 서버는 init() 메소드를 호출해서 Servlet  초기화
    3. service() 메소드를 호출해서 Servlet이 브라우저의 요청을 처리
    4. service() 메소드는 특정 HTTP 요청(GET, POST 등)을 처리하는 메서드(doGet(), doPost() 등)를 호출
    5. 서버는 destroy() 메소드를 호출하여 Servlet을 제거라이프 사이클
public class LifeCycle extends HttpServlet {
	int initCount=1;
	int serviceCount=1;
	int destroyCount=1;
	
	public void init(ServletConfig config) throws ServletException {
		System.out.println("init 메소드는 첫 요쳥만 호출됨 : "+ initCount++);
	}
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("service 메소드는 요쳥때마다 호출됨 : "+ serviceCount++);
	}
	public void destroy() {
		System.out.println("destroy 메소드는 톰캣 종료될때만 호출됨 : "+ destroyCount++);
	}
}

  • 페이지의 한글 처리
    • UTF-8 : 조합형 방식의 문자 집합(Character Set), 한글을 3바이트로 인식, 유니코드 인코딩 방식
    • EUC-KR : 완성형 인코딩 방식, 한글을 2바이트로 사용하는 문자 집합, 한글을 사용하는 곳에서만 문자가 제대로 보임
resp.setContentType("text/html;charset=euc-kr");
  • 폼 태그의 get/post 방식

  • 쿼리 스트링

         - 한글 처리 : 인코딩, 디코딩

req.setCharacterEncoding(”euc-kr”);
  • request 객체의 파라미터 관련 메소드
getParameter(String name) : 단어 1개
getParameterValues(String name) : 여러 단어

 

[예시 코드 - html]

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form method="get" action="QueryString">
		아 이 디 : <input type="text" name="id" size="20"><br>
		비밀번호 : <input type="password" name="pw" size="20"><br>
		회원이름 : <input type="text" name="name" size="20"><br>
		회원구분 : <input type="radio" name="class" value="일반회원">일반회원
				<input type="radio" name="class" value="교수님">교수님<br>
		전화번호 : <select name="phone1">
					<option value="010">010</option>				
					<option value="011">011</option>				
					<option value="016">016</option>				
					<option value="017" selected>017</option>				
					<option value="018">018</option>				
					<option value="019">019</option>
				</select>
				-
				<input type="text" name="phone2" size="4" maxlength="4">
				-
				<input type="text" name="phone3" size="4" maxlength="4"><br>
				<input type="submit" value="전송">
	</form>
</body>
</html>

[예시 코드 - servlet]

import java.io.IOException;
import java.io.PrintWriter;

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

@WebServlet("/QueryString")
public class QueryString extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// request.setCharacterEncoding("UTF-8"); 한글 글자가 깨질 때 
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		String id="",name="", vclass="",phone1="",phone2="",phone3="";
		id = request.getParameter("id");
		name = request.getParameter("name");
		vclass = request.getParameter("class");
		phone1 = request.getParameter("phone1");
		phone2 = request.getParameter("phone2");
		phone3 = request.getParameter("phone3");
		out.println("<html><head></head><body>");
		out.println("당신이 입력한 정보(get 방식)입니다.<br> 아 이 디 : <b>"); 	out.println(id);
		out.println("</b><br> 이름 : <b>"); out.println(name);
		out.println("</b><br> 구분 : <b>"); out.println(vclass);
		out.println("</b><br> 전화번호 : <b>"); out.println(phone1);
		out.println("-"); out.println(phone2);
		out.println("-"); out.println(phone3);
		out.println("</b><br><a href='javascript:history.go(-1)'>다시</a>");
		out.println("</body></html>");
	}
}