처음부터 차근차근
Servlet 본문
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과 매핑하는 방법
- web.xml 이용하는 법
- 어노테이션 이용하는 법
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 파일을 건드리지 않아도 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 변형 및 요약
'프로그래밍 > JSP' 카테고리의 다른 글
Servlet Filter (0) | 2022.01.01 |
---|---|
servlet 한글 깨짐과 쿼리스트링 (0) | 2021.12.31 |
tomcat server 에서 url을 통해 웹문서를 보는 방법과 context 사이트 추가 (0) | 2021.12.24 |
과거 cs 프로그램의 문제점 (0) | 2021.12.18 |
웹 애플리케이션 모델과 MVC패턴 (0) | 2021.09.04 |