본문 바로가기

Java/서블릿

[Java] [Servlet] Servlet이란?

들어가기 전... 자바 웹 애플리케이션이란?

WAS에 설치(deploy)되어 동작하는 어플리케이션이다.

자바 웹 어플리케이션에는 HTML, CSS, 이미지, 자바로 작성된 클래스(Servlet도 포함됨, package, 인터페이스 등), 각종 설정 파일 등이 포함된다.

 

그래서, 다음과 같은 구조를 가지게 된다(다양한 파일들을 모아두는 것임)

 

실제 인텔리제이에서 많이 보는 폴더 구조가, 자바 웹 애플리케이션의 폴더 구조를 말하는 것이다.

여기에 다양한 파일들이 모여있고, 이것을 실행시켜 자바 웹 애플리케이션을 실행시키는 것이다.

기본 자바 프로젝트(gradle 선택) + Java의 Web Application Framework + Tomcat

 


1. Servlet 정의

  • 자바 웹 애플리케이션의 구조에서, 요청과 응답을 처리할 수 있는 Java 클래스
  • WAS( 예) tomcat)에서 동작하는 Java 클래스이다.
  • 웹 페이지를 구성하는 화면은 JSP나 tymleaf를 사용하고, 프로그래밍 부분을 서블릿으로 구현한다.

서블릿은 자바 클래스로, 웹 애플리케이션을 작성한 뒤 이후 웹 서버 안에 있는 웹 컨테이너에서 이것을 실행하고, 웹 컨테이너에서는 서블릿 인스턴스를 생성 후 서버에서 실행되다가 웹 브라우저에서 서버에 요청(Request)을 하면 요청에 맞는 동작을 수행하고 웹 브라우저에 HTTP형식으로 응답(Response)합니다. 

 

서블릿 컨테이너란?

서블릿 컨테이너란 말 그대로 서블릿을 담고 관리해주는 컨테이너입니다. 서블릿 컨테이너는 구현되어 있는 servlet 클래스의 규칙에 맞게 서블릿은 관리해주며 클라이언트에서 요청을 하면 컨테이너는 HttpServletRequest, HttpServletResponse 두 객체를 생성하며 post, get여부에 따라 동적인 페이지를 생성하여 응답을 보냅니다.

 

 

2. Servlet 코드 내용

인텔리제이에서 cmd+n 을 통해 새로운 Servlet을 만들면, 아래와 같은 구조를 보여준다.

 

만약, 스프링부트(내장 톰캣이 있다는 뜻)에서 servlet을 사용하는 경우, 서블릿을 빈으로 등록해야 인식이 되기 때문에, Application 코드 부분에 서블릿을 자동으로 등록해주는 @ServletComponentScan 을 추가해주어야 한다.

 

3. 서블릿 설정 파일(web.xml)

서블릿을 서블릿 컨테이너에 등록하고, URL과 매핑을 시켜주어야 하는데, 이것을 진행하는 곳이다.

요즘은, 어노테이션으로 가능하지만, web.xml 설정 파일로 하는 것이 기본임을 알자.

 

[서블릿 설정 파일에 적어줘야 할 내용]

  1. 서블릿 클래스를 등록하기
    • 서블릿을 참조할 때 사용할 이름
    • 등록할 서블릿 클래스의 Full Name
  2. 서블릿을 URL과 매핑하기
    • 어떤 URL로 요청이 들어왔을 때, 어떤 서블릿에 가도록 할 것인지 작성해야 한다.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="http://xmlns.jcp.org/xml/ns/javaee"
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
     version="3.1">
 
     <servlet> //서블릿 클래스를 서블릿으로 등록
           <servlet-name>myServlet</servlet-name> //해당 서블릿을 참조할 때 사용할 이름
           <servlet-class>controller.MyServlet</servlet-class> //서블릿으로 사용할 서블릿 클래스의 FullName
     </servlet>
 
     <servlet-mapping>
           <servlet-name>myServlet</servlet-name> //매핑할 서블릿의 이름
           <url-pattern>/myServlet</url-pattern> //매핑할 URL 패턴
     </servlet-mapping>
 
</web-app>

 

'Java > 서블릿' 카테고리의 다른 글

[Java] [Servlet] web.xml의 모든 것 (1)  (0) 2022.09.21
[Java] [Servlet] Servlet의 생명 주기  (0) 2022.09.16