오늘은 서블릿에 대해서 배워봄.
서블릿이란 웹이라는 환경을 통해서 실행되어지는 웹 서버 어플리케이션을 이루는 작은 하나의 단위라고 할 수 있다.
그러니까 그 작은 단위들이 모여서 하나의 웹 서버 어플리케이션을 이루는 것이다.
예를 들어서 사용자가 웹에서 http://kyu.com/home 이라는 URL로 REQUEST 했을 때, home이라는 URL을 매핑해서 특정 서블릿이 나오도록 할 수 있다.
서블릿을 이해하기위해 오늘은 WAS의 한 종류인 톰캣을 설치해서 다음 순서로 서블릿을 실행해봤다.
IDE없이 이 과정을 해보면, 일단 톰캣을 아무데나 압축을 풀어서 ./webapps/ROOT/WEB-INF/classes 경로로 들어가서 클래래스 파일을 넣어주면 된다. 그리고 WEB-INF에 있는 web.xml 파일에 추가한 서블릿의 매핑정보를 적어주면 된다.
좀더 자세히해보자면
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class Kyu extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
OutputStream os = response.getOutputStream();
PrintStream out = new PrintStream(os, true);
out.println("Hello World!");
}
}
이런식으로 HttpServlet을 extend 하고 service()를 오버라이딩한다. 파라미터로 Request, response를 넣어주고,
적절한 구현코드를 넣는다.
이걸 컴파일해서 WEB-INF/classes 에 넣고, web.xml은 다음과 같이 서블릿정보를 추가해준다.
<servlet>
<servlet-name>kyu</servlet-name>
<servlet-class>Kyu</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>kyu</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
web.xml에 서블릿정보를 추가안해주면, 정적페이지와 달리 작성한 클래스의 결과물에 접근을 할수없다.
톰캣 내에 WEB-INF는 외부에서 접속이 애초에 차단이 되어있다고 한다. 그래서 web.xml에 저런식으로 추가해줘야한다.
그러면 대충 짐작가듯이 url-pattern 대로 넣어주면 servlet-name과 일치하는 servlet을 찾아서 servlet-class에 명시된 클래스파일을 response하게 된다.
IDE 없이 걍 톰캣을 실행하려면 start.sh로 웹서버를 실행시켜서 확인하면 된다.
WAS의 특징에 대해 잘 나와있는거 같음. 서블릿에 대해서 이렇게 실습해보고 읽어보면 웹어플리케이션에 대해 좀더 이해가 가능할것같다.
내가 했던 것 좀 더 구체적인 과정
protected doGet(HttpServletRequest request, HttpServletResponse response)
출처: https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html
정말 멋있습니다.