Servlet 프로그램 만들기 (xml 매핑과 annotation 매핑)
Velog에 작성했던 포스트를 옮겼습니다:)
Servlet / JSP ) 3. Servlet 프로그램 만들기
자바 어플리케이션에서는 main() 메소드부터 호출되는 것처럼자바 "웹" 어플레이케이션 ( Servlet 프로그램 )에서는 service() 함수가 먼저 호출된다.Context Site인 company 디렉토리에 Servlet 프로그램을 추
velog.io
Servlet 프로그램 만들기
자바 어플리케이션에서는 main()
메소드부터 호출되는 것처럼
자바 "웹" 어플레이케이션 ( Servlet 프로그램 ) 에서는 service()
함수가 먼저 호출된다.
Context Site
인 company 디렉토리에 Servlet 프로그램을 추가시켜보겠다.
Company.java
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class Company extends HttpServlet {
public void service(HttpServletRequest request
, HttpServletResponse response) throws IOException. ServletException {
System.out.println("Hello, Servlet~");
}
}
그리고 cmd창으로 통해 javac 커맨드로 컴파일을 해보면
cannot find symbol
기본 JDK 라이브러리에는 servlet 라이브러리가 포함되지 않기에 오류가 발생한다.
따라서 javac로 컴파일 시 Tomcat의 lib디렉토리 ~\apache-tomcat-9.0.62\lib
에 존재하는 servlet-api.jar
를 classpath로 지정해줘야한다.
javac -cp "~\apache-tomcat-9.0.62\lib\servlet-api.jar" Company.java
성공적으로 컴파일이 되고, Company.class 파일이 생성됨을 확인할 수 있다.
Servlet 프로그램 실행하기
이제 웹에서 Company.class를 요청함으로써 소스 코드가 실행되는지 확인해보자.
WEB-INF
WEB-INF
디렉토리는 서버에서만 다루기 위한 파일들을 보관하는 디렉토리이다.
따라서 클라이언트에서 "URL을 통해서"는 요청이 불가능하다.
- Tomcat의 홈 디렉토리에는
WEB-INF
라는 디렉토리가 있는데 이 디렉토리는 URL을 통해 접근이 불가능하다.- 시도
WEB-INF
디렉토리 안에classes
라는 디렉토리를 만들고 그 안에 Company.class를 옮긴 뒤 웹 브라우저를 통해 요청해보자.
404에러서버 안에 요청한 페이지가 X
가 나는 것을 볼 수 있다.
- 시도
- 인용구 안에 설명하기를 "URL을 통해서" 요청이 불가능하다고 했다. 그렇다면 어떻게 요청을 해야할까?
-
이 코드는를 의미한다. 이렇게 매핑을 시켜준 뒤<servlet> <servlet-name>company</servlet-name> <servlet-class>Company</servlet-class> </servlet> <servlet-mapping> <servlet-name>company</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>
localhost:8080/hello
로 요청을 해보면
Company.java 코드 내용이 실행됨을 확인할 수 있다. "url을 통해 `/hello`라는 요청이 왔을 때, `company`라는 이름의 servlet을 실행시켜주는데, company라는 이름의 servlet은 Company라는 class의 servlet이다."
-
Tomcat의 web.xml
에 URL과 파일을 매핑시켜주는 코드를 추가해주면 된다.
정리)
- URL을 통해
/hello
요청이 오면 웹 서버 (WS)는 Tomcat의 홈 디렉토리에서hello
에 해당 하는 파일을 찾는다. - 찾지 못한다면 WAS를 통해
/hello
와 매핑된 것이 있는지web.xml
에서 찾아본 뒤, 매핑된 것을 찾는다면 WAS는 WS에게 해당 Servlet을 넘겨준다. - 그리고 WS는 이를 클라이언트에게 응답한다.
Servlet 프로그램을 통해 웹 페이지에 문자열 출력하기
Company.java에서는 System.out.println
을 통해 콘솔 창에 문자열을 출력했다.
이제는 웹 페이지에 문자열을 출력해보자.
System.out.println("Hello, Servlet~");
을 아래 코드로 바꾼 뒤, 다시 컴파일
/ Tomcat 재실행
/ URL 매핑된 내용을 통해 요청
을 해보자.
(
IDE 사용 마렵... 이번 까지만 메모장으로 한땀한땀 코드를 치자.
)
//Byte 단위 전송하는 Stream계열
OutputStream os = response.getOutputStream(); //response : HttpServletResponse 객체
PrintStream out = new PrintStream(os,true);
out.println("Hello, Servlet~");
or
//문자열 출력에 특화된 Writer계열
PrintWriter out = response.getWriter();
out.println("Hello, Servlet~");
성공적으로 문자열이 출력됨을 확인할 수 있다.
Intellij를 통한 Servlet 개발 환경 세팅
여태 메모장을 통해 소스 코드르 입력하고, cmd창을 통해 컴파일을 한 뒤,
직접 Tomcat를 재실행하며 Servlet을 배포했지만,
이제 Intellij 라는 IDE(Integrated Development Environment)를 사용해
좀 더 편하고 빠르게 배포해보겠다.
Intellij에서 Web 개발 프로젝트 생성하기
- Intellij에서 일반 Java 프로젝트를 생성한다.
- 프로젝트를 우클릭 한 뒤,
Add Framework Support...
를 클릭하고Java EE
에서Web Application
을 클릭한 뒤 확인을 누른다. - Tomcat 연결을 위해
Add Configurations...
클릭 후Tomcat local
항목에서 Tomcat이 설치된 디렉토리를 설정해준 뒤 확인을 누르면 Tomcat 연동이 완료된다. - Servelt 라이브러리를 추가해주기 위해
servlet-api.jar
파일을 추가해준다.
Intellij로 Servlet 프로그램 만들기
- 기존의 메모장에 적던 코드를 Intellij를 사용해 적으니 훨씬 편했고, 무엇보다
컴파일
/배포
/Tomcat 실행
이 한 번에 가능해서 매우 편했다. - 프로젝트로서 Servlet 프로그램을 관리하기 관리하기가 너무 편해졌다.
Annotation을 통해 URL 매핑
지금까지는 web.xml
에 태그를 추가해 URL 매핑을 했다.
web.xml
을 통한 URL 매핑<servlet> <servlet-name>company</servlet-name> <servlet-class>com.jongky.web.Company</servlet-class> </servlet> <servlet-mapping> <servlet-name>company</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>
하지만 Annotation을 통해 URL을 매핑하는 방법도 있다.
- Annotation을 통한 URL 매핑단순히 class 선언문 위에
@WebServlet()
을 추가하는 것만으로web.xml
을 통해 적었던 긴 태그를 대체할 수 있다!! @WebServlet("/hello") public class Company extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { PrintWriter out = response.getWriter(); out.println("Hello Servlet"); } }