표준기술 - J2EE(Enterprise Edition), J2SE(Standard Edition), J2ME(Micro Edition), 기타 java, javax package
준표준기술 - Library(functional), Framework(architectural)
Layered Architecture Style
1. Presentation Layer
- 표준 : JSP/Servlet
- 준표준 : MVC Framework (Struts + Webwork -> Struts2, Spring MVC)
2. Business Layer
- 표준 : EJB
- 준표준 : Container Framework (Spring Framework)
3. Data Persistence
- 표준 : JDBC
- 준표준 : Data Mapping Framework(iBatis),OR Mapping Framework(Hibernate)
Enterprise System
- 다수의 Request 발생 -> User 증가 -> web(JSP/Servlet)
- 다수의 Transaction 처리 -> Distribute 환경 -> EJB
Servlet/JSP 주요 객체
| client 요청 data | service method의 argument | 요청 시 생성 응답 시 소멸 | 하나의 요청이 끝날 때까지 공유 |
| client 응답 data | |||
| web.xml의 Init Parameter data (runtime 시 변경되지 않으며 유지보수 시 사용하기 위한 환경설정 | getServletConfig() | Servlet과 동일 | |
| Web App 대표 | getServletContext() | Server 시작/종료 시 생성/소멸 | 모든 사용자의 모든 요청 시 공유 |
| client side 상태 정보값 | new Cookie | ||
| server side 상태 정보값 | request.getSession() | 프로그램에서 제어 | 현 사용자의 모든 요청 시 공유 |
| 다른 JSP/Servlet 실행 목적 | context.getRequestDispatcher |
Tools
Ant : XML 형식의 빌드 파일을 이용하여 Source Code 입력 이외 모든 것 자동화
Junit : 자동화된 단위 테스트 구현
Log4j : XML 또는 properties 로그 정책 명시
Custom Tag (Tag Library)
1. Script Tag : <%--, <%, <%=, <%!, <%@
2. Action Tag : <jsp:useBean [ getProperty | setProperty | forward | include...]
3. Custom Tag : 개발자들이 직접 Action tag를 정의, 여러 JSP에서 반복되는 긴 자바코드 or HTML을 Tag로 대체
Tag Comparison
1. <%@ include file="b.jsp" %> : static include (compile 단계), dynamic include에 비해 성능이 아주 약간 더 빠름
2. <jsp:incude page="b.jsp" /> : dynamic include, 변경 시 유지보수 용이, 동일 Web Application 내의 file만 참조 가능 ( ServletContext - RequestDispatcher 이용)
3. <c:import url="b.jsp" /> : dynamic include, 모든 서버 내 file 참조 가능 (Network Program으로 변경)
page redirection
forward 방식 : ServletContext - RequestDispatcher - forward, url 변경이 없으며 새로고침 시 본래 페이지로 이동, 이전 상태 데이터 획득을 위해 Request 객체에 의해 데이터 공유 가능
redirect 방식 : HttpServletResponse - sendRedirect, 브라우저가 현재 페이지의 응답을 client측에 전달하고 다른 페이지로 이동, url 주소 변경 및 새로고침 시 이동한 페이지를 다시 로딩, 이전 상태 데이터 획득을 위해 request객체 대신 Cookie 또는 Session 이용해야 함