Servlet
API Summary
https://javaee.github.io/javaee-spec/javadocs/javax/servlet/Servlet.html
API 설명
모든 servlet 에 필요한 메서드를 정의하는 interface 입니다.
여기서 servlet 은 웹 서버 내에서 실행되는 작은 자바 프로그램입니다.
Servlet 은 보통 HTTP 를 통하여 웹 클라이언트로부터 요청을 받고 응답을 합니다.
해당 interface 를 구현하기 위해 GenericServlet 클래스를 extends 하여 작성할 수 있습니다.
Servlet을 초기화하고(init), 요청을 처리하고(service), 서버에서 Servlet 을 제거(destroy)하는 메서드를 정의합니다.
이를 라이프 사이클 메서드라고 합니다.
라이프 사이클 메서드 뿐만이 아니라,
해당 인터페이스는 Servlet 이 시작 정보를 가져오는 데 사용할 수 있는 getServletConfig 메서드와
Servlet 의 작성자, 버전 및 저작권 정보를 리턴하는 getServletInfo 메서드 또한 제공하고 있습니다.
implements Servlet
package servlet;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class ServletTest1 implements Servlet {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}
@Override
public void init(ServletConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
GenericServlet
API Summary
https://javaee.github.io/javaee-spec/javadocs/javax/servlet/GenericServlet.html
자바에서 Servlet 파일을 만들고 오른쪽 마우스 - [Source] - [Override/Implement Methods...] 를 클릭하면 해당 화면을 보실 수 있습니다. 필요한 API 를 오버라이딩 하고 싶을 때 사용할 수 있습니다.
API 설명
일반적인 프로토콜 독립적인 Servlet 을 정의합니다. (웹에서 사용할 HTTP Servlet 을 작성하려면 대신 HttpServlet 으로 상속)
GenericServlet 은 Servlet 및 ServletConfig 인터페이스를 구현합니다.
또한 Servlet 에 의해 상속될 수 있지만 HttpServlet 과 같은 상세 프로토콜 자식 클래스를 상속하는 것이 더 일반적입니다.
라이프 사이클 메서드인 init() 및 destroy() 와 ServletConfig interface 메서드(getServletParameter, getServletContext 등) 의 단순 버전을 제공합니다. 또한 ServletContext interface 메서드인 log() 도 구현합니다.
GenericServlet Class
package servlet;
import java.io.IOException;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class ServletTest1 extends GenericServlet {
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
HttpServlet
API Summary
https://javaee.github.io/javaee-spec/javadocs/javax/servlet/http/HttpServlet.html
API 설명
HTTP Servlet 에 유용한 하위 클래스를 만들기 위해서 제공된 클래스 입니다.
HttpServlet 을 상속받은 하위 클래스는 해당 메서드 중 적어도 하나 오버라이딩 해서 사용합니다.
- doGet
- doPost
- doPut
- doDelete
- init, destroy
- getServletInfo
service 메서드는 표준 HTTP 요청 유형에 대한 핸들러 이므로, 딱히 메서드를 재정의할 이유가 거의 없습니다.
이와 같은 이유로 doOptions(), doTrace() 메서드도 그렇습니다.
Servlet은 일반적으로 다중 스레드 서버에서 실행되므로 Servlet이 동시 요청을 처리하고 공유 리소스에 대한 접근을 동기화(synchronize) 해야한다는 점을 유의해야 합니다.
(공유 리소스에는 인스턴스 또는 클래스 변수와 같은 메모리 내 데이터 파일뿐만이 아니라 DB 연결 및 네트워크 연결과 같은 외부 객체가 포함됩니다.)
HttpServletRequest
API Summary
https://javaee.github.io/javaee-spec/javadocs/javax/servlet/http/HttpServletRequest.html
관련 API
package servlet;
import java.io.IOException;
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("/ServletTest")
public class ServletTest extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println(request);
request.setCharacterEncoding("utf-8");
System.out.println("getCharacterEncoding(): " + request.getCharacterEncoding());
System.out.println("getContextPath(): " + request.getContextPath());
System.out.println("getHeader(): " + request.getHeader(getServletName()));
System.out.println("getRequestURI(): " + request.getRequestURI());
System.out.println("getRequestURL(): " + request.getRequestURL());
System.out.println("getCookies(): " + request.getCookies());
System.out.println("getServletPath(): " + request.getServletPath());
System.out.println("getServletContext(): " + request.getServletContext());
System.out.println("getSession(): " + request.getSession());
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {}
}
HttpServletResponse
API Summary
https://javaee.github.io/javaee-spec/javadocs/index.html?help-doc.html
관련 API
package servlet;
import java.io.IOException;
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("/ServletResponseTest")
public class ServletResponseTest extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println(response);
response.setContentType("text/html; charset=utf-8");
System.out.println("getCharacterEncoding(): " + response.getCharacterEncoding());
System.out.println("getStatus(): " + response.getStatus());
System.out.println("getWriter(): " + response.getWriter());
System.out.println(response.getWriter().append("hi"));
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {}
}
HttpSession
API Summary
https://javaee.github.io/javaee-spec/javadocs/javax/servlet/http/HttpSession.html
API 설명
둘 이상의 페이지 요청 또는 웹 사이트 방문에서 사용자를 식별하고, 해당 사용자의 정보를 저장하는 방법을 제공합니다.
Servlet Container(WAS) 은 해당 인터페이스를 사용하여 클라이언트와 서버간의 세션을 생성합니다.
Session 은 특정 기간까지 지속될 수 있습니다. 이러한 세션은 일반적으로 사이트에 여러 번 방문할 수 있는 사용자에 해당합니다.
이러한 세션을 서버는 쿠키나 URL 을 다시 작성하는 등의 다양한 방법으로 유지될 수 있습니다.
세션 식별자, 생성 시간 및 마지막 접근 시간 등과 같은 데이터를 바인딩하여 사용자 정보를 유지할 수 있습니다.
ServletContext
API Summary
https://docs.oracle.com/javaee/7/api/javax/servlet/ServletContext.html
API 설명
예를 들어, 파일의 MIME 유형을 가져오거나 요청을 발송할 때, 혹은 로그 파일을 쓰기 위하여 Servlet 이 해당 Servlet Container 와 통신하는 데 사용하는 메서드를 정의합니다.
JVM 당, 웹 애플리케이션 당 하나의 Context 가 있습니다.
이러한 Context 은 글로벌 정보를 공유하는 위치로 사용될 수 없습니다. (대신 DB와 같은 외부 리소스를 사용)
ServletContext 객체는 ServletConfig 객체 내에 포함 됩니다.
'🧶 𝗪𝗲𝗯 > Servlet' 카테고리의 다른 글
[Servlet] JSP 사용에서 MVC 패턴 (0) | 2022.10.04 |
---|---|
[Servlet] URL 매핑 (1) | 2022.10.04 |
[Servlet] forward, sendRedirect (1) | 2022.10.04 |
[Servlet] Life Cycle (1) | 2022.10.04 |