본문 바로가기
Programming/JSP

JSP 1일차

by yoon9i 2024. 5. 20.


* 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> 서블릿 맵핑

######################################################

'Programming > 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