💙 들어가며
cmd와 톰캣을 이용해서 직접 매핑과 배포를 해보고
클라이언트 페이지에 원하는 내용을 출력해 보았다.
그러나 아래의 주의사항 3가지를 해결하기가 어려웠다.
1. 한글 깨짐의문제
2. 도구가 개별화되어 있어서 쓰기 어렵다.
3. 문서형태로 보여주어야 하니 HTML과 연동시켜야 한다.
이번 시간에는 IDE(이클립스)를 이용한 서블릿 생성과 웹 페이지 실행을 해보고
IDE를 이용했을 때의 그 효과에 대해서 체감해보자.
✏️ 학습내용 정리
#이클립스(IDE)에서 서버 Runtime 설정하기
이클립스는 통합개발환경(IDE)이기 때문에
편집기, 컴파일 등의 기능과 더불어
외부 라이브러리를 연동 및 서버실행환경까지 구축할 수 있다.
서버 실행환경을 구축해서 이클립스에서 컴파일~배포까지 완성해보자!
💡 서버 실행환경 설정 방법
Windows>Preferences>Server>Runtime Environments에서
Add버튼을 눌러서 현재 내가 다운로드 받은 톰캣과 같은 버전의 타입을 선택하여 추가한다.
#server.xml파일로 서버설정
이클립스의 server.xml 파일은
server runtime을 설정할 때 자동으로 생성되는 사본이기 때문에
톰캣 server.xml과는 다르게 맘대로 수정하고 추가해도 문제가 되지 않는다.
🚨 주의사항
톰캣의 server.xml파일은 설정을 잘못하면 돌이킬 수 없다.
미리 사본을 만들어 둔 뒤에 서버설정을 할 것!
포트번호를 바꿔보자!
server.xml에서 context폴더의 root도 바꿔보자.
이클립스의 설정을 통해서 바꿀 수도 있다. (IDE의 힘!)
서버 설정을 바꾸었으니 아래 내용도 삭제해야 한다.
삭제한 뒤에 다시 서버실행환경에서 서버를 추가해주면 된다.
그러면 포트번호와 context번호가 삭제된 url 띄우기 성공!
#이클립스에서 배포하기
💡 주의사항
1. 컴파일 하는 순간 자동으로 배포된다.
2. 배포되는 파일은 원본이 아니라 사본파일이다.
이클립스가 알아서 번역한 class파일을 사본화해서 배포 디렉토리로 옮겨준다.
지난 번에는 cmd를 이용해서 파일을 컴파일(번역)한 뒤
서버가 이해할 수 있는 홈디렉토리(WEB-INF>classes)에 직접 옮기는 것을 통해 배포했다.
그런데 이클립스에서는 우리가 자바 파일을 실행하여 컴파일(번역)하는 순간
자동으로 배포까지 완료해준다고 한다.
그렇다면 배포경로는 어디서 볼 수 있을까?
서버를 더블클릭하면 나오는 개요에서 확인할 수 있다.
이때 이클립스에서 우리가 수정하는 index.html파일과
배포경로에 있는 index.html파일은 다른 파일이다.
배포경로에는 index.html의 복사본이 들어간다.
(여기있는 배포디렉토리는 임의로 손대서는 안된다.)
자동으로 복사까지 해서 배포까지 해주는 IDE의 강력한 힘..
이렇게 IDE를 사용하면
compile하고 수동 배포하고 서버를 재시작하고
클라이언트가 url을 요청하는 일련의 많은 과정들을
아주 손쉽게 처리할 수 있다.
#한글인식 오류 해결
한글인식 오류도 쉽게 해결할 수 있다.
이클립스에서 HTML파일을 만들 때 맨 위에 설정을 변경할 수도 있지만,
이렇게 되면 매번 만드는 파일마다 수동으로 설정해주어야 한다.
이클립스의 기능을 사용하면 원하는 유형의 파일이 만들어질 때마다
자동으로 특정 인코딩 유형으로 생성되도록 설정할 수 있다.
#패키지 설정
💡 컨트롤러(Controller)
사용자 입출력을 받는 UI와 서비스 사이에서 역할한다.
UI에서 입력을 받으면 적합한 서비스를 호출해서 다시 UI에 출력할 수 있게 한다.
main/java라는 패키지 안에 각각 entity, repository, service를 만들었다.
서블릿 파일은 어디에 두어야 할까?
controller라는 패키지를 새로 만들어서 넣는다.
#웹서버 콘솔출력
웹서버 콘솔에 "Hello Servlet"을 출력해보자.
※ 여기서 웹서버 콘솔이란 톰캣의 실행창을 의미한다.
먼저 List.java파일을 만들고 HttpServlet을 상속받는다.
그리고 main함수가 아닌 service함수를 호출해서
콘솔에 출력하기 위해 System.out.println()을 작성한다.
💡 서버 콘솔에 "Hello Servlet"을 출력하는 List.java 파일을 만들어보자.
import java.io.IOException;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.io.*;
public class List extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
System.out.println("Hello Servlet"); //콘솔출력
}// service ends
}// class ends
⭕ 출력결과:
서버콘솔에 띄우기 성공!

#주석(Annotation)
web.xml파일에 url을 직접 매핑해서 호출할 수도 있지만
주석기능을 활용해서 XML설정을 하지 않고
클래스에서 url 매핑을 바로 할 수도 있다.
💡 주석(Annotation)이란?
서블릿(Servlet)에서 어노테이션(Annotation)은 주석과 같은 형태로 사용되며,
서블릿 컨테이너에게 특정 동작을 수행하도록 지시하는 메타데이터 역할을 한다.
서블릿 어노테이션을 사용하면
서블릿 클래스를 XML 설정 파일 대신에 소스 코드 내에서 설정할 수 있어서
코드의 가독성을 향상시키고 관리를 더욱 용이하게 만들 수 있다.
(어노테이션을 사용하면 web.xml파일에서 매핑할 필요가 없어진다!)
서블릿 애노테이션을 사용하려면
Java EE 또는 Jakarta EE와 같은 서블릿 컨테이너를 지원하는 환경에서 작업해야 한다.
애노테이션을 사용하면 웹 애플리케이션의 설정을 보다 간단하게 관리할 수 있으며,
코드와 관련된 설정을 소스 코드에 직접 표현할 수 있어 개발자에게 편의성을 제공한다.
1. @WebServlet: 서블릿 클래스를 서블릿 컨테이너에 등록하고 URL 패턴과 관련된 매핑을 지정하는데 사용
2. @WebFilter: 필터(Filter)를 정의하고 URL 패턴과 관련된 필터 체인을 지정하는데 사용
3. @WebListener: 리스너(Listener) 클래스를 서블릿 컨테이너에 등록하는데 사용
어노테이션을 활용해서 매핑해보자!
💡 WebServlet 어노테이션을 사용해보자.
//Annotaion
@WebServlet("/index") //주석 한 줄로 '/index'라는 url에 해당 서블릿 파일 매핑!
public class IndexController extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//2가지가 한 쌍으로 움직여야 상위버전/하위버전 모두 호환된다.
response.setCharacterEncoding("UTF-8"); //문자를 보낼 때의 설정
response.setContentType("text/html; charset=UTF-8"); //문자를 읽을 때의 설정
PrintWriter out = response.getWriter();
int size = 4;
String size_ = request.getParameter("s"); //html form에서 name으로 지정한 이름을 받는다. 어디 따로 정의되어 있는게 아니다.
if(size_ != null)
size = Integer.parseInt(size_);
int type = 1;
String type_ = request.getParameter("t"); //html form에서 name으로 지정한 이름을 받는다. 어디 따로 정의되어 있는게 아니다.
if(type_ != null)
type = Integer.parseInt(type_);
out.print("<hr>");
for(int i=0; i<size; i++) {
//여기서 아무리 println을 해도 html로 인식하기 때문에 내려쓰기 안됨
//html에 맞게 br 태그로 내려줘야 한다.
out.print("수제비~<br>");
}
}//service ends
#(꿀팁)서블릿이 우선순위
💡 같은 이름의 파일들이 놓여져 있을 때 서블릿 파일이 우선순위 1등!
index.html과 서블릿 이름을 @WebServlet("index.html")이라고 했을 때
클라이언트 페이지에서 index.html을 요청하면
서블릿 파일이 호출되어야 한다.
그래서 서블릿이 나오게끔 가상 파일을 하나 만들어서 테스트하는 습관을 들여서
매핑이 잘 되었는지를 확인하자!
💙 마치며
1.
맨 처음 자바를 배울 때만 해도
IDE를 사용하는 것의 강력한 장점을
많이 체감하지 못했었는데,
이번에 서블릿 파일을 만들고 배포하는 과정을 통해서
웹을 만들 때 IDE가 얼마나 필수불가결한 요소인지..
제대로 알 수 있었던 것 같다.
배포까지 자동으로 해주는 IDE...최고
2.
* 이클립스의 server.xml파일은 사본이기 때문에
수정이 자유롭다는 점
* 배포될 때도 사본으로 배포된다는 점
잘 기억해두자.
'SERVER│SERVLET' 카테고리의 다른 글
[뉴렉처 6기] SERVLET│JSP의 단점(스파게티 코드)│MVC 모델(1, 2)│EL│태그라이브러리(JSTL) (0) | 2023.09.10 |
---|---|
[뉴렉처 6기] SERVLET│WAS 실행단계│서블릿의 생명주기│ServletContext (0) | 2023.09.10 |
[뉴렉처 6기] SERVLET│쿼리 스트링│JSP입문│재스퍼│코드블록 (0) | 2023.09.10 |
[뉴렉처 6기] SERVLET│서블릿이란?│WS와 WAS│매핑과 배포(CMD버전) (0) | 2023.09.01 |
[뉴렉처 6기] BACK│톰캣 깔기│환경변수 설정(JAVA_HOME)│홈디렉토리에서 파일 찾기(230725) (0) | 2023.07.26 |