위 파일은 애플리케이션을 실행하면 처음 화면에 보이는 파일(welcome file)로 html 기반으로 작성된 JSP라는 것이다. 중간에 <a> 태그의 href 속성 값이 'hello-servlet'이라고 되어있다는 점을 기억하자.
두 번째로 살펴볼 파일은 src/main/java/com.doding.simpleweb.HelloServlet이다. Servlet을 만들 때는 HttpServlet을 상속받고 @WebServlet을 통해서 사용자가 어떻게 호출했을때 동작할 것인지를 등록한다.
@WebServlet(name = "helloServlet", value = "/hello-servlet")
public class HelloServlet extends HttpServlet {
private String message;
public void init() { message = "Hello World!"; }
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><body>"); // 문자열로 HTML을 만든다고? 답답하다.ㅜㅜ
out.println("<h1>" + message + "</h1>");
out.println("</body></html>");
}
public void destroy() { }
}
@WebServlet 애너테이션의 value에 등록된 'hello-servlet'을 어디서 봤을까? 바로 index.jsp의 <a> 태그의 href 속성에 선언된 값으로 HelloServlet에 대한URL Mapping 값이다. 결과적을 index.jsp에서 link를 클릭하면 hello-servlet이라는 URL을 호출하는데 이 URL에 연결된 Servlet이 바로 HelloServlet이다.
코드 하단에 보면 PrintWriter를 통해 클라이언트로 내려보낼 html 코드를 한땀한땀 만들고 있는 것이 보인다. "참 답답하다" 라는 생각이 들면 지금은 충분하다. html을 자바 영역에서 만들다 보니 이런 문제가 발생한 것이다. 이처럼 Servlet에서는 자바 코드를 이용한 business logic과 html을 이용한 presentation logic이 섞여서 등장하는 문제가 있다. 이를 개선하기 위해서 사용하는 것이 JSP이다.
실행하기
프로젝트를 실행하기 위해서는 상단 톰켓 아이콘 우측의 실행 버튼을 클릭하면 된다.
톰켓이 실행되면 하단의 Service 탭에서 톰켓의 실행 상태를 콘솔에서 확인할 수 있다.
그럼 톰켓 위에서 우리가 만든 애플리케이션인 simpleWeb이 동작하는 것을 알 수 있다. 그리고 동시에 기본 브라우저가 실행되면서 url에 [http://localhost:8080/simpleWeb_war_exploded/]가 입력되고 위에서 살펴본 index.jsp가 실행되는 것을 볼 수 있다.
여기서 localhost:8080까지가 tomcat의 경로 즉 container root이고 simpleWeb_war_exploded가 tomcat에 설치된 application 즉 context이다. intellij가 생성한 context 이름이 너무 복잡하기 때문에 적절한 이름으로 바꿔 쓰는게 좋다.
[Tomcat Server]에서 [Tomcat 10.x]를 우클릭해서 [Edit Configuration]-[Deployment]를 순차적으로 선택하고 [Deploy at the server startup]에서 프로젝트를 선택 후 하단의 Application Context를 /simpleweb으로 변경해주자.
이제 localhost:8080/simpleweb가 context root이고 뒤에 아무 것도 추가하지 않았을 때는 welcome file이라는 것이 동작하는데 index.jsp가 welcome file의 하나이다.
[Hello Servlet] 링크를 클릭하면 HelloServlet이 동작해서 다음과 같은 화면이 출력되면 성공이다.
주소창을 살펴보면 /hello-servlet이 추가된 것을 볼 수 있는데 HelloServlet에 설정된 @WebServlet의 value 속성이다.