Server Application Let의 약어로 아래와 같이 클라이언트의 요청에 따라 해당 되는 어플리케이션 조각을 응답하여 전송하기 때문에 Servlet이라고 함 (Let : 조각)
그리고 자바에서는 main() 함수가 주축이었지만 Servlet에서는 service() 함수가 주축이 됨
그래서 아래와 같은 형식을 가지며 우측상단에 보이는 WAS(Web Application Server)의 컨테이너에서는 해당 클래스를 확인하는 것이 아닌 어떤 추상 클래스를 상속했냐를 보고 들어감
text 파일로 작성 후 java 파일로 저장
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class Nana extends HttpServlet
{
public void service(HttpServletRequest request
, HttpServletResponse response)
throws IOException, ServletException
{
System.out.printfln("Hello Servlet");
}
}
커맨드 창에서 라이브러리를 포함하여 컴파일을 진행
> javac
option
sourcefile
> javac -cp [lib 경로] Nana.java
성공 시 Nana.class 파일이 생성 됨
Servlet 관련 라이브러리 : 톰캣 폴더 > lib 디렉토리 > servlet-api.jar
생성된 클래스 파일들은 ROOT(Home directory) > WEB-INF > classes 내에 위치
하지만 www.newlecture.com/web-inf/classes/Nana.class 와 같이 요청 될 수 없음(보안)
WEB-INF 디렉토리는 서버에서만 접근이 가능하며 클라이언트 측에서는 접근 불가
따라서 URL과 매핑한 Servlet 코드를 찾아서 실행하도록 WAS가 역할을 수행해야 함
아래와 같이 web.xml에서 url을 해당 클래스와 맵핑하는 작업이 수행되어야 함
Nana.class 파일을 톰캣 폴더 > webapps > ROOT > WEB-INF > classes 에 넣은 뒤
톰캣 폴더 > webapps > ROOT > WEB-INF 내 web.xml 파일을 아래 내용 추가
<servlet>
<servlet-name>na</servlet-name>
<servlet-class>Nana</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>na</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
이제 해당 URL 에 접속하면 빈화면이 나오지만 서버 단 콘솔에 'Hello Servlet'이 출력 됨
http://localhost:8080/hello
이제 서버 단이 아닌 클라이언트 단에 출력하는 방법을 적용
출력 객체로는 OutputStream을 사용하며 문자열을 출력할 때 PrintSteram을 사용함
윈도우 기준 버퍼가 8KB정도인데 다 차지 않고도 문자열을 전달할 수 있도록 true
로 설정
소스코드 수정 --> 컴파일 --> 재배포 --> 서버 재실행 --> URL 접속
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class Nana 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 Servlet");
}
}
> javac -cp [lib 경로] Nana.java
Servlet 관련 라이브러리 : 톰캣 폴더 > lib 디렉토리 > servlet-api.jar
이제 다시 http://localhost:8080/hello
URL로 접근하면 화면에 'Hello Servlet'이 출력되는 것을 확인할 수 있음
아래와 같은 코드로 다르게 출력하는 방법도 존재. 다국어로 출력할 때 사용
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class Nana extends HttpServlet
{
public void service(HttpServletRequest request
, HttpServletResponse response)
throws IOException, ServletException
{
PrintWriter out = response.getWriter();
out.println("Hello Servlet");
}
}