Servlet / JSP #02 Servlet Program

underlier12·2020년 1월 23일
0

SERVLET&JSP

목록 보기
2/16

02. Servlet 프로그램 만들기

Servlet

Server Application Let의 약어로 아래와 같이 클라이언트의 요청에 따라 해당 되는 어플리케이션 조각을 응답하여 전송하기 때문에 Servlet이라고 함 (Let : 조각)

image.png

그리고 자바에서는 main() 함수가 주축이었지만 Servlet에서는 service() 함수가 주축이 됨

그래서 아래와 같은 형식을 가지며 우측상단에 보이는 WAS(Web Application Server)의 컨테이너에서는 해당 클래스를 확인하는 것이 아닌 어떤 추상 클래스를 상속했냐를 보고 들어감

image.png

Nana.java

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 와 같이 요청 될 수 없음(보안)

image.png

WEB-INF 디렉토리는 서버에서만 접근이 가능하며 클라이언트 측에서는 접근 불가

따라서 URL과 매핑한 Servlet 코드를 찾아서 실행하도록 WAS가 역할을 수행해야 함

image.png

서블릿 코드와 URL 매핑

아래와 같이 web.xml에서 url을 해당 클래스와 맵핑하는 작업이 수행되어야 함

image.png

Nana.class 파일을 톰캣 폴더 > webapps > ROOT > WEB-INF > classes 에 넣은 뒤
톰캣 폴더 > webapps > ROOT > WEB-INF 내 web.xml 파일을 아래 내용 추가

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

서블릿 문자열 출력

이제 서버 단이 아닌 클라이언트 단에 출력하는 방법을 적용

서블릿 response를 이용한 출력

출력 객체로는 OutputStream을 사용하며 문자열을 출력할 때 PrintSteram을 사용함
윈도우 기준 버퍼가 8KB정도인데 다 차지 않고도 문자열을 전달할 수 있도록 true로 설정

image.png

소스코드 수정 --> 컴파일 --> 재배포 --> 서버 재실행 --> URL 접속

Nana.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
	{
		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'이 출력되는 것을 확인할 수 있음

PrintWriter로 출력

아래와 같은 코드로 다르게 출력하는 방법도 존재. 다국어로 출력할 때 사용

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");
	}
}
profile
logos and alogos

0개의 댓글