java,jsp,spring/JSP
Servlet
프루트
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();

-
- 요청이 오면, Servlet 클래스가 로딩되어 요청에 대한Servlet 객체가 생성
- 서버는 init() 메소드를 호출해서 Servlet 초기화
- service() 메소드를 호출해서 Servlet이 브라우저의 요청을 처리
- service() 메소드는 특정 HTTP 요청(GET, POST 등)을 처리하는 메서드(doGet(), doPost() 등)를 호출
- 서버는 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>");
}
}