관리 메뉴

쿰뱅이

JSP & 서블릿정리 본문

WEB/JSP

JSP & 서블릿정리

주년 2011. 10. 11. 14:16
반응형

JSP & 서블릿정리

///////////////////////////////////
// Data 전송방식
Get : - 클라이언트의 요청 데이터를 패킷의 해더부분인
          URL 꼬리에 달아 보낸다. 최대 256byte
       - 주소창에 데이터가 유출된다.
       - 검색용도로 많이 사용
       - Http 프로토콜의 기본 데이터 전송방식
          - 주소창에서 요청시, html에서 <A>로 링크된 페이지를 요청
      <form>에서 요청방식을 생략시, <form method="get">으로 요청시
Post : -클라이언트의 요청 데이터를 패킷의 바디부분에 담아 보낸다
        - 데이터 유출이 없으므로 중요 정보를 보낼때 사용됨
 - 데이터 양의 제한이 없다.
 - <form method="post">로 해야만 post로 전송된다.
//////////////////////////////////////////////////////////
// Form 양식
: 클라이언트로 부터 직접 정보를 입력 받을 때 사용
syntex:
  <form  [method="데이터전송방식"]  [action="data를 전송할 url"]
           [name="form에 대한 이름값으로 자바스크립트에서 객체로 인식"]
    [enctype="data의 마임타입으로 파일전송시에만 사용"] >
      <input type="text|hidden|password|button|image|radio|checkbox"
              name="자바스크립트에서 객체로 인식, data를 전송할 이름 "
       value="서버에 보낼 실제 값">
      <select name="자바스크립트에서 객체로 인식, data를 전송할 이름 ">
   <option value="서버에 보낼 값">화면에 보일 값
      </select>
   </form>
//////////////////////////////////////////////////////////
// form양식을 통해 입력된 데이터 얻어오기
 -  HttpServletRequest
     public String getParameter(String name)  : get, post모두 사용
       name : input태그에서 지정한 name을 지정
       하나의 name으로 한개의 value가 넘어올때 사용
     public String[] getParameterValues(String name) : get, post모두 사용
       하나의 name으로 여러개의 value가 넘어올때 사용 => checkbox
     public String getQueryString() : get방식으로 전송된 데이터만 추출 가능

Model  :  프로세스 주요 로직
   DAO(Data Access Object) : DB table에 접근하여 삽입, 수정, 삭제, 검색 하는
                                    로직
   VO(Value Obejct) : View, Controller, Model사이에서 DB Table에 대한 정보를
                          표현하는 객체
View(GUI) : 화면을 구성하는 프로세스

Controller : View와 Model 사이에서 조정해주는 역할
               View에서 들어온 input을 Model에 전달하고 Model에서 처리한 결과를
        View에 전달 시켜준다.

Model2 : MVC 패턴을 적용하여 View는 JSP로  Controller는 Servlet으로
            Model은 bean으로 작성

///////////////////////////////////////////////////////////////
// JSP
동적으로 html을 만들어주는 기술중에 하나로 내부적으로는 servlet으로
되어 있지만 html과 server script코드로 구성되어 있어 화면단을
작성하기 편리하다.
■ 기본 server script
 ▲ 스크립트렛(scriptlet)  : <%   //java code 작성   %>
    자바 프로그램을 하고자 할때 사용 =>서블릿으로 변환시 service 메소드 바디로 구성됨
    ex) <% int i = 10; %>
 ▲ 표현식(expression) : 자바 코드를 출력하고자 할때 사용
    =>서블릿으로 변환시 service 메소드 바디로 구성됨
    syntax: <%= %>
    ex) <%="i :"+i%>   => out.print("i :"+i);와 같은 표현
 ▲ 선언(Declaration) : 멤버 변수나, 메소드를 선언시 하용
    => 서블릿 클래스 선언시 멤버로 선언됨
    syntax: <%!    %>
    ex)  <%! private int count = 0;
               public void method1(){}  %>
 ▲ 주석 : 기본코드 내부에는 모두 자바코드를 작성하므로 자바 주석을 사용해도 무방함
    <%--    --%>   : jsp 주석   servlet파일로 변환될때 빠진다
    <% //       %>   : java주석  servlet으로 변환된 파일이 컴파일 되면서 빠진다.
    <%/*        */%>: java주석  servlet으로 변환된 파일이 컴파일 되면서 빠진다.
    <!--<%       %>--> : html주석으로 JSP코드는 실행된다.

///////////////////////////////////////////////////////////
// 상태 유지
Session :  클라이언트의 상태 정보를 서버측에서 유지
   - 클라이언트에게 session에 대한 key로 jsessionid를 쿠키 형태로 발급한다.
   - session 객체 얻기
      public HttpSession getSession(boolean b):
        true : 클라이언트가 처음 접속했다면 jsessionid가 아직 없는 상태이므로
         새로운 Session에 대한 jsessionid를 발급하고 Session객체를 생성
  클라이언트가 jsessionid를 갖고 있다면 jsessionid해당하는 Session
  객 체를 생성
 false : 클라이언트가 jsessionid를 갖고 있지 않다면 Session객체를 생성하지
          않고 null을 리턴, 클라이언트가 jsessionid를 갖고 있을때만 jsessionid에
   해당하는 Session객체를 생성한다.
      public HttpSession getSession() : true값에 적용해서 Session객체를 생성한다.
      ex) HttpSession session = request.getSession();
    - session에 클라이언트 정보 저장하기
       public void setAttribute(String key, Object o) : 객체를 key값으로 저장한다.
       ex) session.setAttribute("id",id);
    - session에 저장한 클라이언트 정보 꺼내오기
      public Object getAttribute(String key)
        : key값으로 저장한 객체를 Object타입으로 리턴=>캐스팅 필요
 ex) String id = (String)session.getAttribute("id);
    - session이 처음인지 확인
      public boolean isNew() : 처음 발급 받은 세션이면 true값을 리턴
    - session 만료 시키기
      public void invalidate() : 새로운 세션 아이디를 부여 하여 이전 세션을 끊어준다.
////////////////////////////////////////////////////////////////////////////////
// jsp : directive code
: jsp에게 특정 기능을 지시
형식 : <%@ directive attribute=value... %>
종류 : page, include, tablib
 ■ page : JSP에 대한 환경 설정를 지시하는 code
    <%@ page  language="java" extends="" isThreadSafe="true"
                  info="" buffer="8kb" autoFlush="true"
    import="" contentType="text/html;charset=iso-8859-1"
    isELIgnored="false"  session="true" pageEncoding="iso-8859-1"
    isErrorPage="false" errorPage="url셋팅" %>
    language: jsp의 베이스 언어 설정 기본은 java로 설정되어 있고 java가 아니며
                jsp가 동작하지 않는다.
    extends : jsp는 반드시 HttpJSPBase를 상속 받아야 jsp로서 기능을 수행할 수 있으므로
                다른 클래스를 상속 받으면 error 발생 한다.
    isThreadSafe: 기본값이 true로 설정되어 있다. 이는 현재 JSP가 멀티쓰레딩 될때
                      안전하게 동작하고 있음을 표시 false로 하면 SingleThreadModel을
         구현하게 되어 있다. SingleThreadModel을 구현하면 멀티쓰레딩이
         되지 않고 쓰레드가  Single로 돌아간다.
    info : jsp에 특정 부가 정보를 표현할때 사용 getServletInfo()로 값을 얻어올수 있다.
    buffer : JSP가 사용자에게 응답할때 내부적으로 Buffering을 하고 있다
               none을 설정하면 버퍼링을 하지 않음.  숫자로 버퍼사이즈 설정 가능
    autoFlush : 버퍼가 꽉차면 자동으로 출력하는 기능 기본으로 true로 설정되어있다.
-------------------------------------------------------------------
    기억해두어야 할 속성들...
    import : 다른 package에 있는 클래스를 참조하고자 할때 사용 ,로 구분
    contentType: 기본은 html/text;charset=iso-8859-1로 셋팅되어 있다.
                    한글을 출력하고자할때 charset=euc-kr로 셋팅해야 된다.
    pageEncoding: 사용자의 입력 인코딩을 iso-8859-1로 읽기 때문에
                     한글인코딩을 하고자 할때 euc-kr로 셋팅해야 한다.
    session : HttpSession객체를 의미 기본은 true로 설정되어 있어 ssesion이라는
               내장 객체를 사용할 수 있다. false로 설정하면 session이라는 내장객체는
        사용할 수 없다.
    errorPage : JSP 페이지 내부에서 에러가 발생했을때 페이지 내부에서 처리 하지 않고
                   지정한 url로 이동해서 처리 할수 있도록 한다.
    isErrorPage : Error를 처리하는 페이지에서 exception이라는 내장 객체를 사용하고자
                     할때 true설정 기본은 false로 설정되어 있다.
    isELIgnored : ELtag를 사용하지 않는다면 true셋팅 기본은 false로 되어 있다.

 ■ include : jsp, txt, html page를 현재 JSP에 복사
    <%@ include file=url%>
 ■ taglib : 사용자가 만든 태그를 현재 JSP에서 사용할 것임을 선언
    <%@ taglib  prefix=""  uri="tlb파일 경로" %>
//////////////////////////////////////////////////////
// Custom Tag
: 사용자가 tag를 만들어서 사용
- 필요한것 : tld 파일 , handler file(class file), Jsp에서 등록(<%@ taglib ...%>)
1. tld 파일 : xml파일로 사용자가 만들 tag와  handler파일을 연결 시킨다.
    형식 :
    <taglib>
       <tlibversion>1.0</tlibversion>
       <jspverseion>1.2</jspversion>
       <shortname></shortname>
       <tag>
  <name><!-- 사용할 태그 이름 지정--></name>
  <tagclass><!--태그를 사용했을때 실행할 classfile--></tagclass>
       </tag>
    </taglib>
2. Handler file
   javax.servlet.jsp.tagext 패키지의 class를 이용
   2.1 body의 내용을 읽지 않는 태그 만들기
        Tag를 implements받거나 TagSupport를 extends 받는다.
 상속 받은 메소드
 public int doStratTag()  : 시작 태그를 만났을때 자동으로 호출되는 메소드로
                    시작 태그에서 할 일을 구현
            return값으로 사용할 상수:
     SKIP_BODY : 바디를 읽지 않는다.
     EVAL_BODY_INCLUDE : 바디를 읽는다.
        public int doEndTag()  : 끝태그를 만났을때 자동으로 호출되는 메소드
     SKIP_PAGE : end 태그 이후에 JSP페이지에 대해 읽지 않는다
                   => 다른 커스텀 태그가 실행되지 않다.
            EVAL_PAGE : end 태그 이후에 JSP페이지를 읽어 다른 커스텀 태그도
                      실행
        2.2  태그의 바디를 읽는 태그 만들기
       BodyTag를 implements받거나 BodyTagSupport를 extends받는다.
              - BodyTag에서 추가된 메소드
       int doAtferBody() : 바디를 읽은후 호출되는 메소드
          SKIP_BODY
   EVAL_BODY_AGAIN
       void doInitBody() : 바디 읽을때 호출되는 메소드
        2.3 속성  tag 만들기
      - Handler(class)파일에서 사용할 속성을 멤버로 선언한다.
             - 선언한 멤버의 setter, getter를 만들어준다.
      - 속성은 start tag에서 선언하므로 속성이 읽어지는 시기는
         start tag이후 이므로  doEndTag()에서 처리해 준다.
///////////////////////////////////////////////////////////////////////
///  Action Tag : Sun에서 만들어 기본적으로 제공하는 사용자정의태그

- include : url에 해당하는 페이지를 현재 JSP에 포함 시킨다.
  : 이때 url에 특정 페이지에 대한 url뿐만 아니라 변수값을 넣어 상황에 따라
    다른 url을 include 할수 있다.
<jsp:include page="url"/>     ex)  <% String url ="a.jsp"%>
<jsp:include page="">               <jsp:include page="<%=url%>"/>
  <jsp:param name="" value=""/>
</jsp:include>

-forward :  속성 page에 지정한 url로 이동시킨다.
             => RequestDispatcher send = request.getRequestDispatcher("url");
          send.forward(request, response)와 같은 역활
 <jsp:forward page=""/>
 <jsp:forward page="">
    <jsp:param name="" value=""/>
 </jsp:forward page="">

- usebean  : class속성에 지정한 클래스의 객체를 id로 지정한 변수 이름으로
               객체를 생성시켜준다.
        scope는 생략시 기본으로 page scope를 갖는다.
  <jsp:useBean id="" class =""  scope="page|request|session|application"/>
   ex1) <jsp:useBean id="bbs" class="model.BBSDao" scope="page"/>
          BBSDao bbs = new BBSDao();
   ex1) <jsp:useBean id="bbs" class="model.BBSDao" scope="request"/>
          BBSDao bbs= (BBSDao)request.getAttribute("bbs");
   if(bbs== null) {
  bbs = new BBSDao();
  request.setAttribute("bbs",bbs);
   }
- property 
<jsp:setProperty name="" property="" [value="" or param=""]/>
: uesBean 태그를 통해 생성된 객체의 속성에 값을 셋팅
ex)  <jsp:useBean id="bbs"  class="vo.BBS" scope="session"/>
      <% String  id = request.getParameter("id");
           bbs.setId(id); %>
     =><jsp:setProperty name="bbs" property="id"  param="id"/>
        name : uesBean에서 사용한 id(객체)이름
 property: 객체의 속성
 param:  request.getParameter("")을 통해 속성에 값을 셋팅
 value : 속성에  값을 셋팅
<jsp:getProperty name="" property="" [value="" or param=""]/>
: uesBean 태그를 통해 생성된 객체의 속성 값을 얻어와준다.

///////////////////////////////////////
//jstl
다운 받기 :
http://jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgi => jsp2.0버전
복사 위치 : jstl.jar , standard.jar
context폴더/WEB-INF /lib/
만약 Jeus인경우 : C:\TmaxSoft\JEUS5.0\lib\application\  에도 복사 해야 한다.

■  jstl  등록하기 :썬에서 확장한 사용자 정의 태그이므로 jsp에서 등록해서 사용해야한다.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 - prefix값은 보통 사용자가 jsp에서 원하는 이름으로 등록하면 되지만
    jstl의 core부분을 사용하는 경우 c로 등록 해서 사용한다.
 - uri는 http://java.sun.com/jsp/jstl/core 으로 등록. 오타나면 error발생

■  forEach
ArrayList list =(ArrayList)session.getAttribute("list");
for(int i =0; i<list.size(); i++){
 BBS bbs = (BBS) list.get(i);
}

<c:forEach var="bbs" items="${list}">
</c:forEach>

■ if
형식 :  <c:if test="조건">      if(조건){
         </c:if>                   }
■ choose ~when ~otherwise
   형식 :
   <c:choose>                              if(조건){
        <c:when test="조건>             
 </c:when>
 <c:when test="조건>             }else if(조건){
 </c:when>
 <c:otherwise>                     }else{
 </c:otherwise>                   
   </c:choose>                            }
■ set : 내장 객체에 속성을 셋팅하거나 내장 객체에 셋팅한 속성의 값을 셋팅한다.
   - 내장 객체에 문자열 속성을 셋팅할 경우
   <c:set var="속성이름" scope="page|request|session|application" value=""/>
   또는
   <c:set var="속성이름" scope="page|request|session|application" >
      value1, value2....     =>배열 형태가 된다.
   </c:set>
   - 내장 객체에 셋팅한 속성중 객체의 값을 셋팅 할경우
     <c:set target="${내장 객체에 셋팅한 객체이름}" property="객체의 속성"
             value=""/>
   - 내장 객체에 셋팅한 속성중 Map에 속성과 값을 셋팅 할경우
      <c:set target="${내장 객체에 셋팅한 맵이름}" property="맵에 셋팅할 속성이름"
             value=""/>
      ex)  Hashtable table = (Hashtable)session.getAttribute("table");
    table.put("Level","king");
           <c:set target="${table}" property="Level"   value="king"/>
■ import : <jsp:include page=""/>와 같음
   <c:import  url="include할 url" /> or
   <c:import  url="include할 url" >
     <c:param name="" value=""/>
   <c:import/>
■ remove : 내장 객체에 저장해 놓은 객체를 삭제 시켜준다.
형식 :
   <c:remove var="속성이름" scope="page|request|session|application"/>

 

[출처] jsp& 서블릿정리|작성자 코비

반응형