리루
2. Servlet (써블릿) - 원시적인 코드로 확인 본문
1. 준비
- Maven : maven-archetype-webapp
- 톰켓
- Servlet dependency
https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api/4.0.1
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
* privided scope : 코딩하는 시점에는 사용할 수 있지만 프로젝트 패키징 할때는 프로젝트에서 빠짐(해당 의존성은 어디선가에서 제공됨---> 톰켓 컨테이너에서 제공됨)
2. 서블릿 생성
- Servelt 생성
package me.json;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class HelloServlet extends HttpServlet {
@Override
public void init() throws ServletException {
System.out.println("init");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet");
resp.getWriter().print("<html>");
resp.getWriter().print("<head>");
resp.getWriter().print("<body>");
resp.getWriter().print("<h1>Hello Servlet</h1>");
resp.getWriter().print("</body>");
resp.getWriter().print("</head>");
resp.getWriter().print("</html>");
}
@Override
public void destroy() {
System.out.println("destroy");
}
}
- webapp/WEB-INF/web.xml 설정
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!-- Register servlet -->
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>me.json.HelloServlet</servlet-class>
</servlet>
<!-- Mapping Servlet with url pattern -->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
3. 서블릿 실행
- 서블릿 독자적으로 실행할 수 있는 방법은 없다.
- 서블릿 컨테이너(톰켓)에 배포하는 식으로 실행을 해야한다.
- 우측 상단 Add confituration... -> Tomcet Server -> Local 선택
- Tomcat 설치 및 설치 폴더 내 *.sh 파일에 실행권한 부여(chmod +x ./bin/*.sh)
- Tomcat Delpoyment 설정에 war:exploded 추가
: 배포를 하는데 톰켓을 띄울 때 해당 애플리케이션을 war로 묶어서 배포하는 방법(:war)이 있고, war를 압축을 풀어버린 상태로 톰켓에 배포(:war:exploded)하는 방식이 있다.
- 해당 설정을 하면 application context가 설정이 되고, Server 탭에 앱이 떴을때의 기본 url로 설정된다.
- url 이 굉장히 길어서, Deployment/Application Context를 root(/)로 설정하기도 한다.
4. 마치며..
- Spring MVC가 이 httpServlet 기반으로 만들어 졌는데,
- 어떻게 애노테이션(@Controller, @RequestMapping)을 사용해서 요청을 처리 할 수 있나?
- 어떻게 뷰를 println으로 찍는게 아니라 thymeleaf 사용할 수 있나?
- 어떻게 web.xml 없이 Servlet Application을 띄울 수 있었나?
[참고] Infrean 백기선의 스프링 웹 MVC 기반으로 저같은 초보들이 알기 쉽도록 재구성 해보았습니다., (매우 유용하고 친절한 강의라고 생각합니다. 들으시면 기본적인 구조나 원래를 익히는데 도움이 되실 것 같습니다!! 20% 할인하는 기간도 간간히 있으니 잘 활용하세용~)
'#Spring' 카테고리의 다른 글
4. Servlet (써블릿) - Servlet Application에 Spring MVC 적용 (0) | 2020.02.02 |
---|---|
3. Servlet (써블릿) - 써블릿 리스터와 필터 (1) | 2020.02.02 |
1. Servlet (써블릿) - 기본 설명 (0) | 2020.02.02 |
Dispatcher Servlet의 동작원리 (0) | 2020.02.02 |
JPA Study (0) | 2019.05.19 |