* Servlet/JSP
1. 자바 개발 플랫폼
1> Java SE ( Java Standard Edition)
- 자바 spec.
- JDK 설치로 SE 환경이 구축됨.
- rt.jar
- 개발할 수 있는 프로그램 형태: 로컬로 실행되는 프로그램.
2> Java EE ( Java Enterprise Edition)
- Servlet/JSP spec.
- Tomcat 서버 설치로 EE 환경이 구축됨.
- servlet-api.jar 와 jsp-api.jar
- 개발할 수 있는 프로그램 형태: 웹브라우저를 이용하는 웹사이트 개발.
3> Java ME ( Java Micro Edition )
- 소규모 디바이스에서 동작하는 프로그램 개발
- 예> 핸드폰, 셋탑박스, ...
2. 환경설정
1> JDK 11
2> eclipse
- http://www.eclipse.org
- JDK 11를 지원하는 이클립스를 사용해야 됨.
- eclipse-jee-2022-06-R-win32-x86_64.zip
3> Tomcat 서버
- tomcat 9 버전 사용
- http://jakarta.apache.org
- servlet-api.jar 와 jsp-api.jar 지원됨.
패키지명이 javax.servlet 형식으로 시작됨.
- apache-tomcat-9.0.89.zip
* Tomcat 10
패키지명이 jakarta.servlet 형식으로 시작됨.
3. eclipse 와 Tomcat 9 연동
1> eclipse 실행
- 인코딩 설정 ( UTF-8) 4개 확인
general > workspace 에서 utf-8로 설정.
web > css
html utf-8로 설정.
jsp
- JDK 11로 설정하기 (****************)
preference > Java > Compiler > 11로 변경.
preference > Java > installed JRE > 기존 jre 삭제하고
> Add 클릭 > Standard VM 선택 > JRE Home 에 C:\Program Files\Java\jdk-11 설정
> Finish > Applys Close
2> eclipse에 Tomcat 9 설정해서 연동
- Severs 탭에 추가된 tomcat 더블클릭하고 Overview 탭 선택 3가지 설정을 변경한다.
가. server location 에서 Server Path 변경
- 두번째 라디오버튼으로 변경. ( Use Tomcat installation )
나. server location 에서 Deploy Path 변경
- C:\servlet_study\apache-tomcat-9.0.89\webapps 설정.
다. tomcat의 port 번호 변경
- 8080 에서 8090로 변경
( 변경하는 이유는 Oracle DB에 tomcat이 내장되어 있고 내부적으로 8080 사용함.
충돌방지하기 위해서 8090로 변경)
* deploy path (배포 경로)
- 우리가 만든 웹 어플리케이션을 Tomcat 서버가 클라이언트에게 서비스를 제공한다.
이때 우리는 우리가 만든 웹 어플리케이션을 Tomcat 서버가 서비스할 수 있는
특별한 디렉토리에 저장해야 된다. 이 작업을 하기 위한 저장 경로를 배포 경로라로 부른다.
- tomcat의 기본 배포경로는 C:\servlet_study\apache-tomcat-9.0.89\webapps
- tomcat의 기본 port 는 8080
3> Tomcat 9 삭제 방법
preference > Server > Runtime Enviroments > 설정된 tomcat 삭제
4. 프로젝트 생성
파일 > New > Dynamic Web Project 선택
project name: HelloTest
web Module 화면
1> Context Root
- http://localhost:8090/context명/자원(html,css,js,image,jsp,서블릿)
- context 명은 논리적인 이름으로
실제 tomcat 이 webapps(배포경로)에 저장하고 있는
웹 어플리케이션을 선택하는 역할을 한다.
내부적으로 다음과 같이 key/value 로 구성됨.
context명 웹어플리케이션(webapps에 저장된 물리적인 디렉토리)
-----------------------------------------------------------
key value
ex> a x
b y
- context 명 언제든지 변경 하고 대소문자 구별됨. (일반적으로 소문자로 사용)
단, 반드시 / 로 시작해야됨.
2> Content Directory
- 개발자가 만든 소스가 저장되는 디렉토리.
- 이클립스의 workspace에 저장됨.
예>
eclipse의 project explorer 화면
HelloTest
..
java Resources
src/main/java ( *.java 가 저장됨, 서블릿 )
..
src
main
java ( *.java 가 저장됨 )
webapp (*****)
META-INF
MANIFEST.MF
WEB-INF
lib
web.xml
hello.html(정적)
test.css
test.js
test.png
world.jsp(동적)
실행후 tomcat의 webapps 폴더에 배포된 디렉토리 구조
webapps
HelloTest
WEB-INF
classes
com
dto
Person.class
서블릿
lib
web.xml
hello.html
test.css
test.js
test.png
world.jsp
* 3가지 컴포넌트
가. 정적 ( src/main/webapp 폴더에 저장 )
- html ( *.html )
- JS
- CSS
- images
나. 동적
- jsp ( *.jsp ) <== html 과 동일한 폴더에 저장. 즉, WEB-INF 와 동일한 레벨
html 처럼 비슷한 태그로 구성되었으나 자바코드를 포함할 수 있음.
- 서블릿(*.java) <== src/main/java 에 저장. 반드시 패키지로 작성해야 된다.(*)
===> 최종적인 실행 결과는 html로 만들어져야된다.
3> web.xml
- 배치 지시자 ( deployment descriptor )
- 개발자가 만든 웹 어플리케이션의 전반적인 설정 정보 담당
( 예> filter 등록, 서블릿맵핑, ... )
web.xml 대신에 어노페이션을 이용할 수도 있음.
- Spring Framework 에서 설정정보를 web.xml 로 사용함.
5. Tomcat 서버에 배포하는 디렉터리 구조
webapps(배포경로의 홈디렉터리)
폴더(HelloTest) <=== 웹 어플리케이션
WEB-INF
lib
- 나중에 mybatis.jar, mysqlconnector.jar 같은 외부라이브러리 저장용
web.xml
*.html
*.js
*.css
*.png
6. 클라이언트에서 웹브라우저에 요청하는 URL 문법(*)
1> 정적 컴포넌트 요청(디렉토리 없는 경우)
http://서버IP번호:port번호/context명/자원
ex>
http://localhost:8090/xxx/hello.html // 논리적인 context 명인 '/xxx'
http://localhost:8090/HelloTest/hello.html // 물리적인 web application 인 HelloTest
http://localhost:8090/xxx/test.css
http://localhost:8090/xxx/test.js
http://localhost:8090/xxx/tomcat.svg
2> 정적 컴포넌트 요청(디렉토리 있는 경우)
- html, js, css ,images 폴더를 생성해서 hello.html, test.css, test.js, tomcat.svg 를 각각 넣음
ex>
실행하면 디렉토리가 추가되어서 url이 생성된다.
http://서버IP번호:port번호/context명/디렉토리명/자원
http://localhost:8090/xxx/html/Hello.html
http://localhost:8090/xxx/css/test.css
http://localhost:8090/xxx/js/test.js
http://localhost:8090/xxx/images/tomcat.svg
3> 동적 컴포넌트인 JSP 요청(디렉토리 없는 경우)
http://서버IP번호:port번호/context명/자원
ex>
http://localhost:8090/xxx/world.jsp
4> 동적 컴포넌트인 JSP 요청(디렉토리 있 경우)
- jsp 폴더 생성 > happy.jsp 생성 (world.jsp는 그대로 뒀음.)
http://서버IP번호:port번호/context명/디렉토리/자원
ex>
http://localhost:8090/xxx/jsp/happy.jsp
* html 동작 정리
1> 요청: http://localhost:8090/xxx/hello.html
브라우저 -----------------------> tomcat 서버(8090)
HelloTest (웹어플리케이션) <== 논리적인 이름 컨텍스트명: /xxx
WEB-INF
hello.html
2> hello.html 찾기
없으면 404 error 발생
있으면 찾은 hello.html 다운
html 은 서버에서 실행되지 않음. 그래서 정적(static) 임.
<-----------------------
3> 응답: hello.html 다운
4> 다운후 html 랜더링
* JSP 동작 정리
1> 요청: http://localhost:8090/xxx/world.jsp
브라우저 -----------------------> tomcat 서버(8090)
HelloTest (웹어플리케이션) <== 논리적인 이름 컨텍스트명: /xxx
WEB-INF
world.jsp
2> world.jsp 찾기
없으면 404 error 발생
있으면 찾은 jsp 를 변환한다.
(world_jsp.java 생성)
3> world_jsp.java 컴파일 (컴파일에러가 발생될 수 있음.)
world_jsp.class 생성
4> world_jsp.class 실행 (실행되기 때문에 동적 컴포넌트임.)
==> 실행결과는 정적파일은 html 로 나옴.
<---------------------------
5> 응답: html 다운로드
6> 다운받고 html 랜더링
* JSP 동작 3단계
1. 변환단계
world.jsp -----> world_jsp.java
2. 컴파일단계
world_jsp.java -----> world_jsp.class
3. 실행단계
world_jsp.class -----> html
7. 서블릿(Servlet) 작성
1> 저장 위치
- src/main/java 위치에 저장
- 반드시 패키지를 사용해야 됨.
- servlet-api.jar 에 포함된 패키지를 사용.
java EE API 문서 확인가능.
java.oracle.com(https://www.oracle.com/java/technologies/)
2> 문법
import javax.servlet.http.HttpServlet;
가. extends HttpServlet
나. 서비스 메서드 재정의
- 기본 get 방식인 doGet() 를 재정의하자.
다. 서비스 메서드인 doGet() 안에서 html 작성해서 응답처리
라. 서블릿 맵핑(*)
==> 서블릿을 요청하는 url의 별칭을 설정하는 방법이다.
==> 2가지 방식으로 설정할 수 있다.
a. web.xml (*, Spring 에서 사용하는 방식임)
b. 어노테이션(@WebServlet("/별칭"))
* 서블릿 맵핑 관련
OLD 방식: 현재 지원 x. 서블릿 맵핑 전 방식임
http://localhost:8090/컨텍스트명/servlet/패키지를포함한서블릿명
==> HelloServlet 의 OLD 방식?
http://localhost:8090/xxx/servlet/com.servlet.HelloServlet
==> 이슈 2가지?
- 매우길다.
- 보안 취약.
NEW 방식: 서블릿 맵핑
OLD 방식: http://localhost:8090/컨텍스트명/servlet/패키지를포함한서블릿명
서블릿 맵핑 방식: http://localhost:8090/컨텍스트명/서블릿맵핑
@WebServlet("/hello") 로 설정했다면 다음과 같이 요청한다.
http://localhost:8090/xxx/hello
######################################################
정리 - 20240520
1. 환경설정
jdk
eclipse Enterprise 버전
tomcat 9
- servlet-api.jar
jsp-api.jar
2. 3가지 컴포넌트
1> 종류
정적컴포넌트 : html
동적컴포넌트 : jsp
서블릿
2> 저장위치
src/main/java
서블릿(*.java)
HelloTest
WEB-INF
*.html
*.jsp
3> 요청 방법
html 과 jsp 요청방법:
http://localhost:8090/context명/html파일(jsp파일)
http://localhost:8090/context명/폴더/html파일(jsp파일)
서블릿 요청방법:
http://localhost:8090/context명/서블릿맵핑 (**************)
* 서블릿맵핑2가지
가. web.xml
나. @WebServlet("/서블릿매핑")
==> 최종적으로 html로 응답된다. (***************)
4. 서블릿 작성방법
1> extends HttpServlet
2> 서비스 메서드 재정의
- doGet()
3> 서비스 메서드에서 로직처리 및 html 작성후 응답
4> 서블릿 맵핑
######################################################
'[study]이론정리 > JSP' 카테고리의 다른 글
JSP 5일차 - MyBatis 연동 (0) | 2024.05.24 |
---|---|
JSP 5일차 (0) | 2024.05.24 |
JSP 4일차 (0) | 2024.05.23 |
JSP 3일차 (0) | 2024.05.22 |
JSP - 2일차 (0) | 2024.05.21 |