JavaServerPage 전혜영
목차 JSP란… Java Life Cycle JSP기본 문법 ActionTag Cookie / Session MVC Pattern
JavaServerPage JSP의 장점 운영체제나 웹서버에 독립적으로 운영 코드 부분을 손쉽게 에디터를 이용 가능 <태그> 형식으로 작성하나 서블릿으로 자동 변환 [ 참고 ] 익스플로우(5.x) 환경 설정 도구 – 인터넷 옵션 – 고급 – “HTTP오류메세지표시” 해제하면 서버가 보내준 에러 페이지를 확인 가능
Java Life Cycle jspInit ( ) _jspService ( ) jspDestroy ( ) class 파일존재? NO JSP -> 서블릿파일 YES JAVA -> CLASS jsp요청 M에 로딩? jspInit ( ) NO YES _jspService ( ) jspDestroy ( )
JSP 기본 문법 Directive <%@ %> Scripting Declaration <%! %> member 선언시 Scriptlet <% %> 자유로운 자바코드 Expression <%= %> 출력 ActionTag <jsp:tagname /> 주석 <!-- HTML 주석 <%-- JSP 주석 --%> <% // %> <% /* */ %>
1.Scripting Element 선언식 (Declaration) [2] 스크립틀릿 (Scriptlet) <%! 멤버필드 OR 메소드 선언 %> <jsp:declaration> 자바코드 </jsp:declaration> 클래스 멤버 필드나 메소드를 선언시에 사용 [예] jspInit() / jspDescroy() 선언시 [예] 여기에 선언된 변수는 _jspService() 밖에 선언 [2] 스크립틀릿 (Scriptlet) <% 자바 코드 %> _jspService()안에 직접 코딩 [3] 표현식 (Expression) <%= 함수나 변수 %> <jsp:expression> </jsp:expression> 어떤 출력 값을 직접 끼워 넣고자 할 때 서블릿의 out.print()에 삽입되기에 세미콜론(;)을 넣으면 안됨
_jspService() 내장객체 request HttpServletRequest response HttpServletResponse out PrintWriter session HttpSession application ServletContext config ServletConfig page this와 유사한 개념 pageContext PageContext exception Exception
2.Directive Element page include taglib 변환될 서블릿이 필요로 할 클래스들을 import 하거나 문서 형식등을 설정시 include 이 페이지에 다른 파일을 껴서 사용하고자 할때 taglib 사용자 정의 태그 사용시
2.1page directive 속성 <%@page import=“java.util.ArrayList” %> contentType errorPage isErrorPage isThreadSafe session buffer autoflush extends info pageEncoding
JavaBeans 컴포넌트 개념으로 재사용이 가능한 자바 클래스 ActionTag를 사용 ( xml문법 ) 장점 JSP에서 자바 코드가 없어진다 객체 공유가 간단해진다 화면 폼의 입력값을 객체에 저장하는 일이 간단해진다 Bean 사용시 주의점 빈클래스의 생성자는 인자가 없어야 한다 빈클래스는 public으로 선언된 멤버변수를 지정하지 않고 setXXX() / getXXX()를 이용 ( 권장 )
ActionTag 종류 <jsp:useBean> <jsp:setProperty> <jsp:getProperty> <jsp:include> <jsp:forward> <jsp:plugin>
객체 생성<jsp:useBean> <jsp:useBean id=‘객체명’ class=‘클래스명’ scope=‘범위’/> <jsp:useBean id=‘bean’ class=‘pack.ABean’/> <% pack.ABean bean = new pack.ABean() %> scope에 범위를 지정하면 다른 페이지에서도 빈객체를 공유
빈의 공유 page request session application - PageContext 객체에 저장 ( 기본값 ) - ServletRequest 객체에 저장 session - HttpSession 객체에 저장 application - ServletContext 객체에 저장
조건에 따라 빈 생성 <jsp:useBean ~~> 문장들 </jsp:useBean> 새로운 빈이 생성될 때만 “문장들”이 시행되기에 여러 페이지에서 빈을 공유시 초기화하는 용도로 사용한다
속성<jsp:getProperty> <jsp:getProperty name=‘빈객체명’ property=‘속성이름’/> name : <jsp:useBean>의 id 값과 동일 property : 빈클래스의 getXXXX()의 XXXX에 해당되는 이름 ( 첫글자만 소문자 ) <jsp:getProperty name=‘bean’ property=‘attribute’/> <% bean.getAttirbute(); %>
속성<jsp:setProperty> <jsp:setProperty name=‘빈객체명’ property=‘속성이름’/> name : <jsp:useBean>의 id 값과 동일 property : 빈클래스의 setXXXX()의 XXXX에 해당되는 이름 ( 첫글자만 소문자 ) <jsp:setProperty name=‘bean’ property=‘attribute’/> <% String a = request.getParameter(“attribute”); bean.setAttirbute( a ); %> 만일 폼의 각 요소 이름과 빈의 속성이름이 대소문자까지 모두 일치하다면 *문자 사용이 가능 <jsp:setProperty name=‘빈즈객체명’ property=‘*’/>
동적 페이지 삽입 메인 페이지가 요청을 받는 시점에서 다른 페이지를 삽입하는 경우 <jsp:include page=‘Relative url’ flush=‘true’/> JSP 1.1의 경우 flush의 속성값이 true로 고정되었으나, JSP 1.2에서는 선택이고 기본값이 false이다 포함되는 페이지가 변경되어도 메인 페이지를 수정할 필요가 없다
비교 1 - <jsp:include> request 시 main.jsp ~~~~~ <jsp:include page=‘sub.jsp’/> sub.jsp =====
비교 2 - <%@ include file=‘url’ %> main.jsp ~~~~~ <%@ include fiel=‘sub.jsp’ %> _main_jsp.java ~~~~~ ===== 서블릿 변환시 sub.jsp =====
페이지 전환 <jsp:forward page=‘url’ /> 기존의 request 연결을 유지하면서 서버상의 url로 request 정보를 전달 서블릿상에서 RequestDispatcher rd = getServletContext().getRequestDispatcher(“url”); rd.forward( request, response ); <참고> response.sendRedirect(“url”); 이는 기존 연결을 끊고, 새로운 url로 재접속을 하기에 요청정보를 유지하지 못한다
JSP에서 애플릿 삽입 브라우저에서 자바2 플랫폼을 지원하도록 하는 매커니즘 자바 플러그인 사용시 테그 Explorer : <object> Nescape : <embed> JSP에서는 <jsp:plugin> 지원 <jsp:plugin type=‘applet’ code=‘애플릿클래스명’ codebase=‘디렉토리경로’ width=‘300’ height=‘300’/> type : applet or bean 다른 속성은 html의 <applet> 속성과 동일 <jsp:plugin>은 사용자의 브라우저가 자바 플러그인을 실행시킬 수 있는지에 따라 결정되기에 실패시 출력할 컨텐트를 정하도록 지원 <jsp:fallback> 죄송..자바를 지원하지 못했습니다 </jsp:fallback>
Model 1 Architecture
Model 2 Architecture
MVC Pattern 서블릿이 초기 요청을 분석하여 처리한 후 그 결과치를 다른 JSP 페이지로 전송하는 방식 request Servlet Bean response JSP
3-Tier Web Architecture
Java 2 Platform, Enterprise Edition
Java Naming and directory Interface