본문 바로가기

Front End

Java Web

JavaWeb



Java Web Programing 을 하기 위한 환경설정

1. JDK(자바개발 도구)를 설치

▷ se 버전을 설치합니다.

▷ 윈도우나 리눅스의 경우는 설치하고 난 후 환경변수를 설정합니다.

▷ mac은 환경변수 설정이 자동이라서 할 필요가 없습니다.

▷ 설치 확인 방법

터미널(Max 이나 Linux)이나 cmd(윈도우) 창에서 합니다.

java -version : 자바실행도구(JRE - JVM) 확인

javac -version : 자바개발도구(JDK) 확인


2. WAS(Web Application Server = WebContainer) 설치 - Apache Tomcat

▷ 서버용 프로그래밍 언어가 만든 결과를 HTML로 변환해서 웹 서버에게 전달하는 역할을 수행하는 프로그램입니다.

▷ Apache Tomcat은 웹 서버의 역할과 WAS의 역할을 동시에 수행하는 프로그램

▷ 윈도우에서는 설치 버전을 받아서 인스톨하면 되고 맥이나 리눅스에서는 압축된 버전(.tar)을 다운로드 받아서 압축을 풀기만 하면 됩니다.

▷ 서버의 시작은 bin 이라는 디렉토리에 있는 startup.sh(윈도우는 bat)를 실행하면 되고 서버의 중지는 shutdown.sh를 실행하면 됩니다.

▷ 프로그램을 실행했는데 처음 서버가 실행되지 않고 포트번호를 보여주면 이 경우는 이미 실행중이라서 실행이 안되는 경우이므로 shutdown.sh를 실행하고 난 후 하면 됩니다.

▷ http://tomcat.apache.org/에서 다운로드

▷ 기본적으로 톰캣은 8080 포트를 사용하는데 변경이 가능합니다.

▷ conf 디렉토리에 있는 server.xml 파일에서 가능합니다.

▷ windows 에 오라클 xe 버전을 설치한 경우에는 포트를 변경해야 합니다.


3. IDE(통합 개발 환경: 코드를 작성하고 실행하는 프로그램) 설치

▷ Eclipse 설치 - eclipse.org 에서 다운로드

▷ 자바 웹 프로그래밍을 하기 위해서는 Java EE 버전을 설치해야 합니다.

▷ 이클립스의 환경설정은 workspace 단위로 저장 (환경설정 바꿨는데 workspace 가 바뀌면 다시 환경설정을 바꿔주어야 함)


4. DB Server 를 설치하거나 DB 접속도구를 설치


웹 프로젝트

1. 프로젝트 생성

▷ [File]-[New]-[Dynamic Web Project]

▶ source folder : src

: java 파일은 이 디렉토리에 만들어야 합니다. 이 디렉토리에 있는 것만 컴파일 합니다.

▶ default output folder

: 컴파일 된 클래스 파일이 저장될 디렉토리.

기본은 WEB-INF/lib/classes

▶ Context root

: url에 설정될 도메인입니다.

▶ Content Directory

: 컴파일 되지 않아도 되는 파일이 위치해야 하는 디렉토리

java 소스 파일을 제외한 모든 파일들이 위치해야 하는 디렉토리

기본은 WebContent

▶ Generate web.xml

: 프로젝트 환경 설정 파일을 처음부터 만들것인지 여부를 체크하는 항목

되도록이면 체크를 해서 프로젝트 안에 처음부터 만드는 것이 좋습니다.




2. jsp파일 생성

▷ WebContent 디렉토리에 생성해야 합니다.

▷ 하위 디렉토리를 만들고 그 안에 작성해도 됩니다.

▷ META-INF 나 WEB-INF 디렉토리에 만들면 안됩니다.

▷ META-INF 디렉토리는 외부 자원에 대한 위치를 설정하기 위한 파일이 저장되는 디렉토리

▷ WEB-INF 디렉토리는 프로젝트 환경 설정에 관련된 파일이 저장되는 디렉토리

▷ jsp 파일에는 기존의 html에서 쓰던 모든 코드를 쓸 수 있다.

▷ jsp 파일을 만들면 에러가 발생할 수 있습니다.

→ jsp 파일은 HttpServlet 이라는 클래스의 인스턴스로 변환이 되는데 java se에는 HttpServlet이라는 클래스가 없기 때문입니다.

→ tomcat 프로그램의 lib 디렉토리에 있는 servlet-api.jar 파일을 프로젝트의 WEB-INF/lib 디렉토리로 복사해주면 해결됩니다.


3. Web Project 실행

▷ 처음 실행(workspace위치를 바꾸고)할 때는 WAS를 설정을 해주어야 합니다.

▷ 실행할 때 프로젝트를 선택하고 실행하면 설정 파일을 읽어서 시작할 파일을 선택합니다.

▷ jsp 파일이나 html 파일을 선택하고 실행해도 가능합니다.

▷ 포트 번호를 바꾼 후 실행 오류가 되면, 포트 번호가 사용중인 것이여서 그럴 수 있다.

그리고 실행은 되었는데 페이지가 안 뜨면 index파일이 없어서 그럴 수 있다. 그러면 파일 이름까지 주소창에 써주면 된다.

▷ mac에서 숨김파일 보기 : shift + command + .




4. 톰캣 에러

▷ 포트를 사용중이거나 서버가 이미 실행된 경우는 포트를 상용 중인 프로그램을 중지하거나 톰캣의 포트를 변경하면 되고 서버가 이미 실행 중이라서 안되는 경우는 서버를 중지시키면 됩니다.



Jsp 와 Servlet

1. HttpServelt

: url을 이용해서 호출할 수 있는 java ee의 클래스

클래스 상태로 존재하다가 사용자가 요청을 하면 인스턴스를 만들거나 기존의 인스턴스를 이용해서 작업을 처리

▷ 자바 코드 안에 html을 삽입하는 구조라서 html을 이용한 출력으로는 적합하지 않음.

클래스 상태로 존재하기 때문에 소스코드를 수정하면 서버를 재실행 해야 합니다.


2. JSP(Java Server Pages)

: 서블릿 사용이 어려워서 서블릿을 쉽게 사용할 수 있도록 만든 페이지

▷ 클래스 상태가 아닌 소스코드 상태로 존재하다가 사용자가 요청을 하면 HttpServlet 클래스로 변환하고 인스턴스를 생성해서 작업을 처리합니다.

소스코드 상태로 존재하기 때문에 수정을 하면 재실행할 필요없이 새로고침만 하면 됩니다.

▷ HTML 코드 안에 java 코드를 삽입하는 구조라서 java 코드를 작성하는 것이 불편해서 작업을 처리하는 용도보다는 데이터를 출력하는 용도로 사용하는 것이 좋습니다.



JSP

1. 디렉티브

: jsp페이지에 대한 설정을 위한 것

▷ <%@디렉티브이름 속성="값"%>의 형태로 설정

▷ 디렉티브 이름은 3가지가 있는데 page, include, taglib 입니다.

1)<%@ page import="임폴트할 패키지 이름 나열" %>


2. 스크립트

1) 자바코드를 사용하고자 하는 경우 : <% 자바코드 %>


2) 자바코드를 출력하고자 하는 경우 : <%=데이터%>

ex) Calendar 객체를 오늘 날짜를 가지고 생성해서 년 월 일을 출력

Calendar => java.util.Calendar


▷ javascript는 브라우저 외부에 접근할 수 없습니다.

자신에 도메인에만 데이터를 요청할 수 있습니다.

jsp 파일을 톰켓이 읽어서 해석을 해서 값을 대입해서 html로 바꾼다.

따라서 jsp는 어떤 수식을 써서 값이 나왔는지 알 수 없어서 보안이 좀 더 있다.


3. page trimDirectiveWhitespaces

: 이 디렉트브는 소스 코드 안에 있는 불필요한 공백을 제거해주는 디렉티브입니다.

<%@ page trimDirectiveWhitespaces="true" %>

를 jsp 페이지 상단에 추가하면 됩니다.


ex) jsp 페이지를 만들어서 20번째 피보나치 수열의 값을 구해서 출력

ex) 이름과 작품명을 Map을 이용해서 저장하고 이러한 Map을 List에 저장한 후 테이블로 출



내장 객체

▷ jsp 페이지가 만들어 질 때 자동으로 생성되서 포함되는 객체

1. request

▷ 클라이언트의 요청 정보를 저장한 객체

1) 기본 메소드

- getRemoteAddr()

: 클라이언트의 IP 주소를 문자열로 리턴

▷ windows7 이상이면 ipv6 그 이하는 ipv4 형식으로 리턴됩니다.

▷ 자기 컴퓨터에서 접속하면 0:0:‥.1 이나 127.0.0.1 입니다.

- getContextPath()

: 기본 경로를 문자열로 리턴합니다.

- getRequestURI()

: 요청 경로 전체를 문자열로 리턴합니다.

- getQueryString()

: 파라미터 부분을 문자열로 리턴합니다.


ex) 기본 메소드를 이용한 출력


2) 파라미터

▷ 클라이언트가 서버에게 전송하는 데이터
▷ query string 이라고도 합니다.

- 전송방식

get 

post 

 전송방식을 생략하거나 명시적으로 get으로 설정한 경우에 전송되는 방식

 전송방식을 명시적으로 post라고 설정한 경우에만 전송되는 방식

 파라미터를 URL 뒤에 붙여서 전송

 파라미터를 header(본문)에 숨겨서 전송

 파라미터를 URL 뒤에 붙여서 전송하기 때문에 보안이 취약하고 전달하는 데이터의 길이 제한이 있다.

 header에 숨겨서 전송하기 때문에 get 방식 보다는 보안이 우수하고 데이터의 길이도 제한이 없다.

 자동 재전송 기능이 있다.

 자동재전송 기능이 없다.

 get 방식은 인코딩을 WAS(tomcat...)에서 판단

 post 방식은 application(프로그래밍언어:java...)이 판단

 get 방식은 톰캣에서 인코딩 방식을 설정하면 인코딩 처리를 할 수 있다.

 post 방식일 때는 파라미터를 읽기 전에 request.setCharacterEncoding("인코딩방식")을 설정해주면 된다.

 속도가 post 보다 빠르다

 속도가 get보다는 느리지만 요즘 컴퓨터가 좋아져서 보안 상 post로 보내는 경우가 많다.

 

 password, textarea, file

(면접보러갈 때 한 번 보고가기)


- 작성방식

(1) url 뒤에 직접 ? 를 추가하고 이름=값& 형식으로 직접 추가하는 방법
▷ get방식으로만 전송 가능
(2) form 을 만들고 그 안에 name을 갖는 개체를 만드는 방법
▷ get과 post 모두 가능
(3) ajax 의 경우 별도로 파라미터를 묶어서 전송
▷ get과 post 모두 가능

3) 파라미터를 읽는 메소드

- String getParameter("파라미터 name")

: name에 해당하는 파라미터를 읽어서 문자열로 리텅

▷ name에 입력된 값이 없을 때는 "" 리턴

▷ 없는 name을 입력한 경우는 null이 리턴

- String [] getParameterValues("파라미터 name")

: name에 해당하는 파라미터를 읽어서 문자열 배열로 리턴

▷ Checkbox 나 select 태그 처럼 여러 개를 선택할 수 잇는 파라미터에 사용합니다.


- 파라미터 읽기

1) String getParameter(String name): 하나의 값만 넘겨주는 경우 호출

2) String [] getParameterValues(String name) : 여러 개의 값을 넘겨주는 경우 호출

select 태그에 multiple 속성을 설정 한 경우와 checkbox인 경우

▷ request 객체를 이용해서 읽습니다.


4) 파라미터의 인코딩 처리

▷ get방식은 was가 인코딩 처리를 하는데 tomcat 7.0 이상 버전 부터는 utf-8 로 인코딩을 설정합니다.

▷ 그 이하 버전에서는 requestURI='utf-8' 이라는 옵션을 서버 설정에 추가해 주어야 합니다.


▷ post방식은 파라미터를 읽는 곳에서 해야 합니다.

▷ 파라미터를 읽기 전에 request.setCharacterEncoding("utf-8"); 을 호출해서 파라미터의 인코딩을 설정해 주어야 합니다.


5) request에는 header의 값을 읽는 메소드도 존재


2. response

▷ 응답 객체 - 클라이언트에게 응답하기 위해서 사용하는 객체

1) 헤더에 데이터를 저장

▷ setHeader, addHeader 메소드를 이용해서 Map과 같은 방식으로 데이터를 저장해서 전달할 수 있습니다.


2) 현재 페이지를 캐싱하지 않도록 하고자 할 때

▷ Cache-Control 과 Pragma 라는 키에 no-cache를 설정하면 됩니다.

▷ firefox에서는 인식을 못하는 경우가 있을 수 있으므로 Cache-Control 에 no-store도 추가해 주어야 합니다.


3) 자바 코드로 페이지 이동

(1) forwarding

: 현재의 흐름을 그대로 가지고 이동하는 방법입니다.

▷ 데이터 조회를 할 때 주로 이용합니다.


(2) redirect

: 현재까지의 흐름을 종료하고 새로운 흐름을 만들어서 이동하는 방법입니다.

▷ 데이터 삽입, 삭제, 갱신을 하고 난 후 이동할 때 이용합니다.

- response.sendRedirect("이동할 페이지 경로");


3. pageContext를 이용한 forwarding 과 response를 이용한 redirect

▷ forwarding은 현재 도메인 내에서만 이동이 가능합니다.

▷ forwarding은 URL을 변경시키지 않습니다.

▷ pageContext.forwarding(포워딩할 URL을 문자열로 설정) 를 이용하면 forwarding 할 수 있습니다.


4. out 객체

▷ jsp 파일에서 html 출력을 위한 객체

▷ 서블릿에서는 response.getwriter()로 받아서 사용을 합니다.

▷ html 출력 메소드

- print(출력내용) : 모아서 출력

- println(출력내용) : 바로 바로 출력


5. web.xml

▷ 자바 웹 프로젝트 설정 파일

▷ 톰캣 기반의 자바 웹 프로젝트의 설정 파일


1) server.xml

: 톰캣 설정 파일

프로젝트를 실행하면 맨 처음 읽어 내는 파일입니다.

▷ 워크스페이스를 변경하거나 서버를 삭제하면 처음 실행될 때 톰캣 디렉토리에서 복사해서 현재 워크스페이스의 서버에 저장한 후 사용합니다.

▷ 이 파일의 내용은 일반적으로 서버 관리자가 수정을 합니다.


2) web.xml

: 자바 웹 프로젝트의 설정 파일

▷ 현재 프로젝트에 추가하면 추가한 설정을 가지고 실행이 되고 추가하지 않으면 톰캣 디렉토리에서 복사한 내용을 가지고 실행합니다.

(1) 프로젝트를 실행했을 때

▷ 외부에서 별도의 페이지 경로를 입력하지 않고 도메인만 입력했을 때 보여지는 페이지 설정

외부에서 도메인만 입력하면 animal.jsp가 출력됩니다.

  <welcome-file-list>

      <welcome-file>animal.jsp</welcome-file>

  </welcome-file-list> 


(2) 초기화 파라미터 설정

▷ 웹 프로젝트가 시작할 때 읽어올 문자열 데이터를 설정할 수 있습니다.

▷ 내용이 많을 때는 별도의 파일을 만들어서 읽어오고 내용이 많지 않을 때는 web.xml 파일에 작성을 합니다.

▷ 이 내용은 application 객체를 이용해서 읽을 수 있습니다.

<context-param>

<description>파라미터 설명</description>

<param-name>파라미터이름</param-name>

<param-value>파라미터값</param-value>

</context-param>  


6. Application 객체

▷ 웹 애플리케이션 전체에 1개만 생성되는 객체

▷ 웹 애플리케이션 내의 모든 페이지와 서블릿이 공유하는 객체


1) 초기화 파라미터를 읽는 메소드(web.xml 파일의 context-param)

 String getInitParameter(String parameter이름)

▷ 없는 이름을 사용하면 null이 리턴됩니다.


프로젝트를 재실행해서 확인


★ 변경 가능성이 있는 데이터의 저장 ***

▷ 파일이나 데이터베이스에 저장

파일의 내용을 다시 읽기만 하면 되거나 프로그램을 재실행하면 됩니다.

▷ 자바 클래스에 저장

변경이 발생하면 자바 소스 파일을 다시 컴파일해서 클래스를 만들고 재실행을 해야 한다.


개발환경과 배포환경이 다른 경우가 많은데 개발환경과 배포환경이 다른 부분을 자바 소스 코드에 작성하게 되면 개발 후 배포할 때 소스코드를 변경하게 되서 예측할 수 없는 오류가 발생할 가능성이 있습니다.


데이터 연동할 때 필요한 기본 4개 정보(오라클 아이디, 비밀번호, 등)는 이렇게 저장하는 게 좋다. 제일 자주 바뀌기 때문에

왜냐하면 데이터베이스는 테스트를 엄청 많이 해보고 하기 때문ㅇ에 자주 바뀐다.

그리고 로그 파일의 경우는 톰캣에서 제공은 하지만 회사마다 다 다른 정보를 원하기 때문이다.


2) application.log(String.msg)

WAS의 logs 디렉토리에 날마다 텍스트 파일을 만들어서 log 안의 내용을 기록합니다.

일반적으로 log는 제공되는 파일을 사용하지 않고 별도의 파일을 생성해서 기록을 합니다.

자바에서 문자열을 파일에 기록할 때 사용하는 클래스는 java.io.PrintStream 클래스 입니다.

'Front End' 카테고리의 다른 글

커스텀태그(JSTL)  (0) 2018.08.30
el  (0) 2018.08.29
javabean & error  (0) 2018.08.29
쿠키와 세션  (0) 2018.08.28
[0827]javaweb2  (0) 2018.08.27