< JSP의 개요 > 1. 소개 : Java Server Page 약자이며, Java의 웹서버        프로그램 스펙(servlet)으로 변환되어 서비스   된다. 2. 웹 배경 기술  (1) Client Side Language      <1> HTML   <2> CSS   <3> javascript    (2) Server Side Language     <1> ASP  <2> PHP  <3> JSP   <4> Servlet   (3) Java Web Server      <1> Weblogic  (by BEA) - JSP/EJB  <2> WebSphere (by IBM) - JSP/EJB   <3> 제우스    (by 티멕스소프트) - JSP/EJB  <4> RESIN    <5> JRun   <6> Tomcat ( 표준 서버  by apache group )      ...........  (4) DBMS     <1> Oracle  <2> MS-SQL   <3> MY-SQL    <4> ACCESS    .....    (5) 궁합      <1> unix + JAVA/JSP + oracle + weblogic  <2> windows + ASP/ASP.net + ms-sql + IIS  <3> linux + PHP + my-sql + Apache ( APM )    (6) 근간 기술     <1> HTTP(HyperText Transport Protocol) 프로토콜      - 웹서버와 웹클라이언트(웹브라우져)간에 통신    프로토콜  - Request 와 Response 의 객체 통신   - 단락형 연결 (Request/Response)  - Request/Response 의 구성인자 3가지    - Request/Response line part       ex) GET /index.html HTTP/1.0    - header part        ex) User-Agent : Mozilla/2.0Gold(WinNT: I)        Accept : text/html, img/gif     - Entity Body part (추가정보 - POST방식)       ex)  [explaination]        ..... [entiy body]        <2> 상태 코드 (3자리)      - 1XX : 요청이 받아들여졌고, 처리 중임을 의미    - 2XX : 요청이 성공적으로 처리되었음을 의미    - 3XX : 요청이 처리되기위해 추가적인 액션이            수행되어야 함을 의미    - 4XX : 클라이언트의 요청이 문법적으로 틀렸거나,           처리될 수 없음을 의미        (즉, client 측 에러 ex :404 )         - 5XX : 정당한 요청을 서버가 처리하지 못함을 의미            (즉, server 측 에러 ex: 500 )         ex) java code의 문제, server 문제  3. 장점   (1) 서블릿보다 쉽고, 개발속도가 빠르다.  (2) 디자인(HTML)부분과 로직(JSP)을 분리시킬수 있다.      즉, 디자이너와 프로그래머가 분업할 수 있다.  (3) HTML/CSS/javascript의 디자인을 디자인툴(       dreamweaber, 나모, 프론트페이지)를 사용가능  (4) 프로그래머가 직접코딩한 Servlet보다 최적화된 Servlet을       생성시켜서 효율적인 코드가 만들어진다.  (5) Java Beans 사용이 쉽다.       <1> Beans 설명        [1] 넓은 의미 : 자바 컴포넌트(기능덩어리)    [2] 좁은 의미 : 자바 컴포넌트 중에서 Beans              규약에 맞는 컴포넌트    <2> Beans 규약 ( Data Beans )       [1] 디폴트 생성자가 존재    [2] 속성을 지정(private)해야 한다.   [3] (Data Beans 경우)속성이름을 지정할 때에는         html의 input 태그의 name속성값과 같아야     한다.    [4] (Data Beans 경우)속성을 접근할 수 있는         set/get 메소드를 생성한다.    (set/get다음의 속성이름 첫문자는 대문자)        <3> Beans 종류       [1] Visual Component Beans (JSP와는 상관없음)        ex) JButton, TextArea, ...   [2] Data Beans (데이터를 담아두는 그릇)        ex) MemberBean, GulBean, ...    [3] Service Beans (연산이나 서비스 기능 즉, Worker빈즈)        ex) ConnectionPoolBean, CalculateDistance   <4> Beans 장점       [1] 유효범위(scope)설정이 쉽다.         ex) scope="session"    [2] HTML로부터 넘어오는 데이터를 쉽게        셋팅해 쓸 수 있다.(Form Bean)     ex) property="*"   [3] 기능의 모듈화. 즉, 재사용이 가능하다.        ex) ConnectionPoolBean.java, GBDTO.java    [4] DB에서 가져오는 데이터를 객체화시킬 수         있다. (DTO Bean)   [5] 프리젠테이션(JSP)와 비지니스로직(Bean)을        준독립시켜서 유지보수가 쉽다.   (6) 웹어플리케이션상에서 객체(변수)의 유효범위(scope)설정이 쉽다.      ## scope의 종류 ##       <1> page - 하나의 JSP페이지에서만 유효    <2> request - 하나의 요청에 대한 처리관련 JSP페이지들에 유효    <3> session - 하나의 사용자(브라우져)에 대해 유효        cf) 유효시간 - 세션이 유지되는 시간       - 30분 동안 새로운 요청이 없을 때 까지           서버측 session방이 살아있음     - 특정 사용자가 웹브라우져를 닫을 때까지           유효(사실, session방에 갈수 있는 길이 사라짐)   <4> application - 하나의 웹 어플리케이션 전체에 유효          ( 서버가 종료 될 때까지 유효 )   cf) page < request < session < application    4. JSP를 이루는 구성인자(Element)  (1) Fixed Template Data        HTML/XML 태그들로써 변화되지 않는 문서 내용  (2) JSP Element       웹컨테이너가 인식해서 처리작업을 수행하는 문서 내용    <1> 지시어 원소(Directive Element)     [1] 형태 : <%@ 지시어%>  [2] 종류 : page, include, taglib   [3] 종류별 속성    {1} page              - contentType : "text/html;chaset=euc-kr"     - import      : "java.sql.*, java.io.*"     - info        : "page에 대한 example JSP파일"     - language    : "java" (기본값)     - session     : "true"(기본값) | "false"     - buffer      : "8kb"(기본값) | "none"     - autoflush   : "true"(기본값) | "false"     - errorPage   : "/error.jsp"     - isErrorPage : "false"(기본값)|"true"     - pageEncoding: "ISO-8859-1"(기본값)|"euc-kr"     - extends     : JSP엔진에의해 자동 셋팅     - isThreadSafe: "true"(기본값)|"false"    {2} include (쏘스 삽입)        - file        : "include.jsp"        cf) JSP 액션         (결과 삽입)    {3} taglib (커스텀테그 사용시)        - uri         : "WEB-INF/tlds/my.tld"     - prefix      : "mytag"    cf1) 지시어의 속성을 한 페이지에서 두번        이상 사용할 수 없다.     ( 단, page지시어의 import 는 예외 )    cf2) JSP가 서블릿으로 변환될 때 자동 import패키지        - import javax.servlet.*;             - import javax.servlet.http.*;             - import javax.servlet.jsp.*;     ex) TestJsp6.jsp , includeTest.jsp   <2> 스크립팅 원소(Scripting Element)     [1] 기능 : JSP페이지에 자바코드를 직접기술할            수 있게 하는 기능      [2] 형태     {1} 선언(Declaration)            <%! 자바코드%>     {2} 스크립트렛(scriptlet)            <% 자바코드%>     {3} 식(expression)            <%=자바변수%>            ex) TestJsp6.jsp       <3> 액션 원소(Action Element) == JSP (표준)태그      [1] 설명 : JSP에서 표준으로 정의한 태그   [2] 형태 :   [3] 종류 :      {1} useBean          - class :"soo.beans.test.BeanTestFormBean"          - id    :"btb"    - scope :"page"|"request"|"session"|"application"    - type  :"object"(부모 인터페이스/클래스)     {2} setProperty //btb.setN(name)          - name : "btb"    - property : "n" (beans 속성이름)    - param : "name" (html input name속성)    - value : "홍길동" (속성값)    cf) HTML폼의 모든 데이터를 beans에 자동세팅         (반드시 html input name속성값과 property가 같아야 한다.)             {3} getProperty //btb.getN() 더 많이 사용한다.          - name : "btb"    - property : "n" (beans 속성이름)    - param : "name" (html input name속성값)     {4} include          - page : "include.jsp" (결과를 포함)           ex) includeTest.jsp     {5} forward           - page : "login.html"         ex) /JspActionTest/forwardTest.jsp          cf) 페이지의 이동        <1> response.sendRirect(          "forwardTest_result.jsp");     <2> location.href=          "forwardTest_result.jsp";                <3>      #질문 : <1><2>과 <3> 차이점 조사#       [차이1] <1><2>번은 하위로직을 수행            <3>번은 안한다.       즉, <1><2>번은 하위로직을 수행         하지 않을 경우 return; 필요       [차이2] <1><2>번은 결과페이지로 url변환             <3>번은 url이 변하지 않는다.     #위의 원인은      <1><2>번은 기술된 이동페이지로                   새로운 request발생      <3>번은 기존의 request가 기술된                    이동페이지로 전이      {6} param           - name : "data"    - value : "값"     {7} params     {8} plugin          - type : "bean" | "applet"    - code : "PluginApplet.class"    - jreversion : "1.5"    - width : "300"    - height : "250"    - hspace : "100"    - vspace : "100"     은 JSP페이지가 웹브라우져의       종류에 따라 그에 맞는 자바플러그인      (자바빈 또는 Applet)을 위한       HTML 태그(OBJECT 또는 EMBED)를      자동 생성하도록 한다.      (이유: IE와 NS가 플러그인을 지원하는            태그가 서로 다르기 때문이다.)               ex) /JspActionTest/pluginTest.jsp                       (PluginApplet.java)          5. JSP 디폴트 객체 ( 9개 )     (1) 설명 : 객체를 따로 생성하지 않고 스크립트렛 즉         <%%>사이에서 사용 가능한 객체를 의미   ( _jspService() 의 지역변수 )   (2) 종류        <1> out 객체 (type : JspWriter)        -> 클라이언트 브라우져에 연결된 출력 객체     <2> request 객체 (type : HttpServletRequest)        -> 클라이언트 요청정보를 가진 객체(공간)     <3> response 객체 (type : HttpServletResponse)        -> 서버의 답변정보를 가진 객체     <4> session 객체 (type : HttpSession )        -> 클라이언트 브라우져마다 할당된 서버측      공간(JSessionId라는 label표식을 소유) 객체               cf) session 변수    - session객체 안에 들어가는 속성객체     ex1)      ex2) session.setAttribute(id, jsi);    # 세션변수란 위의 loginOk 또는 id를 의미    # 세션객체 또는 그 안의 세션변수 모두        현재 클라이언트의 정보를 가지고 있다.    # 세션객체가 없어지면, 그 안의 세션변수       들도 함께 사라진다.        <5> application 객체 ( type : ServletContext)        -> WebApplication 전체에 공유되는 공간 객체         cf) application변수는 그 안에 들어가는       객체들로써 모든 영역에 공유된다.       (ex : pool)      <6> page 객체 ( type : Object )        -> JSP페이지 자신을 의미하는 객체(공간)     <7> pageContext 객체 ( type : PageContext )        -> 다른 디폴트 객체들을 접근(가져)할 수        있는 method를 가진 객체    ( 꼭!! , API찾아볼 것 )    <8> config 객체 ( type : ServletConfig )        -> 서블릿/JSP의 구성정보를 접근할 수 있는        객체     <9> exception 객체 ( type : Throwable )        -> 에러처리 관련 객체         6. JSP의 라이프 사이클      jspInit() -----> _jspService() -----> jspDestroy()            (멀티 쓰레드에 의해서 관리)    ex) TestJsp5.jsp - JSP lifeCycle   7. 쿠키와 세션   (1) 쿠키      <1> 설    명: 클라이언트측에 저장되는 서버측 정보             (부스러기)  <2> 제한크기: 4 KB 이하 제한/개   <3> 제한갯수: 300 개   <4> 최대로 저장 가능한 쿠키의 용량 : 1.2 MB  <5> 종    류:      [1] 클라이언트의 하드 디스크에 저장되는 쿠키             [2] 클라이언트의 메모리에 존재하는 쿠키      ( 브라우져가 켜져 있을 때까지만 존재 )       - JSessionID     - MaxAge가 설정되지 않은 경우(음수, 0)      ( MaxAge의 기본값 : -1 )     <6> 주   의      [1] 한글은 안된다.   [2] MaxAge가 지났을 때, 하드의 파일에는      지워지지 않지만 CookieGet.jsp를 실행하면      MaxAge지난 Cookie는 검출되지 않는다.             ex) /Cookie_Session/CookieGet.jsp        /Cookie_Session/CookieSet.jsp     /Cookie_Session/CookieModul.jsp   (2) 세션      <1> 설    명: HTTP 프로토콜은 무상태(stateless)       프로토콜이기 때문에 상태를 유지할 수 없다.    세션이라는 기술은 그 상태정보를 유지할 수     있도록 만들어진 "기술"이다.     ex) 쇼핑몰의 장바구니, 로그인 ..      <2> 원   리 : 클라이언트의 첫번째 요청에 의해서        서버측메모리에서는 JSessionID라는 ID로           해당 클라이언트를 위한 방(공간)이 만들어지고       첫번째 답변으로 그 JSessionID를 쿠키 형태로     클라언트에게 전달한다.        다음 요청부터는 클라이언트가 JSessionID를    가지고 서버에게 요청함으로써 서버는 그     클라이언트를 식별할 수 있고, 그 클라이언트의     방을 공유할 수 있게 한다.     따라서, 그 방에 있는 객체들로 상태정보를 유    지 할 수 있는 것이다.     <3> 주   의      같은 서버에서는 WebApplication(Context)이    바뀌면 클라이언트의 기존 JSessionID는    없어지고, 새로운 JSessionID를 받게 된다.    ( Context 마다 JSessionID가 따로 생성된다.)   -> 그런데..      때로는 기존의 JSessionID를 유지하기도 한다.   ( 톰켓서버측에서 일률적으로 구현되지 않았다. )    ex) /Cookie_Session/SessionGet.jsp         /Cookie_Session/SessionSet.jsp     /Cookie_Session/SessionRemove.jsp      cf1) application       /Cookie_Session/ApplicationGet.jsp   /Cookie_Session/ApplicationSet.jsp        cf2) request       /Cookie_Session/RequestGet.jsp    /Cookie_Session/RequestSet.jsp8. 팁 ( Tip )   (1) GET방식으로 전달되는 데이터량(http부터) : 2 KB               ex) /Cookie_Session/getSize.jsp    -> http://ip:포트/soo.jsp?name=aaa  (2) HTML의 input태그에서 disabled 속성을 쓰면        value값이 다른 페이지로 전송이 안된다.     ( 이럴땐, hidden을 이용 )   (3) 하나의 웹서버상에서 새로운 WebApplication을       생성 시키기 위해서 server.xml을 편집(추가)    ex)      (4) 서버의 xml파일을 수정했으면 서버를 다시 켜야      xml의 변경사항이 적용된다.   (5) server.xml의 Connector태그에 다음을 추가하면       클라이언트로 부터 GET방식으로 넘어오는    한글Data가 깨지지 않는다.    ( 모든 Context에 공통 적용 )    ex)   (6) 클라이언트로 부터 POST방식으로 넘어오는 한글       Data가 깨지지 않는 방법    ( 각각에 Context에 독립적으로 적용 )        ex) WebAppName\WEB-INF\web.xml을        EncodingFilter.java를 이용해서 편집  (7) context.xml에       옵션을 주면 \WEB-INF\classes 안의 class의    내용이 수정되면 자동으로 갱신된다.   (8) tomcat 최신버젼의 다운로드 및 셋팅       <1> http://tomcat.apache.org/ 에서 다운로드    <2> 설치한 후       [1] editplus 이용시        Tomcat 5.5\common\lib\*.jar를 classpath걸어줌         ex) C:\Java\jdk1.5.0_06\jre\lib\ext\에 넣음          ( C:\Java\jre1.5.0_06\lib\ext\에는 넣지 않음)   [2] eclipse 이용시     eclipse에 톰켓 디렉토리만 설정해주면     eclipse가 자동으로 classpath 잡아줌          ( 기존에 C:\Java\jdk1.5.0_06\jre\lib\ext\에      톰켓관련 jar파일들은 빼주어야 한다. )      <3> Tomcat 5.5\conf\web.xml 의 invoker부분의       주석을 해제(2개)   (9) javascript와 JSP변수의 관계         servlet 또는 JSP페이지에서 ..  <1> java변수를 javascript에서 쓸 수 있다.   <2> javascript변수를 java에서 쓸 수 없다.          ex) JSP_JS_Vriable.jsp    (10) 해당 URL의 main페이지를 자동으로 찾아가게       하려면 conf\web.xml을 다음과 같이 편집해준다.       ex)    main.jsp   index.html   index.htm   index.jsp               (11) 기본 port를 바꾸고 싶을 때는 server.xml의         다음을 수정해 준다.        ex)  C:\SOO\WebServer\Tomcat 5.5\conf\server.xml의        태그 사이에 셋팅     ( # 주의 : oracle.jdbc.driver.OracleDriver 확인 )           <2> C:\SOO\WebServer\Tomcat 5.5\conf\context.xml의        태그 사이에 셋팅         <3> ~Project\WEB-INF\web.xml의  태그 사이에 셋팅            Oracle Datasource example    jdbc/myoracle    javax.sql.DataSource    Container       <4> Java Source상에서 다음과 같이 참조    Context initContext = new InitialContext();   Context envContext  = (Context)initContext.lookup("java:/comp/env");   DataSource ds = (DataSource)envContext.lookup("jdbc/myoracle");   Connection conn = ds.getConnection();   //etc.    (14) 이클립스 셋팅 방법      1) JDK설치    2) Tomcat설치 (apache.org)   3) eclipse설치 (download.eclipse.org/eclipse/downloads/)   4) 4개의 플러그인 설치    5) Struts 다운로드 (apache.org)    6) 신규 프로젝트 생성     <1> web.xml 9. 기본 프로젝트 ( to MVC 모델 )   (1) 방 명 록      (2) 회원 가입        <1> member/join     <2> member/search     <3> member/manager    (3) 로그인        <1> login    <2> loginModul   (4) 쿠키 / 공지사항 / 카운트    (5) 파일 업로드        <1> MultipartRequest     <2> SmartUpload     <3> Struts Upload Component (API참조)    .....      (6) 파일 매니져    (7) 쇼핑몰의 장바구니 구현 (나중에 RP때 해봐요..)      (8) 게시판(답변형)       <1> 페이지의 이동         list -> write  -> writeOk             -> content -> edit/delete/rewrite    <2> 답변형 게시판 DB table 분석        [1] 하나의 쏘스로 여러개의 게시판을 가동 가능         - 쏘스상의 DB 테이블의 이름만 바꾼다.         [2] DB 테이블간의 relationship (비식별관계)        #JSP_BOARD(일)   #JSP_MEMBER(일)                #REPLY(다)          [3] 특이한 JSP_BOARD의 필드     - REFER :  같은 글집단을 표시하는 변수(글 족번호)    - LEV : 같은 글집단(패밀리)에서의 등급 변수    - SUNBUN : 같은 글집단(refer)에서의 글 listing순서 변수     ex1) 필드 설명의 예              3. 세번째 족(refer:2, lev:0, subun:0)    2. 두번째 족(refer:1, lev:0, sunbun:0)       -> 두족의 답2(refer:1, lev:1, sunbun:1)       -> 두족의 답2의 답1(refer:1, lev:2, sunbun:2)       -> 두족의 답1(refer:1, lev:1, sunbun:3)       -> 두족의 답1의 답2(refer:1, lev:2, sunbun:4)       -> 두족의 답1의 답1(refer:1, lev:2, sunbun:5)    1. 첫번째 족(refer:0, lev:0, sunbun:0)                -> 첫족의 답1(refer:0, lev:1, sunbun:1)     [4] 페이징 기법( Sql의 SELECT문이 다름 )        - JSP_BOARD의 모든 글을 가져와서        rs의 커서를 해당 페이지의 시작점으로     이동시켜서 page를 listing하는 방법     - JSP_BOARD에 글을 가져올 때, 미리 해당       페이지에 해당하는 글들만을 SELECT하는 방법10. 팀별 세미프로젝트 ( to MVC 모델 )

'Computer Science' 카테고리의 다른 글

ubuntu 7.10에 Resin 설치  (0) 2009.04.22
UBUnTU+TOMCAT5.5 설치  (0) 2009.04.22
JSP 기초 강좌 사이트  (0) 2009.04.22
php 그래프 그리기  (0) 2009.04.22
C# USB viewer open source  (0) 2009.04.22

+ Recent posts