-
0829. 톰캣(Tomcat) 설치와 이클립스(Eclipse) 연동JSP-Servlet 2023. 8. 29. 16:53
🌱사전 작업 (다운로드 및 새 작업공간)
이클립스 새로 써야 한다.
작업공간 하나 생성
[File] - [Switch Workspace] - [Other...]
[Browse] 해서 새로 만든 작업공간 폴더 지정.
폴더 선택 후 Launch 하면 이클립스가 재기동된다 (모든 설정이 초기화)
- 새로 열린 이클립스에서 필수 설정할 것 -
[Window] - [Preferences] >>
Workspace : UTF-8
CSS Files, Html Files, JSP Files : UTF-8
+) 그 외 font - text font 변경 등
톰캣 설치
Tomcat 9 버전 다운
운영용은 installer를 써서 컴퓨터 켤 때마다 자동실행이고 개발용이면 zip 파일로 다운로드해야 한다.
관리가 편한 위치에 다운로드 받고 압축 풀기
📍 이클립스(Eclipse) 톰캣(Tomcat) 연동
perspective에 커서를 하버하면 Java EE라고 뜬다.
아래 Servers 탭에서 파란 글씨 문장 [어쩌고~ create a new server...] 클릭
Apache 폴더 열기
v9.0 선택 후 이름은 기본으로 둬도 되니 Next
[Browse] - bin, conf, lib 등의 폴더들이 포함된 폴더를 선택
선택 후 Next, Finish가 남았는데
아직 개발한 게 없으므로 Finish 하면 된다.
Servers 탭에 Connection이 등록되어 Tomcat v9.0이 보인다.
선택해서 우측 상단 초록색 재생버튼에 하버하면 Start the server라고 뜨는데 클릭하면
포트번호가 이미 사용 중이라고 에러가 뜬다.
왜냐면 다시 더블클릭해 보면 주요설정들이 나오는데 포트번호를 확인해야 한다.
오라클이 이미 쓰고 있어서 그렇다.
둘 중 하나는 포트를 바꿔야 한다.
우린 이거 계속 써야하니까 오라클을 바꾸자
1. 디비버 실행 - sys 계정(or sysdba인 걸로 system 계정)
새 SQL 창에서 해당 명령어 실행
select dbms_xdb.gethttpport() from dual; exec dbms_xdb.sethttpport(9090); select dbms_xdb.gethttpport() from dual;
디비버에서는 오류가 난다.
exec 명령어 때문에.
2. 명령 프롬프트 창에서
>> sqlplus
계정 로그인 후 다시 3줄 각각 실행하면 된다.
*system 계정 암호는 oracle
다시 실행해 보기. 된다.
이외에 포트번호 충돌이 생길 경우 프로그램 재시작, 그래도 안 되면 컴퓨터를 껐다켜야 다른 것들 종료할 수 있다.
이렇게 서버를 실행시키면 좌측 디렉토리에 서버가 하나 생긴다.
지우면 다시 수동으로 세팅해야하니까 절대 지우지 말자.
+) 아래 Servers 탭의 9버전도 지우면 안 된다.
Servers 폴더는 Base의 역할을 한다.
+) 방화벽 뜨는 건 다 허용하면 된다
*정지방법
빨간 네모 단추 🟥
📍 Servlet 프로젝트 생성
*let : 작은 조각
Servlet "서버에서 동작하는 작은 코드 "
프로젝트 생성
new - Web 검색 후 Dynamic Web Project 선택
프로젝트명 : ServletTest
Dynamic Web module version : servlet 버전을 의미한다. "3.0"을 가장 많이 작업하니 선택하자
Next
다음 창에선 고칠 거 없으니 바로 Next
중요한 창이 나온다.
Generate web.xml ~ 체크
"Web.xml 을 만들거냐" (요즘은 안 만들지만 어떻게 동작하고 역할이 뭔지 알기 위해 체크하기)
[Finish]
<폴더 구조>
Java resource 하위에 src
web.xml 생성됨
webapp 폴더에 JSP 파일 배치
lib 폴더에 JDBC, lombok 등 서브파일을 매치(Maven으로 관리하면 굳이 배치할 필요 없음)
📍Servlet 클래스 생성
ServletTest 에서 new 하여 Servlet 클래스 생성하기
패키지명 : com.test
클래스명 : HelloServlet
입력 후 Next
- servlet이 어떤 URL과 연동될지 정하는 구간-
URL mapping에서 /HelloServlet 선택 후 [Edit] 클릭
/HelloServlet -> /Hello 로 수정하고 [OK]
[Next]
웹 접속 시 URL을 아래와 같이 쓰기 위함이다.
- Override할 메서드 선택 -
doGet만 체크
+) inherited
[Finish]
import 옆에 + 버튼 눌러서 펼쳐보면 Tomcat이 제대로 되었는지 볼 수 있다.
만약 연결이 안 되면 파란색으로 묶은 부분에 빨간 밑줄이 생긴다.
Get 으로 요청 받고
매개변수로 request, response를 받고 있다.
문자열 기반이니 getWriter
append : 덧붙이겠다.
package com.test; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class HelloServlet */ @WebServlet("/Hello") public class HelloServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.getWriter() .append("Served at: ") .append(request.getContextPath()); } }
- 실행 -
우클릭 해서 Run As - Run on Server
Tomcat v9.0 선택 - [Next]
우측 상자에 ServletTest가 보이면 [Finish]만 누르면 된다.
*혹시 restart 물어보는 창 뜨면 restart 로 선택하고 OK
브라우저에 새 창이 뜬다.
완료
🛎️
ServletTest : 우리가 쓸 어플리케이션 이름
프로젝트명인데 context명이라고도 한다.
=> 또다른 여러 프로젝트로 하나의 tomcat 서버에서 운영할 수 있다는 뜻
*여기서 Hello를 hello로 바꾸면 404 뜬다.
대소문자를 인식하기 때문이다.
그러므로 가급적 소문자로 쓰는 게 편하다.
다시 Run on Server
/hello 를 Get으로 요청했을 때 나오는 내용들
request : 기본 요청 내용 / response : 기본 응답 내용
getWriter의 리턴 타입은 printWriter이다.
다르게 할 수 있다.
append 줄 밑에 코드 삽입
개발자의 디버깅 메시지는 클라이언트에 전달하지 않는다.
그런데 사용하면 나중에 "log"로 다 대체시켜야 한다.
System.out.println("TestServlet 실행"); // 개발자의 디버깅 메시지 : 브라우저에 안 보임 PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<body>"); out.println("<h1>Hello</h1>"); out.println("</body>"); out.println("</html>");
이 Servlet이 Tomcat 서버에 등록되었다는 의미
우클릭해서 Remove 가능하면 동작하지 않는다.
URL 하나당 Servlet 하나 !
/list, /detail, /insert, /search 이렇게 Servlet을 한다면 URL도 따로 해야 한다.
앱에서 Command 객체에 해당한다.
🖤차이점 🖤
Command는 메뉴의 index(ArrayList로 관리)를 통해 연결
Servlet은 URL(Map으로 관리) 문자열과 mapping 시킨다.
*매핑 문자열은 반드시 /(슬래시)로 시작한다.
Servlet에서 <html> 어쩌구 이 과정들을 편하게 하는 게 JSP이다.
JSP : html 작성이 쉽고 Java 작업이 어렵다.
Servlet : html 작성이 어렵고 Java 작업이 쉽다.
🧙
그러니 각 작업할 때마다 바꿔서 하면 좋다
이 둘의 서로 응답하는 구조를 만들어야 하는 게 최종목표이다.
아무튼 최종 코드
더보기 클릭⬇️
더보기package com.test; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class HelloServlet */ @WebServlet("/hello") public class HelloServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // response.getWriter() // .append("Served at: ") // .append(request.getContextPath()); System.out.println("TestServlet 실행"); // 개발자의 디버깅 메시지 : 브라우저에 안 보임 PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<body>"); out.println("<h1>Hello</h1>"); out.println("</body>"); out.println("</html>"); } }
'JSP-Servlet' 카테고리의 다른 글
0904. 세션 관리 (0) 2023.09.05 0829. JSP/Servlet - URL, 웹서버와 웹컨테이너 (0) 2023.08.29