spring boot 환경에서 서블릿 등록하고 사용해 보자
🤞 참고 )
servlet은 tomcat 같은 web application server(was)를 직접 설치하고, 그 위에 servlet 코드를 클래스 파일로 빌드해서 올린다음, tomcat server를 실행하면 된다. 하지만 이 과정은 매우 번거로움
spring boot는 tomcat server를 내장하고 있으므로, 톰캣 서버 설치 없이 편리하게 servlet 코드를 싱핼할 수 있다.
spring boot는 servlet을 직접 등록해서 사용할 수 있도록 @ServletComponentScan을 지원한다.
경로) main > java > hello > servlet1 ..> Servelt1.Application
package hello.servlet1;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@ServletComponentScan //서블릿 자동 등록
@SpringBootApplication
public class Servlet1Application {
public static void main(String[] args) {
SpringApplication.run(Servlet1Application.class, args);
}
}
처음으로 실제 동작하는 Servlet 코드를 등록
package hello.servlet1.basic;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/** 서블릿 애노테이션
* name : servlet 이름
* urlPatterns : URL Mapping
*/
@WebServlet(name = "HelloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
/**
* HTTP 요청을 통해 Mapping 된 URL이 호출되면 Servlet 컨테이너는 아래 메소드를 실행 한다
*/
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("HelloServlet.service");
System.out.println("request = " + request);
System.out.println("response = " + response);
String username = request.getParameter("username");
System.out.println("username = " + username);
response.setContentType("text/plain");
response.setCharacterEncoding("utf-8");
response.getWriter().write("hello" + username);
}
}
웹 브라우저 실행 : http://localhost:8080/hello?username=world
결과 : hello world
application.properties 에 다음 설정을 추가
logging.level.org.apache.coyote.http11=debug
서버를 재 시작하고, 재요청 해보면 서버가 받은 HTTP 요청 메세지를 출력하는 것을 확인할 수 있다.
🤞 참고)
운영서버에 이렇게 모든 요청 정보를 다 남기면 성능저하가 발생할 수 있다. 개발 단계에서만 적용하자