처음부터 차근차근

Servlet 본문

프로그래밍/JSP

Servlet

_soyoung 2021. 12. 21. 15:13
반응형

Servlet이란

Servlet은 Server Application let(서버 애플리케이션 조각)의 준말이다.

서버 애플리케이션은 여러 개를 한 번에 다 사용하지 않기 때문에 한 번에 다 로드할 필요가 없고, 서버 어플리케이션을 기능별로 나눠서 요청된것만 하나씩 매핑한다.

 

 

 

servlet이 요청되는 원리

웹 브라우저(클라이언트 애플리케이션)에서 url로 요청을 하면 웹 서버에서 url과 매핑되는 servlet을 찾아서 실행시켜준다. 실행된 servlet에서 요청에 맞는 일을 수행하고 결과를 반환한다.

 

 

 

servlet의 기본 형태 

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	
    	System.out.println("test servlet");
    }
}

service()함수는 자바의 main()함수와 같이 servlet이 실행할 때 가장 대표적으로 실행되는 것이다.

 

 

 

servlet을 url과 매핑하는 방법

  1. web.xml 이용하는 법
  2. 어노테이션 이용하는 법

 

1. web.xml 이용하는 법

eclipse 프로젝트의 src / 패키지명 아래다 servlet class를 하나 만든다.

그 다음 WEB-INF / web.xml(없으면 만들기) 에다 url 매핑 정보를 넣는다.

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  version="4.0"
  metadata-complete="true">

  <display-name>Welcome to Tomcat</display-name>
  <description>
     Welcome to Tomcat
  </description>
  
  <servlet>
	<servlet-name>myServlet</servlet-name>
	<servlet-class>com.ksy.web.TestServlet</servlet-class> 
  </servlet>
  <servlet-mapping>
      <servlet-name>myServlet</servlet-name>
      <url-pattern>/hi</url-pattern>
  </servlet-mapping>
</web-app>

localhost:8080/hi 라는 이름으로 요청이 오면 TestServlet class를 실행하겠다는 뜻이다.

그다음 TestServlet class에서 tomcat을 실행(ctrl + f11)하면 servlet class가 실행된다.

 

2. 어노테이션 이용하는 법

어노테이션(anotation) == 주석

eclipse 프로젝트의 src / 패키지명 아래다 servlet class를 하나 만든다.

그리고 그 클래스 위에 

@WebServlet("/hi")

를 추가한다.

localhost:8080/hi 라는 이름으로 요청이 오면 servlet class를 실행하겠다는 뜻이다.

그리고 WEB-INF / web.xml 파일의 metadata-complete를 true에서 false로 수정한다.

이게 true로 되어있다면 url 매핑 설정이 web.xml에 있다 라는 뜻이 된다.

web.xml

이렇게 하면 번거롭게 web.xml 파일을 건드리지 않아도 servlet을 url과 매핑할 수 있다.

그리고 협업할 때 web.xml로 하는 방법보다 이 방법이 훨씬 좋다.

협업을 하는데 모두가 web.xml을 공유파일로 두고 다같이 수정하게 된다. 이 방법은 별로 좋은 방법이 아니다.

그것 보다 어노테이션 방법이 각자 매핑할 수 있어서 협업할 때 훨씬 깔끔하고 좋다.

 

 

 

서버의 콘솔에 출력하는 방법

System.out.println("내용");

 

 

 

servlet class에서 화면에 출력하는 방법

OutputStream os = response.getOutputStream(); // stream은 입출력할 때 쓰이는 것이다.
// true : buffer 다 채워질 때까지 기다리지 말고 다써졌으면 출력해라(flush)
PrintStream out = new PrintStream(os, true); 
out.println("내용"); // 내용 클라이언트 화면에 출력


or


PrintWriter out = response.getWriter(); // 다국어 문자열 치려면 PrintWriter 사용해야 됨
out.println("내용"); // 내용 클라이언트 화면에 출력

 

 

 

WEB-INF 폴더

tomcat이 가지고 있는 root 디렉토리에서 WEB-INF 폴더는 중요한 의미를 가지고 있다.

WEB-INF 폴더 안에 있는 파일은 클라이언트가 url로 치고 들어오거나 접근할 수 없다(외부에서 요청할 수 없다).

WEB-INF 안에있는 파일들은 서버쪽에서만 사용하고, 접근할 수 있다.

 

 

 

 

 

eclipse같은 ide 프로그램 없이 servlet 만드는 방법

메모장에다 위의 코드 복사하고 TestServlet.java라는 이름으로 저장(아무데나).

cmd 창 키고 TestServlet.java 저장한 경로로 간다음에

javac -cp servlet_api_경로(예시 : D:\apache-tomcat-9.0.19\lib\servlet-api.jar) TestServlet.java

로 TestServlet.java 파일을 컴파일 해준다.

(servlet 관련 라이브러리는 기본으로 설정되어 있는게 아니라서 앞에다 적음으로 로드해줘야한다.)

그러면 TestServlet.class 파일이 생긴다!

이 class 파일을

tomcat폴더 / webapps / ROOT / WEB-INF / classes(없으면 새로 만들기) 

밑에다 넣는다.

그다음

tomcat폴더 / webapps / ROOT / WEB-INF / web.xml

에다 매핑 정보를 넣는다. (윗 내용의 servlet 코드 참조)

이 상태로 startup.bat 파일을 클릭해 tomcat을 실행하고 localhost:8080/hi라고 치면 TestServlet class의 내용이 실행된다.

 

직접 만드는 방법을 비추하는 이유 : 

이렇게 만들면 파일 내용을 수정하고 나면 다시 컴파일해야되고, 재배포해야되고, 서버도 다시 실행해야한다.

(코드수정한다음 javac...코드 다시 치고, tomcat폴더 / webapps / ROOT / WEB-INF / classes / TestServlet.class 파일 새로 컴파일한 파일로 바꾸고, tomcat 서버 껐다 켜야됨...)

그러니까 편한 ide 프로그램을 써서 번거로움을 줄이자!

 

 

 

 

 

출처 : https://www.youtube.com/playlist?list=PLq8wAnVUcTFVOtENMsujSgtv2TOsMy8zd 변형 및 요약

 

반응형
Comments