본문 바로가기

Tech/BoostCourse - WEB

[부스트코스] Servlet 작성 방법

사실 프로젝트에서 웹을 개발할 때 서블릿을 직접 써서 개발하지는 않는다.

조금 더 편하게 사용할 수 있게 도와주는 다양한 프레임워크를 사용해서 개발하는 경우가 많다.

하지만, 그 프레임워크들도 서블릿이 없이는 동작할 수 없기 때문에 서블릿의 기본적인 작성법이나, 서블릿의 라이프 사이클을 이해하고 있다면 웹의 동작을 이해하는 데 많은 도움이 될 것이다.

 

* 프레임워크란?(라이브러리랑 뭐가 다르지?) Click! 

 

 

Servlet 작성 방법은 버전에 따라 2가지로 나뉜다.

1. Servlet 3.0 spec 이상에서 사용하는 방법

- web.xml 파일을 사용하지 않음

- 자바 어노테이션(annotaion)을 사용

 

@WebServlet("/ten")
public class TenServlet extends HttpServlet {
	...
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		out.print("<h1>1부터 10까지 출력합니다.<h1>");
		for(int i = 1; i<=10; i++) {
			out.print(i+"<br>");
		}
		out.close();
	}
}

 

코드를 하나하나 뜯어서 살펴보도록 하자

 

  • @WebServlet("/ten") : web.xml의 기능을 대신하는 자바 어노테이션이다. 어노테이션은 클래스 혹은 메서드 상단에 붙여서 사용한다. 이 때 "/ten"은 웹 서버를 실행했을 때 매핑되는 url 경로를 의미한다. 실습할 때 http://localhost:8080/ten 경로로 들어가면 이 안에서 구현한 결과를 브라우저에 보여준다.
  • doGet(HttpServletRequest request, HttpServletResponse response) : Get 요청에 대한 응답을 해주는 메소드이다. 서블릿은 동적으로 응답 결과를 만든다. 동적으로 만들어 낸다는 것은 요청이 들어왔을 때, 서블릿이 실행되면서 응답할 코드를 만들어내고 이렇게 만들어진 코드를 넘겨주는 것이다. 이 메서드의 파라미터의 request는 요청 데이터가 담겨 있고, response에는 요청에 대한 응답 데이터를 넣어 보낸다. 
  • response.setContentType("text/html;charset=utf-8"); : 응답 데이터의 타입을 지정하는 부분이다. 여기서는 text/html 형태로 타입을 지정하고 utf-8을 지정해줌으로써 한글이 인식되도록 한다.
  • PrintWriter out = response.getWriter(); : getWriter()를 수행하면 PrintWriter라는 객체를 리턴 받을 수 있는데 이 객체로 브라우저에 출력할 내용 입력할 수 있다.

 

2. Servlet 3.0 spec 미만에서 사용하는 방법

- Servlet을 등록할 때 web.xml 파일에 등록

 

<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
version="2.5">
    <display-name>exam25</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
    <servlet>
        <description></description>
        <display-name>TenServlet</display-name>
        <servlet-name>TenServlet</servlet-name>
        <servlet-class>exam.TenServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>TenServlet</servlet-name>
        <url-pattern>/ten</url-pattern>
    </servlet-mapping>
</web-app>

 

Servlet클래스를 살펴보면 3.0버전과 다르게 어노테이션이 없는 것을 확인할 수 있다.

대신 web.xml에 <servlet>태그 이하의 내용이 추가되었다.

 

  • <url-pattern>/ten<url-pattern> : 매핑할 url을 명시. 이 태그안에 없는 url을 요청시에 404에러가 발생한다.
  • (servlet-mapping 내 )<servlet-name>TenServlet</servlet-name> : <servlet>태그 안에서 같은 serlvet-name을 찾아 실제 실행시킬 서블릿을 <serlvet0calass>에서 찾아 실행시킨다.

3.0버전에서는 이러한 매핑 기능을 어노테이션이 해준다.

 

 

결과 화면은 다음과 같다.

 

 

[부스트코스 관련 강의 링크]

Servlet 작성 방법 - https://www.edwith.org/boostcourse-web/lecture/16687/

 

반응형