https://yellow-bean.tistory.com/2
[Java] 서블릿(Sevlet) 이란?
서블릿(Sevlet) 이란? Servlet 은 Java EE(Java Enterprise Edition) 사양의 일종으로 웹 어플리케이션의 일종으로 클라이언트가 요청을 하고 결과를 클라이언트에 응답하는 기술로 Java 로 구현된 프로그램 입
yellow-bean.tistory.com
이전 포스팅에서 Servlet의 개념에 대해 알아봤습니다.
오늘은 Servlet을 직접 구현 방법에 대해 알아볼게요.😊
1. Servlet 구현 과정
1️⃣ HttpServlet 클래스를 상속하여 구현하며, 어떤 요청 방식을 지원하는 Servlet인가에 따라 doGet() , doPost(), doPut(), doDelete등의 메서드를 적어도 한 개는 오버라이딩 해야합니다.
2️⃣ Servlet을 등록과 맵핑을 해야합니다. 서블릿 등록 방법으로는 web.xml 에 설정하거나 어노테이션으로 설정할 수 있습니다.
2. Servlet 등록 및 맵핑 하기
대부분의 웹 자원들은 파일의 확장자로 파일의 종류를 구분하지만 Servlet 의 경우에는 불가능합니다. Servlet은 자바 프로그램으로 구현되고 컴파일을 통해서 class라는 확장자로 실행 파일로 변하는데, 웹에서 class라는 확장자를 가지는 파일의 요청은 Servlet이전에 소개된 기술일 Applet에서 사용되기 때문에 Servlet을 등록하고 맵핑하는 과정이 필요합니다.
1️⃣ WEB-INF 폴더 내의 web.xml 디스크립터 파일에 작성
<servlet>
<servlet-name>HelloWorldServlet</servlet-name>
<servlet-class>mypkg.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorldServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
2️⃣ Servlet 3.0 부터 추가된 어노테이션 맵핑
- @WebServlet: Servlet 프로그램을 등록과 매핑을 정의한다.
- @WebInitParam: Servlet 프로그램에 전달할 초기 파라미터를 정의한다.
- @WebListener: 리스너를 정의한다.
- @WebFilter: 필터를 정의한다.
- @MultipartConfig: Servlet 프로그램에서 다중 파티션으로 전달되는 파일 업로드를 처리할 수 있음을 정의한다.
@WebServlet("/hello")
public class HelloServlet extends HttpServlet { ...... }
@WebServlet(urlPatterns = {"/hello1", "/hello2"})
public class Hello2Servlet extends HttpServlet { ...... }
@WebServlet(name = "HelloServletExample", urlPatterns = {"/hello"})
public class HelloServlet extends HttpServlet { ...... }
@WebServlet(
name = "HelloServletExample",
urlPatterns = {"/hello"},
initParams = {
@WebInitParam(name = "param1", value = "value1"),
@WebInitParam(name = "param2", value = "value2")}
)
public class HelloServlet extends HttpServlet { ...... }
3. Servlet 생명 주기
웹 클라이언트로 Servlet 수행 요청 -> Servlet 컨테이너는 요청 정보와 HttpServletRequest , HttpServletResponse 객체를 생성 -> Servlet 객체의 존재여부 검사 -> 요청된 Servlet이 없다면 Servlet 클래스를 로딩 -> Servlet의 객체의 doGet() , doPost() 메소드 실행 -> 생성된 Servlet 객체는 서버 종료 혹은 웹 어플리케이션이 리로드될 때까지 객체 상태를 유지 -> Servlet 객체 메모리 해제시 destroy() 메서드 호출
package core;
import java.io.IOException;
import jakarta.servlet.ServletConfig;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@WebServlet("/flow")
public class FlowServlet extends HttpServlet {
public FlowServlet() {
super();
System.out.println("FlowServlet 객체 생성....");
}
public void init(ServletConfig config) throws ServletException {
System.out.println("init() 메서드 호출....");
}
public void destroy() { // application 안에 있는 servlet이 수정.종료 되었을 때 실행
System.out.println("destroy() 메서드 호출....");
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("service() 메서드 호출...."); //doGET 실행
}
}
IntelliJ 2023.1 버전을 사용하고 있어서 jakarta 를 사용하고 있습니다. 위 코드가 실행 안되시는 분은 javax로 변경하세요.
4. doGet(), doPost() 메소드 작성하기
@WebServlet("/myfirst")
public class MyFirstServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String userName = request.getParameter("name"); // queryString 받아오기
if (userName.isEmpty()) {
userName="";
}
out.print("<h2>"+userName+"님 반갑습니다.</h2>");
out.close();
}
@Override
protected void doPost(HttpServletRequest reques, HttpServletResponse response) throws ServletEXception, IOException {
response.setContentType("text/html; chartset=utf-8");
request.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
String content = request.getParameter("content"); //body내용 가져오기
out.println("<h2>"+content+"</h2>");
out.close();
}
}
'Programing > Java' 카테고리의 다른 글
[ JAVA 개발 환경 ] IntelliJ 2023.01 + Servlet,JSP 실행 환경 설정 (0) | 2023.08.30 |
---|---|
[Java] 서블릿(Sevlet) 이란? (0) | 2023.08.28 |