Servlet 이란?
자바 서블릿(Java Servlet)은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램을 만들 때 사용되는 웹 애플리케이션 프로그래밍 기술입니다.
기존의 웹페이지의 경우 정적인 페이지로 초기에 던져준 html 페이지에 대하여 별다른 변화가 필요하지 않았습니다. 하지만 점차 사용자의 요청에 따라 웹페이지에도 동적인 변화가 필요하게 되었고 이를 위해서 서블릿이 만들어지게 되었습니다.
서블릿은 JSP와 비슷한 점이 있지만, JSP가 HTML 문서 안에 Java 코드를 포함하고 있는 반면, 서블릿은 자바 코드 안에 HTML을 포함하고 있다는 차이점이 있습니다.
Servlet 주요 특징
- 클라이언트의 요청에 대해 동적으로 작동하는 웹 애플리케이션 컴포넌트
- HTML을 사용하여 응답
- JAVA의 스레드를 이용하여 동작
- MVC 패턴에서의 컨트롤러로 이용됨
- HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받음
- UDP보다 속도가 느림
- HTML 변경 시 Servlet을 재 컴파일해야 하는 단점 존재
Servlet 동작과정
- 사용자(클라이언트)가 URL을 통해 요청을 보내면 HTTP Request를 Servlet Conatiner로 전송
- HTTP Request를 전송받은 Servlet Container는 HttpServletRequest, HttpServletResponse 두 객체를 생성
- 요청한 URL을 분석하여 어느 서블릿에 대해 요청인지 탐색
- 서블릿에서 service메소드를 호출한 후 POST, GET여부에 따라 doGet() 또는 doPost()를 호출
- doGet() or doPost() 메소드는 동적 페이지를 생성한 후 HttpServletResponse객체에 응답
- 응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체를 소멸
Servlet 생명주기 (Life Cycle)
- init()
- 서블릿이 처음으로 요청될 때 초기화하는 메서드
- service()
- 요청을 받고 응답할때 필요한 메서드
- doGet(), doPost() 등이 있음
- destroy()
- 더이상 사용되지 않는 서블릿 클래스를 제거 하는 메서드
Servlet Parameter
Form 태그를 통하여 브라우저에서 서버로 통신을 보내게 되고, 서버에서 받은 데이터를 가공 후 응답하게 됩니다.
Parameter 전송 방식
GET | POST | |
특징 | 전송되는 데이터가 URL 뒤 Parameters 부분에서 Query String 으로 전송 입력 값이 적거나 데이터가 노출되어도 문제 없을 경우 사용 '?' 로 시작 |
URL과 별도로 전송 HTTP header 뒤 body에 입력 스트림 데이터로 전송 |
장점 | 간단한 데이터를 빠르게 전송 form tag뿐만 아니라 직접 URL에 입력하여 전송 가능 |
데이터에 제한 없음 최소한의 보안 유지 효과가 있음 |
단점 | 데이터 양에 제한이 있음 (location bar(URL+parameters)를 통해 전송할 수 있는 데이터의 사이즈는 2kb(2048byte)로 제한됨) |
전달 데이터의 양이 같을 경우 GET 방식보다 느림 (전송 패킷을 body에 데이터를 구성해야 되기 때문) |
예시 코드
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>SSAFY</title>
</head>
<body>
<form id="form-param" method="POST" action="">
<div>
<label for="username">이름 : </label>
<input type="text" id="username" name="username" placeholder="이름..." />
</div>
<div>
<label for="userpwd">비밀번호 : </label>
<input type="password" id="userpwd" name="userpwd" placeholder="비밀번호..." />
</div>
<div>
<button type="button" id="btn-send">전송</button>
</div>
</form>
<script>
document.querySelector("#btn-send").addEventListener("click",
function() {
if (!document.querySelector("#username").value) {
alert("이름 입력!!");
return;
} else if (!document.querySelector("#userpwd").value) {
alert("비밀번호 입력!!");
return;
} else {
let form = document.querySelector("#form-param");
form.setAttribute("action", "/basic/param");
form.submit();
}
});
</script>
</body>
</html>
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("/param")
public class ParameterTest extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// date get
String userName = request.getParameter("username");
String userPwd = request.getParameter("userpwd");
// response page
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println(" <body>");
out.println(" <h1>파라미터 테스트 결과</h1>");
out.println(" <p> id : " + userName +" pw : "+userPwd+"</p>");
out.println(" </body>");
out.println("</html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// date get
request.setCharacterEncoding("UTF-8"); // post의 경우 parameter를 받을 때 인코딩 설정이 필요
String userName = request.getParameter("username");
String userPwd = request.getParameter("userpwd");
// response page
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println(" <body>");
out.println(" <h1>파라미터 테스트 결과</h1>");
out.println(" <p> id : " + userName +" pw : "+userPwd+"</p>");
out.println(" </body>");
out.println("</html>");
}
}
'Java > JSP' 카테고리의 다른 글
EL (Expression language) (0) | 2023.09.21 |
---|---|
HTTP Cookie (0) | 2023.09.19 |
MVC (0) | 2023.09.19 |
JSP (Java Server Page) (0) | 2023.09.18 |