본문 바로가기

학원 일기/학원-JSP

최범균의 JSP정복해보자

part 5개 챕터22개의 어마어마한 분량

 

part 1

 

chapter 01 20p~32p

 

1)

이책의 범위 -서버 웹 기술인 JSP, DB조작에 필요한 JDBC

 

배울내용 - JSP를 이용한 웹개발, 서버 코드의 전형적인구조 (서비스-DAO ,DTO구성)

               서블릿에대한 기초, MVC 구조에대한 기초, JSP와 DB연동한 게시판 개발

 

배운후 목표 - JSP를 활용한 기초수준의 웹사이트 제작

 

2) 대상독자

 

1.자바에대한 기본적인이해 

이중 내가 모르는것 - classpath에대한 기초지식

 

2.HTML의 기본적인 지식

 

3) 준비물(실습환경)

 

JDK8/톰캣8/MySQL/이클립스

 

JDK - JDK8설치 / JAVA_HOME환경 변수설정

 

 [ chapter 02 - 웹프로그래밍 기초 ]

 

1.웹과 웹프로그래밍 

-주소와 웹브라우저의 중요성 암시

 

1-1)url과 웹페이지

 

홈페이지 -  웹페이지의 묶음

 

http -프로토콜 www.11st.co.kr  - 서버이름 html/category/1.html -경로 ?xzone=ctgr1^html -쿼리문자열

 

:// << 이것은 프로토콜과 나머지를 구분하기위해 사용한다

 

프로토콜 - 웹브라우저와 서버가 내용을 주고받을때 사용할규칙

서버이름 - ip주소나 / 도메인 이름 이위치한다

경로 - 웹페이지의 상세주소

쿼리문자열 - 입력값에 맞는 결과를 보여지기위한 방법

 

1-2)웹 브라우저와 웹서버

 

DNS(Domain Mame Server) - IP주소를 변환한 이름

 

IP - 컴퓨터를 구분함

prot - 각각의 서버프로그램을 구분하기위해 존재

 

웹브라우저의 기본 포트값 - 80

톰캣의 기본 prot값 - 8080

 

1-3) HTML과 HTTP

 

렌더링(rendering) - HTML 문서로부터 알맞은 화면을 생성하는 과정

 

요청데이터/응답데이터 - 요청/응답줄, 헤더 , 몸체로 구성된다

 

1-4) 정적자원과 동적자원

 

정적자원 - 같은요청에는 항상 같은 응답을 받는다

동적자원 - 같은 요청에도 다른 응답을 받을수 있다

 

1-5) 웹 프로그래밍과 JSP

 

웹프로그래밍(간략하게) - 서버가 웹브라우저에 응답으로 전송할 데이터를 생성하는 프로그램을 작성하는것이다.

 

JavaServerPages(JSP) - 자바표준기술, 일반적으로 HTML의 응답을 생성하기위해 사용된다

 

서버프로그램(WAS) - 웹프로그래밍 기술을 이용해만든 프로그램을 실행하기위해 필요하다 (ex 톰캣)  

 

2. JSP 만들고 실행해보기

 

appache-tomcat-8.0.21\webapps에는 JSP를 비롯한 웹고관련된 코드들이 위치한다

 

http://localhost:톰캣포트번호/경로입력하면 webapps에 작성한 jsp파일의결과를 브라우저로 응답받는다.

 

스크립트릿 = <%= %>

 

[ chapter 03 JSP로 시작하는 웹 프로그래밍 ]

 

1)JSP에서 HTML문서를 생성하는 기본코드 구조

 

JSP를 크게구분하자면 설정부분과 생성부분이다

ex) 설정부분 - <%@page ~~> |||| 생성부분 - <html>

 

2) JSP페이지의 구성요소

 

-디렉티브(Directive)

-스크립트: 스크립트릿(Scriptlet),표현식(Expression),선언부(Declaration)

-표현 언어(Expression Language)

-기본 객체(Implicit Object)

-정적인 데이터

-표준 액션 태그(Action Tag)

-커스텀 태그(Custom Tag)와 표준 태그 라이브러리(JSTL)

 

이 7가지를 배워나가는것이 JSP를 배워나가는것이다 

나는 여기서 얼마나 알고있나??

 

2-1) 디렉티브

 

디렉티브란?

 

ex) <%@ 디렉티브이름 속성1="값1" 속성2="값2"...%> 를 토대로

 

<%@ page contentType = "text/html; charset=utf-8" %> 를 분해해보면

 

디렉티브이름 > page

속성 > contentType

값 > text/html;charset=utf-8

 

디렉티브 이름 종류

page - JSP페이지에서 필요로 하는 정보를 설정한다.

taglib - JSP페이지에서 사용할 태그 라이브러리를 지정한다

include - JSP페이지의 특정 영역에 다른 문서를 포함시킨다

 

2-2) 스크립트 요소

 

JSP는 (서버사이드)스크립트 언어 - JSP는 막강한 스크립트 코드를 제공해준다.

 

2-3) 기본객체

 

기본객체or내장객체 (implicit object)-JSP는 웹어플리케이션 프로그래밍을 하는데 필요한 기능을 기본적으로 가지게된다

 

2-4) 표현언어

 

표현언어 - JSP 스크립트 코드를 간결하고 이해하기 쉽게 만들어주기위해 대신 사용하는것

               ex) ${~~}

 

2-5) 표준 액션태그와 태그 라이브러리

 

액션 태그 - 특정 페이지 실행결과를 현재위치에 포함시키는것

커스텀 태그 - JSP를 확장시키기(편의성을 높이기) 위해 개발자가 직접 만든 태그이다.

                  커스텀 태그중에는  JSTL(JavaServer Pages Standard Tag Library) 처럼 표준화된 라이브러리도 존재한다

 

3) page 디렉티브

 

page디렉티브의 주요 속성

 

contentType - JSP가 생성할 문서의 MIME타입과 캐릭터 인코딩 지정

import - JSP 페이지에서 사용할 자바 클래스를 지정

session - JSP페이지가 세션을 사용할지 지정한다 true/false 로 지정되며 기본값은 true이다

buffer - JSP페이지의 출력 버퍼크기를 지정한다 기본 버퍼크기값은 8kb이며 none일경우 사용하지않는다

autoFlush - 버퍼가 다찼을경우 버퍼의 내용을 웹 브라우저로 보낼지 말지 지정한다 true/false가있으며 기본값은true이                  다 또한 false인경우 error를 발생시킨다. 

info - JSP페이지 설명

errorPage - JSP페이지 실행중 error발생시 보여줄 웹페이지

isErrorPage - 현재 웹페이지가 errorPage인지 판단한다 true라면 errorPage 이며 flase 라면 errorPage가 아니다

                  기본값은 false이다

pageEncoding - JSP페이지 소스코드의 캐릭터 인코딩 지정

isELIgnored - 표현언어를 사용할지 안할지 지정한다 true라면 표현언어의 사용이가능하지만 flase라면 표현언어는 

                  단순 문자열로 처리된다 기본값은 false이다

deferredSyntaxAllowedAsLiteral - 단일문자를 문자열로 취급하는것을 허용할지 말지 지정한다 기본값은 false이다

trimDirectiveWhitespaces - 출력 결과에서 텍스트의 공백 문자를 제거할지 말지 지정한다 기본값은 false이다

 

3-1) contentType 속성과 캐릭터 셋

 

contentType - JSP가 생성할 문서의 MIME 타입을 입력한다

 

MIME(Multpurpose Internet Mail Extensions) - 이메일의 내용을 설명한다 / html에서는 응답 데이터의 내용을 설명한다

 

"charset= 캐릭터 셋" 의특징

- 생략이 가능하다

- 기본값이 ISO-8859-1이다 (영어와 서유럽의 문자만 포함한다 , 즉 한국어는 포함하지않는다) 

   한마디로 charset을 따로 지정해주지 않는다면 한국어는 표현할수 없다.

 

3-2) import 속성

 

import의 목적 - 자바클래스 사용시 계속해서 클래스의전체 경로를 쓰는것의 불편함을 해소

 

* - '*' 이것은 * 이전까지 작성된 패키지에속한 하위패키지를 전부 적용한다

 

3-3) trimDirectiveWhitespaces 속성을 이용한 공백 처리

 

웹브라우저 소스보기를하면 설정부분이 공백으로 바뀐다 이때

 

<%@ page trimDirectiveWhitespaces="true" %> 라고 Direct를 작성하면 응답결과에 공백이 제거된다.

 

3-4) JSP 페이지의 인코딩과 pageEncoding 속성

 

웹 컨테이너가 JSP페이지를 읽어올 때 사용할 캐릭터 셋을 결정하는 기본과정

 

BOM(Byte Order Mark) - 유니코드(UTF-8,16,32등) 이놐딩에서 Byte의 순서를 알려준다

                                 BOM이라는것이 설정돼있으면 charset속성을 찾기전까지 ASCII로 인한 오류발생이 없는것으                                   임의로 해석하였다

 

1.  파일이 BOM으로 시작되지 않는경우

 

pageEncoding 속성을 검색한다 있다면 해당속성값을 캐릭터셋으로 지정한다 없다면 다음으로 넘어간다

(단 pageEncoding을 검색하기전 ASCII가 없어야한다)

 

다음으로 contentType속성을 검색한다 존재한다면 속성의 값을 캐릭터 셋에 적용한다

(단 pageEncoding을 검색하기전 ASCII가 없어야한다)

 

두과정을 거쳐 속성의 값을 찾지못했다면 기본 값인 ISO-8859-1로 적용한다

 

즉 pageEncoding > contentEncoding > 기본Encoding 으로 적용한다

(단 pageEncoding을 검색하기전 ASCII가 없어야한다) << 이래서 맨위에 설정하는것이라 생각된다

 

2. 파일이 BOM으로 시작할 경우

 

BOM을 활용하여  PageEncoding속성을 검색후 그값을 적용한다 

BOM을 활용하여 얻은 속성값과 pageEncoding속성을 사용한 인코딩이 다르면 에러가발생한다

( BOM이 적용된다면  pageEncoding이 존재한다는 의미와 같은것같다고 임의로 해석했다

  왜냐하면 pageEncoding의 속성값을 찾지 못했을경우에대한 방법이 설명되어있지 않기때문)

 

pageEncoding 과 contentEncoding의 값이 잘못설정되면 문자가 깨진다.

 

잘못 설정된다는것이 다르다는것은 아니다 그예시로

pageEncoding을 UTF-8로 설정하고

contentEncoding을 euc-kr로 설정 할경우 문자가 깨지지않는다

 

4. 스크립트 요소

 

4-1) 스크립트릿

 

스크립트릿(Scriptlet) - JSP페이지에서 자바코드를 실행하기위해 사용하는 코드 블록

                             <% 으로 시작해서 %>으로끝난다

 

4-2) 표현식

 

표현식의 목적 - 특정값을 웹브라우저 출력결과에 포함시키기위해 사용

                     <%= 값%>

 

4-3) 선언부

 

선언부 - 스크립트릿,표현식에서 사용하기위한 메서드를 작성하는곳

표현형식 - <%! %>

 

 

5. request 기본 객체

 

request 기본 객체 - 웹 브라우저가 서버에 요청하는 정보를 담고있다

 

request 기본 객체가 제공하는 기능의 종류

 

- 클라이언트(웹 브라우저)와 관련된 정보를 읽는 기능

- 서버와 관련된 정보를 읽는 기능

- 클라이언트가 전송한 요청 파라미터를 읽는 기능

- 클라이언트가 전송한 요청 헤더를 읽는 기능

- 클라이언트가 전송한 쿠키를 읽는 기능

- 속성 처리하는 기능

 

5-1) 클라이언트 정보 및 서버 정보 읽기

 

request 기본객체는 웹브라우저(클라이언트가) 에서 전송한 정보와 서버정보를 알수있는 메소드를 제공한다

 

getRemoteAddr() - 클라이언트의 IP주소를 구한다

getContentLength() - 클라이언트가 보낸 정보의 길이를 구한다 모를경우 -1을 리턴한다

getCharacterEncoding() - 클라이언트가 정보를 보낼때 사용한 character 인코딩을 구한다

getContentType() - Contentype을 구한다.

getProtocol() - 프로토콜을 구한다

getMethod() - 정보를 전송한 방식을 구한다

getRequestURI() - URL에서 경로를 구한다 ex) port이후로 전부

getContextPath() - JSP페이지가 속한 웹 어플리케이션의 ContextPath를 구한다 ex) port이후로 첫경로만

getServerName() - 연결시 사용된 서버의 이름을 구한다.  ex) localhost

getServerPort() - 서버가 실행중인 port 번호를 구한다

 

5-2-1) 요청 파리미터 처리

 

form 태그를 이용해 (이름=값) 형식을 웹서버로 보낼수있다 이때 보내지는것을 파라미터라 한다

 

5-2-2) request 기본 객체의 요청 파리미터 관련 메서드

 

getParameter(String name) - name의 값을 구한다 없을경우 null을 반환한다

getParameterValues(String name) - name인 parameter들의 배열을 구한다 없을경우 null을 반환한다

getParameterNames() - 전송받은 파라미터의 모든 "이름"을 받는다

getParameterMap() - 전송받은 모든 "이름=값"을 받는다

 

ex) <form action="parameter를 보낼경로" method="형식">

 

5-2-3) GET방식 전송과 POST 방식 전송

 

GET

- 주소가 URL 경로뒤에 "?"와함께 이름1=값1 & .. 이름n = 값n 식으로 생성된다  URL경로 뒤에오는 부분은

  파라미터의 집합임과 동시에 쿼리 문자열(query string) 이라고 한다.

 

" = " - 이름과 값을 구분한다

"&(앰퍼샌드)" = 파라미터를 구분한다 

주소에 ?뒤에 부분을볼때 " ?type=post&returnURL=https%3A%2F%2Fshiningknowledge.tistory.com%2F90 " 

처럼기괴한이유는  파라미터값을 RFC 2396 규약에 따라 인코딩해서 전송하기 때문이다

이 기괴한부분은 '아차곡' 이라는 값을 UTF-8로 인코딩한 결과이다.

 

RFC 2396 규약 - ' '공백문자는 -->  +로 // 알파벳 과 숫자는 -->그대로 // 특수문자는 --> %HH로 표시

 

GET방식은 form이 없어도 parameter를 전송할수있다

 

POST

 

특징

-URL이아닌 데이터영역에 parameter를 저장한다

-전송할 파라미터의 길이에 제한이 없다

 

5-2-4) 요청 파라미터 인코딩

 

브라우저가 parameter를 보낼때 캐릭터 셋을 이용해 parameter를 인코딩하여 서버로 전달한다

인코딩된 parameter를 받은 서버는 캐릭터셋을 이용해 parameter를 디코딩한다

 

인코딩과 디코딩이 올바르지 못하다면 잘못된 parameter를 전달받는다

 

인코딩과 디코딩의 설정방법

 

POST의 경우

 

서버의 인코딩(웹 브라우저입장에선 디코딩)에 맞춰서 웹 브라우저측에서 인코딩을 보낸다

ex) <% request.setCharacterEncoding("utf-8") %> 이런식으로 웹페이지에 설정하여보낸다 만약 paramter보다 아래선언됐다면 utf-8(대소문자 상관없음) 이아닌 기본 인코딩형식이 적용될것이다

 

GET의경우

 

<a>태그에 쿼리문자열을 추가하여 parameter를 전달할경우 >> 서버쪽에서 웹페이지 인코딩에 맞춘다

FORM형식으로 GET방식을 지정해 parameter를 전달할경우 >> 서버쪽에서 웹페이지 인코딩에 맞춘다

URL에 직접 쿼리문자열을 추가해 parameter를 전달할 경우 >> 웹브라우저마다 경우가 다르다

ex) 크롬이면 크롬형식, 파이어폭스면 파이어폭스 형식, 익스플로어면 익스플로어형식을 말하는것이다.

(HTTP 표준에는 인코딩형식이 지정돼있지 않기때문이다

 

GET방식에서는 request.setCharacterEncoding() 이 적용되지 않는다

 

GET방식으로 전달되는 parameter값을 읽어오는 방법은 WAS마다 다르다

지금은 톰캣8version 기준으로 그방법을 알아볼것이다

 

5-2-5) 톰캣에서 GET 방식 파라미터를 위한 인코딩 처리하기

 

톰캣8 버전의 GET방식 기본인코딩 -  UTF-8

 

요청측의 인코딩방식이 UTF-8이 아닌경우 --> server.xml 파일의 <Connector> 태그를 수정

 

[톰캣설치폴더]/conf/server.xml에서

 

<Connector port="8080" protocol = "HTTP/1.1"

                connectionTimeout="20000"

                redirectPort="8443"/>

 

의 태그안에 useBodyEncodingForURI="ture" 추가 

 

useBodyEncodingForURI="ture" - request.setCharacterEncoding() 메서드와 같은 캐릭터셋을 사용한다

 

5-3) 요청 헤더 정보의 처리

 

HTTP프로토클은 헤더정보에 부가적인 정보를 담도록 규정한다.

그리고 이러한 정보를 request객체는 가지고 있다.

getHeader(String name) - 지정한 이름의 헤더 값을 구한다

getHeaders(String name) - 지정한 이름의 헤더목록을 구한다

getHeaderNames() - 모든 헤더의 이름을 구한다

getIntHeader(String name) - 지정한 헤더의 값을 정수 값으로 읽어준다.

getDateHeader(String name) - 지정한 헤더의값이 1970년1월1일 기준으로 몇초 흘러갔는지 출력 (1/1000단위)

 

6. response객체

 

response 기본 객체 - 웹브라우저에게 보내는 정보를 담는다

 

제공하는 기능 -헤더 정보 입력 / 리다이렉트 하기 등

 

6-1) 웹 브라우저에 헤더 정보 전송하기

 

response기본객체 헤더 추가 메서드 (일부)

 

addDateHeader(String name, long date) - name 헤더에 Date추가

addHeader(String name, String value) - name헤더에 문자열 value를 값으로 추가한다

addIntHeader(String name, Int value) -name헤더에 정수형 value를 값으로 추가한다

setDateHeader(String name, long date) - name헤더의 값을 Date로 지정한다

setHeader(String name, String value) - name헤더의 값을 문자열 value로 지정한다

setHeader(String name, int value) - name헤더의 값을 정수형 value로 지정한다

containsHeader(String name) - 이름이 name인 헤더를 포함하고 있을 경우 ture 그렇지 않다면 false 리턴

 

6-2)웹 브라우저 캐시 제어를 위한 응답 헤더 입력

 

JSP를 비롯한 웹개발중 DB에 내용을 추가했음에도 브라우저의 출력은 변하지 않는경우중 주된 원인중 하나는

웹브라주저 측에서 서버가 생성한 결과가 아닌 캐시에 저장된 데이터를 출력하기 때문이다

 

캐시(Cache) - 동일한 요청을 중복해서 로딩하지 않기위해 로컬PC에 저장해놓는것

 

즉 서버가 아닌 로컬pc에서 응답하기에 업데이트된 데이터를 받을수 없다.

이를 해결하기위해 HTTP는 웹브라우저가 응답결과를 캐시할것인지 말것인지 지정할수 있다.

 

response 기본객체의 헤더 추가 메서드 (일부)

 

Cache-Control(HTTP 1.1지원) - 값을 no-cache로 할경우 --> 캐시저장소에 저장된 캐시값을 사용하지않는다

                      값을 no-store로 할경우 --> 캐시저장소에 저장자체를 하지 않는다

Pragma(HTTP 1.0지원) -  no-cahce --> 캐시 저장소에 캐시저장을 하지않는다

Expires(HTTP 1.1지원) - 캐시 만료일 지정 / 만료일을 현재시간 이전으로 설정할시 저장되지 않는다.

 

HTTP1.1 사용이 일반적이지만 예외를 위해 1.0의 캐시설정도 처리하는것이 일반적이다

캐시 영역과 캐시저장소는 다른영역이다 (주관적 해석)

 

6-3)리다이렉트를 이용해서 페이지 이동하기

 

리다이렉트 - 서버에서 페이지변경을 해주는것이아닌 웹 브라우저가 직접 해당페이지를 요청하도록 지정하여 응답한다

 

URLEncoder.encode(value,"캐릭터셋 종류") - value를 인코딩 한다

 

ex)

Stirng value = "자바"'

String encodingValue = URLEncoder.encode(value, "utf-8");

response.sendRedirect("/url?name=" + encodingValue)

 

인코딩해서 보냈음에도 브라우저에따라 URL에 디코딩이 돼서 나오기도 하고 인코딩형태로 나오기도 한다

 

7. JSP주석

 

JSP주석 - <%-- 내용 --%> , html코드보기로 확인 불가능

 

[ chaper 04 필수 이해요소 ]

 

이장에서 다룰 내용

- JSP의 요처 처리 과정

-출력 버퍼

-웹 어플리케이션 폴더 구조

-war 파일

 

1) JSP처리 과정

 

JSP에 해당하는 서블릿이 존재 하지않는 경우

>JSP페이지로부터 자바코드를 생성한다

>자바 코드를 컴파일해서 서블릿 클래스를 생성한다

>서블릿에 클라이언트 요청을 전달한다

>서블릿이 요청을 처리한 결과를 응답으로 생성한다

>응답을 웹 브라우저에 전송한다

 

JSP에 해당하는 서블릿이 존재하는 경우

 

>서블릿에 클라이언트 요청을 전달한다

-서블릿이 요청을 처리한 결과를 응답으로 생성한다.

>응답을 웹 브라우버에 전송한다

 

톰캣경로\work\catalina\localhost\프로젝트명\org\apache\jsp 에 들어가보면

JSP를 처리기위해 생성했던 JSP를변환한 자바소스코드/서블릿 클래스가 들어있다

 

JSP를 실행한다 - JSP페이지를 컴파일한 서블릿클래스를 실행한다

 

02) 출력 버퍼와 응답

 

JSP페이지는 응답 결과를 버퍼에 저장후 한번에 웹브라우저로 전송한다

 

장점

- 데이터 전송 성능 향상

- JSP 실행 도중에 버퍼를 비우고 새로운 내용 전송 가능

- 버퍼가 다 차기 전까지 헤더 변경 가능

 

HTTP프로토콜 규정중 한가지 - 응답 상태코드,헤더정보를 가장먼저 웹브라우저에보내야한다 

                                         >> 처음 버퍼가오기전까진 헤더의변경이 가능하며 이후는 변경해도 적용되지 않는다

 

2-1) page 디레깉브에서 버퍼 설정하기 : buffer 속성과 autoFlush 속성

 

buffer의 크기를 킬로바이트단위로 지정할수있다 (지정하지 않았을 경우 기본 버퍼값 8kb

ex) <%@ page buffer = "4kb" %>

 

버퍼를 사용했을경우 장점과 버퍼의 지정이 가능하다는 점에서 여러가지 문제를 발생시킬수있다 

ex)

<%@ page buffer = "none"@>으로 버퍼의 사용하지 않을경우

<jsp:forward>같은경우 모아서 한번에 다른페이지로 넘기는것이 불가능해진다

 

버퍼를 모아 브라우저에 값을 보냈을경우 forward라는 응답헤더를 먼저 보낼수있지만

버퍼를 사용하지 않을경우 응답헤더가 브라우저출력 데이터값보다 먼저 갈수없다 (자의적 해석)

 

flush - 버퍼에 쌓인 데이터를 다음방향으로 전송해주며 동시에 버퍼를 비우는것

 

3) 웹 어플리케이션 폴더 구성과 URL매핑

 

서블릿/JSP 규약은 웹어플리케이션이 특정 폴더구조를 따르도록 규정한다

-> 폴더 구조를 제대로 작성하지 않는다면 웹 어플리케이션을 개발할수 없다

 

웹 어플리케이션 폴더 - webapps폴더에 생성한 폴더 ,ROOT파일등등

 

웹 어플리케이션 폴더는 아래의 3가지를 포함한다

 

tomcat8 v의 기준으로 

WEB-INF - 웹 어플레키이션 설정 정보를 담고 있는 web.xml 파일이 위치한다

WEB-INF\classes - 웹 어플리케이션에서 사용하는 클래스 파일이 위치한다

WEB-INF\lib - 웹 어플리케이션에서 사용하는 jar파일이 존재한다

 

그외 나머지 폴더에는 웹 어플리케이션에 사용될 JSP,HTML파일이 존재하게 된다

 

그러나 현재사용중인 tomcat 9v 에서는 WEB-INF\classes가 기본으로 생성되지 않았다

 

web.xml 파일이 위치해야하는 경우 

-서블릿을 직접 설정하는경우

-리스너(Listener)를 직접 설정하는 경우

-특정 URL에 속하는 JSP들에 대해 공통 속성값을 설정하는 경우

 

3-1) 웹 어플리케이션 폴더와 URL의 관계

 

웹 어플리케이션의 폴더 구조는

[톰캣]\webapps\[폴더이름] 을따르지만 URL에서는

--> http:/host:port/폴더이름/세부경로 나타난다

 

ROOT폴더는 URL에서 공백으로 처리된다

 

ROOT폴더의 기능 - ULR에서 htt://localhost:포트/로 못찾을경우 ROOT폴더의 상대경로 기준으로 다시검색하여 실행

 

reqeust.getContextPath() - JSP가 포함된 웹 어플리케이션의 컨텍스트 경로를 구한다

 

ex) ROOT안에 a.jsp파일을 생성및 안에 request.getContextpath()사용 --> 브라우저에 ""공백 출력

 

3-2) 웹 어플리케이션 폴더 내에서의 하위 폴더 사용

 

하위폴더 사용 목적 

- 웹어플리케이션 폴더 안에 모든 JSP파일을 구현하면 정리가 어렵기때문에

자연스럽게 하위폴더를 여러개 추가생성한뒤 JSP파일의 기능에 맞는 폴더에 각각정리해 작성하는것

 

4) 웹 어플리케이션 배포

 

 

웹 어플리케이션을 WAS에 배포하는 방법

- 대상 폴더에 파일을 직접 복사 ==> 웹 어플리케이션 폴더에 JSP파일을 저장한다는것과 같은 의미이다

- war(Web Application Archive) 파일로 묶어서 배포

 

4-1) 톰캣에 war 파일 배포하기

 

톰캣경로\webapps > jar cvf 파일명 *

 

c - 새로운 파일을 생성

v - 세부 정보를 콘솔(명령 프롬포트)에 표시함

f - 생성할 파일의 이름을 지정함

 

* - 현재디렉토리 하위디렉토리 모두선택한다는의미

 

즉 --> 해당경로에있는 모든파일과 폴더를 묶어서 war파일로 생성한다 

이후 톰캣을 실행하면 톰캣에는 chap04가 생성되며 이폴더는 위에적힌 경로를 갖는다

 

웹 기반 콘솔 프로그램 - 웹 어플리케이션을 배포하고 관리할수 있다

웹로직과 같은 상용 스포트웨어는 웹 어플리케이션은 웹기반 콘솔프로그램을 제공한다

하지만 이기능을 사용하는것은 매우드물다  

 

그리고 초반에 bat파일 실행에 있어서 문제를겪어서인지

1파트 마지막 챕터의 콘솔로 war파일을 배포하는 예제도 성공하지 못했다

'학원 일기 > 학원-JSP' 카테고리의 다른 글

최범균의 JSP2.3웹프로그래밍 정복 PART2 - 필수습득  (0) 2021.05.29
server폴더 문서들  (0) 2021.05.16
jsp 시작하면서 모르는것들 정리  (0) 2021.05.01
jsp7일차  (0) 2021.05.01
jsp6일차  (0) 2021.04.29