Servlet - 1

김민석·2021년 1월 22일
0

웹 프로그래밍 - be

목록 보기
2/6
post-custom-banner

웹을 개발할 때 서블릿을 직접 써서 개발하는 것은 아니다. 보통 조금 더 편하게 사용할 수 있도록 도와주는 다양한 프레임워크를 사용하여 개발하는 경우가 많은데, 이 프레임워크들 역시 서블릿 없이는 동작할 수 없기 때문에 서블릿의 기본적인 작성법이나 서블릿의 라이프 사이클을 이해하고 있다면 웹의 동작을 이해하는데 도움이 된다.

1. 서블릿 작성 방법

서블릿의 작성 방법은 두가지로 나뉜다. 3.0버전 이상에서 사용하는 방법과 3.0버전 미만에서 사용하는 방법이다.
servlet 3.0 spec 이상에서 사용하는 방법
web.xml을 사용하지 않는다.
어노테이션(annotation)을 사용한다.
servlet 3.0 spec 미만에서 사용하는 방법
서블릿을 등록할 때 web.xml 파일에 등록한다.

2. 3.0 이상에서 서블릿 작성(예제)

학습 목표
1부터 10까지 출력해 주는 서블릿을 작성해 본다.
실제 요청할 때 사용하는 url은 http://localhost:8080/exam31/ten 으로 되도록 한다.
3.1 버전에서 사용하는 방법을 배울 것이다.

실행하기

그림과 같이 exam31 프로젝트를 생성해 주는데, 이 때 dynamic web module version을 3.1로 해 준다.


그리고 나서 서블릿을 생성해 주는데, url의 형식을 맞춰주기 위해 URL mappings에서 그림과 같이 수정해 준다.

생성된 코드를 보면 다음과 같이 어노테이션으로 서블릿이 생성된 것을 확인할 수 있다.

doGet 메서드의 파라메터를 보면 request부분과 response부분이 있는데, 응답을 통해 출력을 할 것이기 때문에 response 객체를 사용한다. 응답을 위해서 컨텐츠를 이미지로 할지, 다른것으로 할 지 알려줘야 응답이 가능하다. 즉 setContetnType을 통해 컨텐츠를 설정해 준다. 실습에서는 text를 보낼 것인데, 이 text는 html이다 임을 알려주고, UTF-8로 해석할 것임을 알려준다.

response의 getWriter는 printWriter 객체를 리턴하기 때문에 printWriter 변수를 설정후 할당해 준다.

실행을 해 보면 아래와 같은 결과가 나온다. url이 잘 적용된 것을 확인할 수 있다.

어노테이션을 다음과 같이 바꾸면 실행 결과 url역시 아래 그림과 같이 바뀐다.

코드

package example;

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;

/**
 * Servlet implementation class TenServlet
 */
@WebServlet("/tten")
public class TenServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public TenServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.println("<h1>1-10출력</h1>");
		for(int i=1;i<=10;i++)
		{
			out.println(i + "<br>");
		}
		out.close();
	}

}

3. 3.0 미만에서 서블릿 작성(예제)

학습 목표
1부터 10까지 출력해 주는 서블릿을 작성해 본다.
실제 요청할 때 사용하는 url은 http://localhost:8080/exam31/ten 으로 되도록 한다.
2.5 버전에서 사용하는 방법을 배울 것이다.

실행하기
마찬가지로 프로젝트를 생성해 주는데 이번에는 dynamic web version을 2.5로 해 준다.

마찬가지로 서블릿을 생성해 주는데, URL mappings를 바꿔준다.

생성된 코드를 보면 아래와 같은데, 이전의 실습과는 달리 어노테이션이 사라진 것을 확인할 수 있다.

그리고 사라진 어노테이션 대신 web.xml을 확인해 볼 수 있다.

3.0 미만의 버전에서는 web.xml을 통해 서블릿을 설정해 준다. url 요청이 들어오면(url-pattern) servlet-mapping에서 찾아내고, servlet-name을 확인한다.(만약 찾아내지 못하면 404 에러가 출력된다.)

servlet에서 같은 servlet-name이 있는지 확인하고 실제로 실행시킬 서블릿을 찾아낸다.

실행시켜 보면 아래와 같은 url이 잘 적용된 것을 확인할 수 있다.

그림과 같이 url-pattern을 바꿔주면 url역시 바뀌는 것을 확인할 수 있다.

코드

<?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" id="WebApp_ID" 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>example.TenServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>TenServlet</servlet-name>
    <url-pattern>/TTen</url-pattern>
  </servlet-mapping>
</web-app>

출처 : 부스트코스 웹 프로그래밍(풀스택)
https://www.boostcourse.org/web316/lecture/254270

profile
김민석의 학습 정리 블로그
post-custom-banner

0개의 댓글