Java Web Programming
- URL 요청이 왔을 때 Java Web Component가 그 요청을 받아서 Java를 이용해서 처리 한 후 결과를 HTML로 출력하는 것
1.환경설정
1) JDK EE 버전을 설치
- JDK SE 버전과 WAS의 라이브러리를 이용해서도 가능
- JDK SE 버전과 Spring 라이브러리를 이용해서도 가능
- 최근에는 EE 버전을 설치하지 않고 SE 버전으로 사용하는 경우가 많음
2) WAS(Web Application Server - Web Container)를 설치
- URL 요청이 오면 적절한 Java Web Component를 호출하고 Web Component가 리턴한 결과를 HTML로 변환해서 Web Server에 전달해주는 애플리케이션
- apache tomcat, zeus, IBM의 Web Logic 등 다양한 제품이 있음
- 국내에서는 apache tomcat이 많이 사용되고 공공기관 프로젝트에서는 zeus 그리고 금융권에서는 Web Logic을 사용하는 경우가 있음
3) Web Programming이 가능한 IDE를 설치
- eclipse ee 버전 : STS(Spring 전용 Eclipse), 전자정부 프레임워크(공공기관 애플리케이션 개발 전용 Eclipse), 애니 프레임워크(삼성 애플리케이션 개발 전용 Eclipse) 등
- IntelliJ 상용 버전
4) jdk se 1.8, tomcat 9.0, eclipse ee 버전을 설치
5) 기타 프로그램
- 데이터베이스 연동을 하는 경우가 대부분이라서 데이터베이스 결과를 확인하기 위한 데이터베이스 접속 프로그램(DBeaver 설치)
- 출력 결과를 확인하기 위한 웹 브라우저(Chrome 설치) : 프론트 앤드를 고려하는 경우에는 IE 도 설치
2.Java Web Component
1) HttpServlet
- URL을 이용해서 호출할 수 있는 Java Class
- 기본적으로 자바 코드로 작성하고 HTML을 만들고자 할 때는 출력 스트림을 이용해서 작성
- 처음 호출될 때 컴파일하고 class를 만든 후 instance를 만들어서 사용
- 한 번 인스턴스를 만들면 다시 만들지 않음
- 수정을 하면 서버를 다시 시작해서 다시 컴파일을 해야 합니다.
2) JSP(Java Server Pages)
- URL을 이용해서 호출할 수 있는 Java Class
- 호출하면 HttpServlet 클래스로 변환 된 후 인스턴스를 만들어서 처리
- 기본적으로 HTML 과 태그로 작성하고 자바 코드를 사용하고자 할 때 별도의 블럭을 만들어서 작성
- 요청이 올 때 마다 컴파일하고 클래스 만들고 인스턴스 만들고 처리하고 삭제됩니다.
- jsp는 수정을 한 경우 서버를 다시 시작할 필요 없고 새로 고침만 하면 됩니다.
3.Model1 과 Model2
- Web Programming에서 등장하는 용어인데 asp.net 과 java에서만 사용
- Model1 은 처리와 출력을 모두 jsp 파일에서 수행하는 형태인데 쉽게 작성이 가능하지만 유지보수가 어려움
- Model2 는 처리는 HttpServlet 을 통해서 수행하고 출력은 jsp에서 하는 방식으로 작성은 어렵지만 유지보수가 쉽다.
- 최근에는 Front End 와 Back End 구분을 하는 편이라서 Model2를 대부분 사용
4.MVC(Model View Controller) 패턴
- 역할 별로 분리를 해서 프로그래밍하는 패턴
- 유지보수의 편리성 때문
1) Model: 작업을 처리해서 결과를 만드는 부분
2) View: 작업의 결과를 출력하는 부분
3) Controller: 사용자의 요청이 오면 적절할 Model을 호출하고 그 결과를 View에 전달해서 출력하도록 해주는 부분
4) 최근에는 View를 직접 생성하지 않고 Controller에서 데이터만 리턴하는 경우도 있음
- csv, excel, pdf, xml, json 등의 형식
- csv, excel 은 변경이 없는 오래된 데이터
- pdf는 보고서
- xml, json 은 수시로 변경이 발생하는 데이터
5.Eclipse 설정
1) 소스 코드와 생성되는 텍스트 파일들의 인코딩을 UTF-8로 설정(Windows에서만 수행)
- [Window] - [Preferences]에서 [General] - [Workspace] 탭에서 오른쪽의 창에서 Text file encoding을 UTF-8로 설정
2) CSS, HTML, jsp 파일의 인코딩을 UTF-8로 설정
- [Window] - [Preferences]에서 [Web] 탭에서 하나씩 선택해서 수정(Windows에서만 수행)
3) [Window] - [Preferences]에서 [General] - [WebBrowser] 탭에서 출력 결과를 확인할 웹 브라우저를 선택
- HTML5를 사용하는 경우에는 Chrome 이나 Firefox로 설정
6.Eclipse에서 Java Web Project 생성
- Dynamic Web Project 생성
- web.xml 파일을 생성하도록 프로젝트를 설정
1) 첫화면에서 프로젝트 이름과 저장 위치를 선택하고 Next
2) 두번째 화면에 나오는 디렉토리는 컴파일을 해서 클래스를 저장할 디렉토리를 설정
- src 디렉토리는 컴파일을 수행할 java 파일의 위치이고 classes 디렉토리는 컴파일이 끝나고 만들어진 class 파일이 저장될 위치입니다.
- java 파일은 반드시 src 디렉토리 안에 만들어져야 합니다.
- src 이외의 디렉토리에 저장된 java 파일은 컴파일하지 않습니다.
3) 세번째 나오는 화면에 보여지는 ContextRoot 는 프로젝트가 실행될 때의 도메인이고 ContentDirectory는 화면에 보여져야 하는 파일(html, jsp)의 디렉토리입니다.
- 체크박스는 web.xml 파일을 만들어서 포함시켜 줄 지 여부를 체크하는 것으로 체크하는 것을 권장
7.프로젝트 생성 후 디렉토리 구조
1) Java Resources
- src:Java 파일이 위치해야 하는 디렉토리
2) WebContent(webapp)
- html, css, javascript, jsp 및 각종 리소스 파일(이미지, 사운드 등)이 위치해야 하는 경로
- META-INF: context.xml(웹 자원 설정) 파일이 위치해야 하는 디렉토리
- WEB-INF: web.xml(웹 프로젝트 설정) 파일이 위치해야 하는 디렉토리
/lib
: 외부 라이브러리가 위치해야 하는 디렉토리/classes
: src에서 컴파일된 파일이 위치해야 하는 디렉토리- 직접 미리 생성해도 되지만 실행하면 자동으로 생성되는 디렉토리
8.설정 파일
1) server.xml: 프로젝트에는 없고 실행을 한번하고나면 Server 디렉토리에 생성되는 파일
- WAS 설정 파일 - 개발자는 거의 작업을 하지 않는데 was를 설치하고 실행이 잘 안될 때 수정
- -1로 설정된 포트를 양수로 변경해야 하고
- 오라클과 톰캣이 같이 설치된 경우 톰캣의 실행 포트를 8080에서 다른 포트로 변경해야 합니다.
2) web.xml: 프로젝트 설정 파일
- 프로젝트에 이 파일이 없으면 Server 디렉토리에 있는 web.xml 파일의 내용을 이용해서 프로젝트가 설정 됩니다.
3) context.xml: 외부 자원에 대한 정보를 설정을 위한 파일
9.프로젝트의 WebContent 디렉토리에 index.html 파일을 생성하고 프로젝트를 실행
- 프로젝트를 선택(html 이나 jsp 파일을 선택해도 가능)하고 마우스 오른쪽을 클릭해서 [Run As] - [Run on Server]를 선택
- 처음 실행한 경우에는 어떤 WAS를 이용해서 실행할 것인지 선택하는 부분이 나옵니다.
- [Apache Tomcat 9.0]을 선택하고 톰캣이 설치된 디렉토리를 지정해야 합니다.
- 실행이 안되면 Servers 디렉토리의 server.xml 파일을 열어서 shutdown 포트가 -1 이면 양수로 수정하고 Connector 태그의 port가 8080이고 오라클이 설치된 경우이면 8080 대신에 다른 포트 번호를 사용
- 실행을 하면 index.html 파일이 있으면 이 파일의 내용이 출력되고 없으면 404에러가 발생하는데 이 때는 주소 뒤에 작성한 html 이나 jsp 파일의 경로를 입력하면 됩니다.
10. jsp 생성
- WebContent 디렉토리에 존재
- spring 과 같은 프레임워크를 사용하기 전에는 WEB-INF 나 META-INF에 있어서는 안됨
- 마우스 오른쪽을 클릭해서 jsp 파일을 생성하면 됩니다.
11.jsp
- html 문서 안에 자바코드를 삽입하는 구조
- url에 의해 호출되면 그 때 내용을 컴파일을 해서 HttpServlet 클래스를 상속받은 클래스를 만들고 인스턴스를 생성해서 요청을 처리하고 그 결과를 WAS가 html로 변환
- 내용을 수정한 경우 새로고침만 하면 됩니다.
- jsp 파일을 만든 경우나 HttpServlet 파일을 생성했을 때 에러표시가 나는데 실행과는 상관이 없습니다.
- 이 에러 표시를 제거하고자 할 때는 Tomcat이 설치된 디렉토리의 lib 디렉토리에 있는 servlet-api.jar 파일을 WebContent/WEB-INF/lib 디렉토리에 복사해주면 됩니다.
12.HttpServlet
- URL로 호출할 수 있는 자바 클래스
- 자바 코드 안에 html을 삽입할 수 있는 구조
- HttpServlet 클래스로 부터 상속받는 클래스로 만들고 URL과 매핑을 시켜서 생성
- 처음 호출을 하게되면 컴파일을 하고 인스턴스를 만들고 이 인스턴스를 계속 사용
- 내용을 수정하면 웹 애플리케이션을 다시 실행시켜야 합니다.
13.HttpServlet 과 jsp
- 공통점은 URL을 이용해서 호출한다는 것과 인스턴스 생성을 직접 하지 않는다는 것
- 이 2가지는 WAS가 필요할 때 인스턴스를 생성
- 다른 점은 서블릿은 src 디렉토리에 만들어야 하고 jsp는 WebContent에 만들어야 한다는 것과 자바에 html을 삽입하는냐 아니면 html에 자바코드를 삽입하느냐 하는 것입니다. 실행원리도 다름