1. JSP의 개요, JSP 페이지의 구성 요소
1.1 웹 프로그래밍의 개요
'''note.
웹 프로그래밍은 항상 요청과 응답으로 이루어진다.
ex. 은행창구; front-end: 고객과의 접점
1.2 웹 프로그래밍 언어의 종류
CGI(Common Gateway Interface) : Unix 기반의 Perl 언어로 처리
'요즘에 쓰지 않음
ASP(Active Server Pages) : 마이크로소프트의 비주얼 베이직 언어 기반
PHP(Personal HomePage tools, Professional Hypertext Preprocessor)
JSP(Java Server Pages) : 자바 언어 기반
ASP.net : vb.net, C#.net 기반
'''note. 시장 점유율로 보면 국내에는 JSP가 제일 많다. 정부에서 표준으로 지정하기도 했다.
1.3 서블릿과 JSP
자바를 만든 Sun에서 정한 웹 개발 표준
1) 서블릿(Servlet) : 서버에서 실행되는 자바 코드
- 서블릿의 호출 방식
get 방식 → doGet() 실행
post 방식 → doPost() 실행
<form method="post">
- web.xml을 이용한 서블릿 매핑 방법
web.xml : 배치 기술서(deploy descriptor), JSP 프로젝트의 중요 정보들이 기록됨
<servlet>
<servlet-name>서블릿의 별칭</servlet-name>
<servlet-class>서블릿 클래스 이름</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>서블릿의 별칭</servlet-name>
<url-pattern>서블릿을 호출할 url</url-pattern>
</servlet-mapping>
2) JSP(Java Server Pages) : server에서 실행되는 자바 웹 페이지
- 자바 기반 스크립트 언어
- 자바의 기능을 그대로 사용 가능
- HTTP에 대한 클라이언트의 요청 처리/응답
- 웹 애플리케이션에서 결과 화면을 생성할 때 주로 사용
- jsp는 내부적으로 servlet으로 변환되어 실행됨
- jsp의 배포 디렉토리 : 이클립스에서 작업하는 폴더(개발용 폴더)와 다름
workspace 디렉토리\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\프로젝트\org\apache\jsp
'''note.
New Dynamic Web Project ...
Context root? 서버는 1개인데 다양한 웹 프로젝트, 이런 상황에서 웹 프로젝트를 구분하는 식별자
1.4 웹 컨테이너
웹 애플리케이션을 실행할 수 있는 컨테이너
WAS(Web Application Server)
JSP와 서블릿을 실행해 줌
주요 웹 컨테이너 : 톰캣(Tomcat, http://tomcat.apache.org), WebLogic 등
1.5 JSP의 기본 문법
scriptlet(스크립틀릿) '''코드
<% 자바코드 영역 %>
expression(표현식) : 웹 브라우저에 출력
<%= 식 or 값 %>
<% out.println(식 or 값); %> ''과 같은 코드
JSP 선언부
<%! 전역변수, method 선언 %>
1.6 주석(comment)
java 주석
// 한 줄 주석
/* 여러 줄 주석 */
html 주석 : <!-- -->
sql script file 주석 : --
'''언어를 여러 개 쓰다보니 주석이 헷갈릴 수도 있다
1.7 JSP page에서의 import 방법
1행에 1개씩 import
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.util.Calendar" %>
1행에 여러 개 import
<%@ page import="java.text.SimpleDateFormat, java.util.Calendar %>
1.8 page 모듈화
Front end (사용자 화면, JSP 페이지-View)
Back end (톰캣 콘솔 창, Model & Controller)
'''MVC pattern
Model : 데이터 처리
View : 화면 처리
Controller : 프로그램의 흐름을 제어
'''
<%@ include file="불러올 페이지 주소" %>
1개의 클래스로 컴파일 됨(변수 공유 가능)
<jsp:include page="불러올 페이지 주소" />
2개의 클래스로 컴파일 됨(변수 공유 x, 정적인 페이지)
1.9 http status code(http 상태 코드)
200 - success
403 - 권한 문제
404 - 잘못된 url
500 - internal server error(서버의 논리적인 오류)
톰캣의 console 확인
1.10 웹페이지의 호출 방식
- post 방식
body를 통해 정보 전송
정보가 주소창에 노출되지 않음
대용량 자료 전송 가능
- get 방식
데이터를 header에 붙여서 전송(주소창에 표시)
기본적인 방식, 보안에 취약
1.11 페이지 이동 방식
1. 자바스크립트 : location.href="이동할 주소";
2. JSP
forward : 화면 전환(주소는 고정), 대용량 데이터 전송 가능, 이동할 주소에 context path 기본 포함
ex. String page="/memo/memo_view.jsp";
RequestDispatcher rd = request.getRequestDispatcher(page);
rd.forward(request, response);
redirect : 화면 전환 + 주소 변경, 소용량 데이터 전송
이동할 주소에 context path 포함해야 함
ex. String page = request.getContextPath() + "/memo.do";
response.sendRedirect(page);
1.12 charset(Java의 인코딩 방식)
iso-8859=1 : Java의 기본 인코딩(서유럽 언어)
ms949 or euc-kr : 한국어(다국어 지원 x) '''Eclipse에서 이게 기본 설정이 이걸로 되어 있음
utf-8 : 한국어(다국어 지원) - 권장
1.13 Query String 변수 사용 방법
String type만 넘길 수 있음
보낼 때 : url?변수=값&변수=값
ex. ParamServlet?id=kim&age=20
받을 때 : request.getParameter("변수")
ex. request.getParameter("id") → kim
request.getParameter("age") → 20
1.14 실습예제
01) date.jsp
'''note
html: 정적인 컨텐츠를 제공
jsp: 동적인 컨텐츠를 제공 (서버에서 실행됨)
javascript: 동적인 컨텐츠 (클라이언트에서 실행됨)
02) pageDirective.jsp
'''
WORKSPACE\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\jsp01\org\apache\jsp
03) color.jsp 51;25 페이지 모듈화
04) config.Constants.java 51;25
05) test.jsp 51;57
06) includeDirective.jsp 53;07
데이터베이스 연동 작업
08) book.sql 01;17;51
09) book.BookDTO.java 01;26;03
10) config.DB.java 01;27;11
11) book.BookDAO.java
12) declarationTest.jsp 01;12;03
13) expressionTest.jsp 02.28;21
14) ifTestForm.jsp
15) ifTest.jsp 32;39 39;28
C:\Program Files\Apache Software Foundation\Tomcat 8.0\conf\server.xml을 에디터로 오픈Notepad++ 강추
JDK : Java Development Kit 자바 개발도구(컴파일러 + JRE)JRE : Java Runtime Environment 자바 실행 환경
16) web.xml에 코드 추가
<servlet>
<servlet-name>while</servlet-name>
<servlet-class>ch03.WhileController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>while</servlet-name>
<url-pattern>/ch03_servlet/*</url-pattern>
</servlet-mapping>
'''note.
클래스를 웹에서 호출하려면 이름으로 직접 호출할 수 없으므로 매핑을 해줘야 한다.
주소의 구성: http://호스트:포트/컨텍스트패스/디렉토리/페이지
RequestDispatcher: 요청 정보를 분석하는 클래스
17) whileTestForm.jsp 52;44
18) ch03.WhileController.java 52;49
19) while_result.jsp 01;09;22