사실 프로젝트에서 웹을 개발할 때 서블릿을 직접 써서 개발하지는 않는다.
조금 더 편하게 사용할 수 있게 도와주는 다양한 프레임워크를 사용해서 개발하는 경우가 많다.
하지만, 그 프레임워크들도 서블릿이 없이는 동작할 수 없기 때문에 서블릿의 기본적인 작성법이나, 서블릿의 라이프 사이클을 이해하고 있다면 웹의 동작을 이해하는 데 많은 도움이 될 것이다.
* 프레임워크란?(라이브러리랑 뭐가 다르지?) 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/
반응형
'Tech > BoostCourse - WEB' 카테고리의 다른 글
[부스트코스] Request, Response 객체 이해하기 (0) | 2020.02.14 |
---|---|
[부스트코스] Servlet 라이프 싸이클 (0) | 2020.02.13 |
[부스트코스] Servlet 이란? (0) | 2020.02.13 |
[부스트코스] 톰캣(Tomcat) 다운로드 및 설치하기 (0) | 2020.02.11 |
[부스트코스] CSS (3/3) (0) | 2020.02.07 |