안드로이드&IOS 앱 개발자 양성

안드로이드&iOS 앱 개발자 양성(48일차) - Java Web Programming을 하기 위한 환경 설정, Web Project 생성, HttpServlet과 JSP, 프로젝트 구조, 내장 객체

HRuler 2020. 6. 15. 18:50

 

더보기

 ** Java Web Programming을 하기 위한 환경 설정
1. JDK를 설치
2. Web Container 설치
3. IDE 설치

 ** Web Project 생성
1. Dynamic Web Project 생성
2. 프로젝트 이름 설정
3. 컴파일되어야 하는 파일(java)을 작성하는 위치(src)와 컴파일돼서 클래스가 만들어지면 저장될 위치(WebContent/WEB-INF/classes)의 디렉토리를 설정
4. 루트 디렉토리를 설정과 web.xml 파일 생성 여부를 결정

 ** HttpServlet과 JSP
1. HttpServlet
2. JSP(Java Server Pages)
3. 차이점
4. 애플리케이션 배포를 다시 실행해야 하는 상황은 가급적 만들지 않는 것이 좋다.

 ** 프로젝트 구조
1. Java Resources/src
2. WebContent

 ** JSP
1. JSP 문서의 기본 구조
2. 실행 원리
3. 구성요소
4. Directive
5. Script
6. 랜덤한 1~45의 숫자 6개를 생성해서 출력
7. VO(Variable Object - Data Transfer Object - Domain Class : 여러 개의 데이터를 묶어서 하나의 데이터로 표현하기 위한 클래스 - 관계형 데이터베이스의 테이블과 유사한 개념) 클래스의 List를 만들어서 제어문을 이용해서 출력하기
8. 선언
9. Comment

 ** 내장 객체
1. 종류

 ** Java Web Programming을 하기 위한 환경 설정

1. JDK를 설치

 - Java EE 버전을 설치해야 Java Web Programming을 할 수 있는데 웹 컨테이너를 이용하거나 Spring과 같은 프레임워크를 이용하는 경우에는 Java SE 버전으로도 가능하다.

 - Oracle 웹 사이트나 Open JDK 웹 사이트에서 JDK SE 버전을 다운로드하여서 설치한다.

 - 환경 변수 설정 - Max은 할 필요가 없다.

 - Windows 나 Linux에서만 수행한다.

1) JAVA_HOME : 경로를 줄여서 쓰기 위해 자바가 설치된 경로를 설정하는데 원래 없는 항목이므로 환경변수를 생성해서 설정

2) CLASSPATH : 원래 없는 항목인데 JAVA가 실행될 때 클래스를 찾는 순서를 설정하는데 .;자바가 설치된 경로의 lib\tools.jar 로 설정

 - .은 현재 디렉토리를 의미하고 tools.jar 파일은 자바의 기본 클래스를 가지고 있는 파일을 의미한다.

 - IDE를 사용해서 개발하는 경우에는 IDE가 설정을 해서 실행하기 때문에 대부분 생략한다.

3) path : 원래 존재하는 항목으로 콘솔에 명령어를 입력했을 때 명령어를 찾는 위치를 설정하는 항목으로 자바가 설치된 디렉토리에 bin 디렉토리를 설정

 - Linux에서 파일을 직접 열어서 설정

4) JRE_HOME : 원래는 없는 항목으로 Java로 만들어진 프로그램이 사용할 JER의 경로를 설정하는 항목으로 Java가 여러 버전이 설치되어 잇는 경우에 설정

- Mac은 기본 프로그램이 Java와 Python으로 많이 만들어져 있어서 Java 와 Python 설정은 별도로 하지 않고 설치만 하면 됨

2. Web Container 설치

 - JavaScript가 아닌 프로그래밍 언어로 개발한 내용을 HTML로 변환해서 Web Server에게 전달해주는 프로그램을 Web Container라고 한다.

 - 다른 말로 Web Application Server 라고도 한다.

 - Java Web Container는 여러 종류가 있는데 우리는 Apache Tomcat을 사용

 - Windows는 설치 버전과 압축 버전이 있는데 압축 버전은 압축을 푸는 것 만으로 설치가 된 것이다.

 - Mac이나 Linux에서는 압축 버전만 존재하기 때문에 다운로드 받아서 압축을 해제하면 된다.

 - 서버를 시작할 때는 startup.bat(Mac은 startup.sh) 파일을 실행하면 되고 종료할 때는 shutdown.bat(Mac은 shutdown.sh)을 실행하면 된다.

 - 설정을 하지 않고 사용하면 포트 충돌 때문에 실행이 안되는 경우가 있는데 이 경우는 2곳의 포트를 확인한다.

 - config 디렉토리의 server.xml 파일을 열어서

<Connection port = "8080" redirectPort = "8443".../> 이 부분의 8080을 다른 포트 번호로 변경한다.

 - 오라클이 설치된 경우 오라클이 8080 포트를 사용하기 때문에 발생하는 현상이다.

<Server port = "-1" shutdown = "SHUTDOWN" /> 이 태그의 포트번호가 -1로 된 경우 8005 형태로 수정한다.

 - 모든 컴퓨터에서 일어나는 현상은 아니고 일정한 컴퓨터에서만 발생한다.

3. IDE 설치

1) Ecipse - Java EE 버전으로 설치

 - 전자 정부 프레임워크, STS, AnyFramework 등은 전부 Eclipse에 플러그 인 만 설정한 IDE이다.

2) Intelli J

 - community 버전(무료 버전)은 Web Programming을 못함

3) Windows 용을 설치한 경우 인코딩을 전부 UTF-8로 변경

코드 실행 시 chrome을 기본 브라우저로 설정
인코딩 방식의 설정을 UTF-8로 변경하는 설정

 ** Web Project 생성

1. Dynamic Web Project 생성

2. 프로젝트 이름 설정

3. 컴파일되어야 하는 파일(java)을 작성하는 위치(src)와 컴파일돼서 클래스가 만들어지면 저장될 위치(WebContent/WEB-INF/classes)의 디렉토리를 설정

4. 루트 디렉토리를 설정과 web.xml 파일 생성 여부를 결정

 - 컴파일할 필요가 없는 파일들을 생성하는 디렉토리로 기본 이름은 WebContent이고 IDE에 따라서는 webapp 디렉토리로 만들어지기도 한다.

 - web.xml은 프로젝트 설정 파일로 WebContent/WEB-INF 디렉토리에 생성됨

 - 없으면 tomcat 설치 디렉토리의 config 디렉토리에서 복사해와도 된다.

 ** HttpServlet과 JSP

1. HttpServlet

 - URL을 이용해서 실행할 수 있는 Java EE의 클래스

 - Java SE를 설치한 경우에는 Tomcat 디렉토리에서 servlet-api.jar 파일을 프로젝트의 WEB-INF/lib 디렉토리에 복사해야 사용 가능

 - 이 클래스를 상속받는 클래스를 만들면 매핑되는 URL 요청이 처음 왔을 때 웹 컨테이너가 인스턴스를 생성하고 하나의 인스턴스를 이용해서 모든 요청을 스레드로 처리한다.

 - 이 클래스는 웹 브라우저에 HTML을 출력할 수 있는데 자바 코드 안에 작성해야 해서 작성하는 것이 어렵다.

 - 서블릿은 주로 Controller의 역할(요청이 오면 필요한 로직을 호출)만 수행하는 경우만 많다.

 - 이 클래스의 내용을 수정하면 컨테이너를 다시 실행시켜야 변경된 내용이 적용된다.

1. Java Resources/src에 Servlet 생성
2. Servlet 생성 시 패키지 이름과 클래스 이름은 무관하므로 아무거나 기입해도 상관없다.
3. 나중에는 URL mapping 부분을 수정하거나 더하거나 제거하는 등을 수행한다.
처음 생성 시에 오류가 나는데 WebContent/WEB-INF/lib 디렉토리에 servlet-api.jar 파일을 넣어주어 오류를 없애준다.
서블릿으로 웹 브라우저를 구현한 코드 및 구현 화면

2. JSP(Java Server Pages)

 - HttpServlet을 이용해서 HTML을 출력하는 것이 너무 번거로워 만든 Spect이다.

 - HTML 페이지 안에 Java 코드를 작성할 수 있도록 만든 것이다.

 - JSP 페이지에 해당하는 URL을 호출하면 JSP 코드는 HttpServlet 클래스의 코드로 변환되고 인스턴스를 만들어서 요청을 처리한다.

 - JSP와 Servlet은 쌍으로 발전하게 된다.

3. 차이점

 - 서블릿은 코드를 작성하고 실행을 하면 class 형태로 존재하다가 첫 번째 요청이 오면 인스턴스를 만들고 이 인스턴스 한 개를 가지고 모든 요청을 처리한다.

 - JSP는 코드를 작성하고 실행을 하면 코드 상태로 존재하다가 요청이 오면 서블릿 클래스로 변환이 되고 인스턴스를 만들어서 요청을 처리하고 삭제가 된다.

 - 서블릿은 수정하면 컴파일을 다시 해야 하기 때문에 애플리케이션을 다시 배포해야 한다.

 - JSP는 수정한 후 요청만 다시 하면 되기 때문에 배포를 다시 할 필요가 없다.

4. 애플리케이션을 배포를 다시 실행해야 하는 상황은 가급적 만들지 않는 것이 좋다.

JSP File 만들 때 WebContent 디렉토리에 생성
생성할 JSP 파일의 이름 기입
생성할 JSP file의 종류 지정
위와 같이 JSP 파일을 생성한 후 JAVA 언어로 코딩한 후의 웹 브라우저 화면

 ** 프로젝트 구조

1. Java Resources/src

 - 컴파일을 수행하는 디렉토리

 - .java 파일은 반드시 이 디렉토리 안에 만들어져야 한다.

 - .java 파일은 컴파일을 해서 WebContent/WEB-INF/classes 디렉토리에 배치

 - 컴파일을 할 필요가 없는 파일은 WebContent 디렉토리에 배치

 - 이 디렉토리에 만든 파일이 제대로 동작하지 않을 때는 [Project] - [Clean]이라는 메뉴를 실행해서 기존의 클래스들을 전부 삭제하고 새로 컴파일해서 클래스를 만들어 달라고 할 수 있다.

 - 이런 경우에 클래스를 지우고 다시 작성하기도 한다.

 - 이클립스는 현재 작성 중인 소스 코드를 컴파일하려고 하는 특성이 있기 때문에 클래스로 만들어지지 않은 자바 코드를 다시 작성하면 실행되는 경우가 있다.

[Project] - [Clean]이라는 메뉴

2. WebContent

 - 루트 디렉토리

 - 이 안에 있는 내용만 애플리케이션이 사용할 수 있다.

 - WebContent/META-INF : web.xml을 제회한 설정 파일들을 저장하는 디렉토리, context.xml 파일을 여기에 배치하는데 최근에는 이 디렉토리를 거의 사용하지 않음

 - WebContent/WEB-INF : web.xml 파일이 존재해야 하는 디렉토리이다.

 - web.xml 파일은 반드시 이 디렉토리에 위치하여야 한다.

 - WebContent/WEB-INF/lib : 외부 라이브러리가 위치해야 하는 디렉토리이다.

 - WebContent/WEB-INF/classes : 클래스가 위치해야 하는 디렉토리, 코딩한 클래스는 모두 여기에 위치하여야 한다.

 ** JSP

1. JSP 문서의 기본 구조

 - HTML 안에 JSP 문법의 코드를 삽입하는 방식이다.

 - JSP 파일은 JSP 문법의 코드를 먼저 컴파일해서 실행하고 그 결과를 HTML에 추가하는 방식으로 동작한다.

 - JSP 문법의 코드가 위치에 상관없이 먼저 수행된다.

2. 실행 원리

 - 순서 : 사용자의 요청 -> JSP 페이지를 찾음 -> 서블릿 코드로 변환 -> 서블릿 인스턴스를 생성 -> 필요한 메소드를 호출해서 요청을 처리 -> 결과를 HTML 코드에 추가해서 출력

 - 매 요청마다 클래스를 만들고 인스턴스를 만들어서 처리

 - 내용이 변경되면 바로 적용이 된다.

3. 구성요소

1) Directive

2) Script : Scriptlet, Expression, Declaration

3) Implicit Object(내장 객체)

4) Expression Language(표현식)

5) Action Tag(JSP 문법의 태그)

6) Custom Tag - 사용자 정의 태그로 JSTL이 대표적

4. Directive

 - JSP 페이지에 대한 설정을 위해 사용한다.

 - <%@ 디렉티브이름 속성 = "값" 속성 = "값"... %>

1) 디렉티브 이름

 - page : 페이지에 대한 설정을 위해 사용한다.

 - taglib : 사용자 정의 태그라이브러리를 설정한다.

 - include : 다른 문서를 포함할 때 사용한다.

2) page 디렉티브 속성

 - import : 패키지 이름을 생략하기 위해서 사용한다.

 - session : 세션 사용 여부를 설정하는 것으로 기본값은 true이다.

 - errorPage : 에러가 발생했을 때 보여질 페이지 설정이다.

 - isErrorPage : 에러 페이지 여부를 설정하는 것으로 이 설정이 true이면 exception 객체를 사용할 수 있다.

 - pageEncoding : 문자 인코딩 설정으로 이 설정이 없거나 utf-8이 아니면 경고가 발생한다.

 - trimDirectiveWhitespace : 공백 제거해주는 속성이다.

5. Script

1) Scriptlet : jsp 파일에서 자바코드를 쓰기 위한 방법

<% 자바코드 %>

2) Expression : jsp 파일에서 자바의 데이터를 출력하기 위한 방법

<%= 자바데이터 %>

6. 랜덤한 1~45의 숫자 6개를 생성해서 출력

7. VO(Variable Object - Data Transfer Object - Domain Class : 여러 개의 데이터를 묶어서 하나의 데이터로 표현하기 위한 클래스 - 관계형 데이터베이스의 테이블과 유사한 개념) 클래스의 List를 만들어서 제어문을 이용해서 출력하기

1) VO 클래스 생성 -> domain.DataStructure

2) jsp 파일을 생성해서 위 클래스의 List를 생성하고 출력하기

3) 새로운 클래스를 생성했기 때문에 서버를 중지시키고 다시 실행 시켜야 한다.

 - 위 2)는 서버를 중지시키지 않았기 때문에 실행은 되지만 오류가 나서 eclip가 서버를 중지시키고 다시 실행시킨다.

8. 선언

1) <%

                  선언

1) %>

 - 이렇게 선언한 내용은 인스턴스가 각각 별도로 소유한다.

 - jsp 파일을 2번 요청하면 2번 선언한다.

2) <%!

                  선언

1) %>

 - 이렇게 선언한 내용은 클래스가 소유 : static

 - jsp 파일을 2번 요청해도 1번 선언

3) jsp 파일에 quick sort를 위한 메소드를 생성하고 사용

9. Comment

<%-- 주석 --%>

 - html 주석과 java 주석이 존재하기 때문에 java 코드를 작성할 때는 java 주석(//, /* */)을 html에 주석을 달고자 할 때는 html 주석(<!-- -->)을 사용한다.

 ** 내장 객체

 - 별도로 생성하지 않고 jsp 파일에 포함되어 있는 객체이다.

 - 이 객체들은 실제로는 거의 Servlet에서 사용하고 jsp에서는 거의 사용하지 않는다.

 - jsp에서는 9개 모두 제공되지만 Servlet에서는 request와 response만 제공되고 직접 생성해서 사용을 해야 한다.

1. 종류

1) HttpServletRequest request : 클라이언트의 요청 정보를 저장한 객체

2) HttpServletResponse response : 클라이언트에게 전송하는 응답 정보를 저장한 객체

3) JspWriter out : 출력 객체 - HTML 출력

4) ServletContext application : 웹 애플리케이션 객체 - 1개만 생성

5) ServletConfig config : jsp 파일의 구성정보를 저장한 객체

6) PageContext pageContext : jsp 페이지에 해당하는 객체

7) HttpSession session : 세션 - 클라이언트 브라우저 1개에 해당하는 객체

 - 접속한 클라이언트가 10명이면 세션도 10개

8) Object page : jsp 페이지에 의해 생성된 서블릿 객체

9) Throwable exception : 예외 객체