2014년 9월 30일 화요일

JSTL, EL 표현식

Html코드를 변환해서 출력
>>  c:out에서 escapeXml을 설정


JSTL 문법의 for문 사용법
<c:forEach items="${리스트가 받아올 배열이름}"var=$"{for문안에서 사용할 변수}"varStatus="status">

status 는 for문의 돌아가는 상태를 알 수 있게 체크하여 준다
#{status.current}   현재의 for문에 해당하는 번호
#{status.index} 0부터의 순서
#{status.count} 1부터의 순서
#{status.first}  현재 루프가 처음인지 확인
#{status.last}  현재 루프가 마지막인지 확인
#{status.begin} for문의 시작 값
#{status.end}   for문의 끝 값
#{status.step}  for문의 증가값

참고
http://kbill.tistory.com/m/post/67
http://ohgyun.com/m/post/45

2014년 8월 2일 토요일

윈도우8 서명없는 드라이버 설치할 때

cmd관리자모드에서(기본 디렉토리는 c:\windows\system32)

bcdedit /set TESTSIGNING ON(OFF는 끄기)

2014년 6월 25일 수요일

JSTL 정리

출처:http://tazz009.tistory.com/484
설정
web.xml

<taglib>
    <taglib-uri>jstl-c</taglib-uri>
    <taglib-location>/WEB-INF/tlds/jstl/c.tld</taglib-location>
</taglib>
<taglib>
    <taglib-uri>jstl-fmt</taglib-uri>
    <taglib-location>/WEB-INF/tlds/jstl/fmt.tld</taglib-location>
</taglib>
<taglib>
    <taglib-uri>jstl-fn</taglib-uri>
    <taglib-location>/WEB-INF/tlds/jstl/fn.tld</taglib-location>
</taglib>

 
jsp 에서

<%@ taglib uri="jstl-c" prefix="c" %>
<%@ taglib uri="jstl-fmt" prefix="fmt" %>
<%@ taglib uri="jstl-fn" prefix="fn" %>

EL#
  1. 생존범위 속성 맵
    1. pageScope
    2. requestScope
    3. sessionScope
    4. applicationScope
  2. 요청 파라미터 맵
    1. param
    2. paramValues
  3. 요청 헤더 맵
    1. header
    2. headerValues
  4. 쿠키 맵
    1. cookie
  5. 컨텍스트 초기화 파라미터 맵(서블릿 초기화 파라미터 아님)
    1. initParam
  6. 실제 pageContext 객체에 대한 참조. 이것은 빈임
    1. pageContext
      1. pageContext 접근자
        1. getErrorData()
        2. getPage()
        3. getRequest()
        4. getResponse()
        5. getServletConfig)()
        6. getServletContext()
        7. getSession()
      2. JspContext로 부터 상속받은 접근자
        1. getAttribute()
        2. getAttributeNamesInScope()
        3. getAttributesScope()
        4. getExpression!Eval!uator()
        5. getOut()
        6. getVariableResolver()


스크립팅
  1. <$= request.getHeader("host") %>
EL 내장 객체
  1. ${header["host"]}
  2. ${header.host}
  3. ${headerValues.host[]}

스크립팅
  1. <%= request.getMethod() %>
EL 내장 객체
  1.  ${pageContext.request.method}

core

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  • 일반적인 것
    • <c:out>
    • <c:set>
    • <c:remove>
    • <c:catch>
  • 조건
    • <c:if>
    • <c:choose>
    • <c:when>
    • <c:otherwise>
  • URL 관련
    • <c:import!>
    • <c:url>
    • <c:redirect>
    • <c:param>
  • 반복
    • <c:forEach>
    • <c:forEachToken>

① set

     - JSP의 setAttribute()와 같은 역활
     - 기본형
       <c:set   var="변수명"
                    value="변수명에 할당된 값"
                    target="자바빈 객체명이나 Map 객체명"
                    property="자바빈 객체나 Map 객체의 값을 설정할 프로퍼티 명"
                    scope="변수의 공유 범위(유효기간)으로 page|request|session|application" />
     - 예제
          <c:set var="country" value="${'Korea'}" />
          <c:set var="intArray" value="<%=new int[] {1,2,3,4,5}%>" />
          <c:set var="sum" value="${sum+i}" />

② out

     - JSP의 표현식을 대체하는 것으로 많이 사용됨
     - 기본형
          <c:out var="변수명"
                    default="기본값"
                    escapeXML="true|false" />

     * escapeXML
     > 생략시 기본값은 true
     > true일 경우 값 중에 포함된 <>&'" 문자들을 각각 <, >, &, ', "로 출력

     - 예제
          <c:out value="${sum}" />
          <c:out value="${val}" />

③ remove

     - JSP의 removeAttribute()와 같은 역활
     - 기본형
          <c:remove var="변수명"
                              scope="변수의 공유 범위로 page(생략 시 기본)|request|session|application" />
     - 예제
          <c:remove var="browser" />

④ catch

     - body 위치에서 실행되는 코드의 예외를 잡아내는 역할
     - 기본형
          <c:catch var="에러가 발생할 때 에러 메세지가 포함될 변수명" />
     - 예제
          <c:catch var="errmsg">
               line 1~
               <%=1/0%>
               line 2~
          </c:catch>
          <c:out value="${errmsg}" />

⑤ if

     - 조건문에 사용
     - 기본형
          <c:if   test="조건 판별식"
                    var="변수명"
                    scope="변수의 공유범위 page|request|session|application"
     - 예제
          <c:if test="${country != null}">
               국가명 : <c:out value="${country}" />
          </c:if>

⑥ choose

     - 자바의 switch문과 동일
     - 조건에서 문자열 비교가 가능
     - 하나 이상의 <when>과 하나의 <otherwise> 서브 태그를 가짐

⑦ when

     - choose 태그의 서브태그
     - choose 태그내에서 여러번 사용될 수 있다.
     - 기본형
          <c:when test="조건 판별식" />

⑧ otherwise

     - choose 태그의 서브태그
     - choose 태그내에서 한번만 사용될 수 있다.
     - 예제 :
          <c:choose>
               <c:when test="${country == 'Korea'}">
               나라 : <c:out value="${country}" />
          </c:when>

          <c:when test="${country == 'Canada'}">
               나라 : <c:out value="${country}" />
          </c:when>
 
          <c:otherwise>
               선택된 나라가 없습니다.
          </c:otherwise>
     </c:choose>

⑨ forEach

     - 객체 전체에 걸쳐 반복 실행할 때 사용
     - 기본형
          <c:forEach   items="반복할 객체명"
                              begin="시작값"
                              end="종료값"
                              step="증가값"
                              var="변수명"
                              varStatus="별도의 변수" />

⑩ forTokens

     - 문자열을 주어진 구분자(delimiter)로 분할
     - 기본형
          <c:forTokens items="반복할 객체명"
                              delims="구분자"
                              begin="반복할 시작값"
                              end="반목 마지막값"
                              step="증가값"
                              var="변수명"
                              varStatus="별도의 변수"
     - 예제
          <c:forTokens var="color" items="빨강색,주황색.노란색.초록색,파랑색,남색.보라색" delims=",.">
               color : <c:out value="${color}" /><br>
          </c:forTokens>

⑪ import!

 - 웹 어플리케이션 내부의 자원 및 http, ftp와 같은 외부에 있는 자원에 대해 접근
 - 기본형
  <c:import! url="읽어올 URL"
     var="읽어올 데이터를 저장할 변수명"
     scope="변수의 공유 범위"
     varReader="리소스의 내용을 Reader 객체로 읽어올 때 사용"
     charEncoding="읽어온 데이터의 캐릭터셋 지정" />

⑫ redirect

     - response.sendRedirect()를 대체하는 태그로 지정한 다른 페이지로 이동
     - 기본형
          <c:redirect url="이동할 URL" />

⑬ url

     - 쿼리 파라미터로 부터 URL 생성
     - 기본형
          <c:url var="생성한 URL이 저장될 변수명"
                    value="생성할 URL"
                    scope="변수의 공유 범위" />

⑭ param

     - 기본형
          <c:param name="파라미터 명"
                         value="파라미터 값" />
               <c:url var="registrationURL" value="/customers/register">
               <c:param name="name" value="${param.name}" />
               <c:param name="country" value="${param.country}" />
          </c:url>

<c:set var="temp" value="Hello! World" />
<c:out value="${ temp }" default="value is null"/><br>
<c:out value="${ temp }" default="value is null" escapeXml="false" /><br>
<c:out value="${ temp2 }" default="value is null" /><br>
<c:remove var="timezone" scope="session"/>
<c:set var="timezone" scope="session">CST</c:set>
<c:out value="${cookie['tzPref'].value}" default=="CST"/>

function
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
${fn:substring(name, 1, 10)}

fn:contains(string, substring) 
string이 substring을 포함하면 true 리턴.

fn:containsIgnoreCase(string,substring)
대소문자에 관계없이, string이 substring을 포함하면 true 리턴.

fn:endsWith(string, suffix) 
string이 suffix로 끝나면 true 리턴.

fn:escapeXml(string)   
string에 XML과 HTML에서 특별한 의미를 가진 문자들이 있으면, XML 엔티티 코드로 바꿔준 뒤 문자열 리턴.

fn:indexOf(string,substring) 
string에서 substring이 처음으로 나타나는 인덱스 리턴.

fn:join(array, separator)
 
array(배열) 요소들을 separator를 구분자로 하여 연결해서 리턴

fn:length(item)
     
item 이 배열이나 컬렉션이면 요소의 갯수를, 문자열이면 문자의 갯수를 리턴.

fn:replace(string, before, after)

string 내에 있는 before 문자열을 after 문자열로 모두 바꿔서 리턴.

fn:split(string, separator)
 
string 내의 문자열을 separator에 따라 나누어서 배열로 구성해 리턴.

fn:startsWith(string, prefix)
 
string이 prefix로 시작하면 true 리턴.

fn:substring(string, begin, end)

tring에서 begin 인덱스에서 시작해서 end 인덱스에 끝나는 부분
(end 인덱스에 있는문자 포함)의 문자열을 리턴.

fn:substringAfter(string, substring)

string에서 substring이 나타나는 이후의 부분에 있는 문자열을 리턴.

fn:substringBefore(string, substring)

string에서 substring이 나타나기 이전의 부분에 있는 문자열을 리턴.

fn:toLowerCase(string)
   
string을 모두 소문자로 바꿔 리턴.

fn:toUpperCase(string)
   
string을 모두 대문자로 바꿔 리턴.

fn:trim(string)
     
string 앞뒤의 공백(whitespace)을 모두 제거하여 리턴.

fmt

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
  • 국제화
    • <fmt:message>
    • <fmt:setLocale>
    • <fmt:setTimeZone>
    • <fmt:bundle>
    • <fmt:setBundle>
    • <fmt:param>
    • <fmt:requestEncoding>
  • 포맷팅
    • <fmt:timeZone>
    • <fmt:setTimeZone>
    • <fmt:formatNumber>
    • <fmt:formatDate>
    • <fmt:parseNumber>
    • <fmt:parseData>
    • <fmt:parseNumber>


jstl fmt로 날짜보여줄때, pattern attribute에 의한 날짜 표현 방식들
pattern="yyyy-MM-dd aa h:mm:ss"  
2007-12-13 오전 9:36:48

pattern="yyyy-MM-dd aa hh:mm:ss"
2007-12-13 오전 09:36:48

pattern="yyyy-MM-dd H:mm:ss"    
2007-12-13 9:36:48

pattern="yyyy-MM-dd HH:mm:ss"  
2007-12-13 09:36:48

<fmt:setLocale value="fr_CA" scope="session"/>
<fmt:setTimeZone value="Australia/Brisbane" scope="session"/>
<fmt:formatDate value="${blogEntry.created}" dateStyle="full"/>
<c:out value="${blogEntry.title}" escapeXml="false"/>
<fmt:formatDate value="${blogEntry.created}" pattern="h:mm a zz"/>
<fmt:formatNumber value="0.02" type="currency" currencySymbol="원"/>
<fmt:formatNumber value="9876543.61" type="number"/>
[type="{number|currency|percent}"]

<fmt:parseDate value="${usDateString}" parseLocale="en_US" type="both" dateStyle="short" timeStyle="short" var="usDate"/>

sql
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
  • 데이터베이스 접근
    • <sql:query>
    • <sql:update>
    • <sql:setDataSource>
    • <sql:param>
    • <sql:dataParam>


xml

<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %>
  • 코어 xml 액션
    • <x:parse>
    • <x:out>
    • <x:set>
  • xml 흐름 제어
    • <x:if>
    • <x:choose>
    • <x:when>
    • <x:otherwise>
    • <x:forEach>
  • 변환 액션
    • <x:transform>
    • <x:param>

2013년 9월 3일 화요일

2013-09-01 [web-servlet] 로그인 창 서블릿으로 만들기




HTTP 요청을 구분하여 쉽게 다루는 방법 
  - GenericServlet을 상속받지 말고, HttpServlet을 상속 받아라.
  - get 요청을 처리하고 싶으면 doGet()을 재정의.
  - post 요청을 처리하고 싶으면 doPost()을 재정의.
  - xxx 요청을 처리하고 싶으면 doXxx()을 재정의.
  - 상속 및 구현관계
   - public interface Servlet {...}
   - public abstract class GenericServlet implements Servlet {
   init() {...} 구현
    destroy() {...} 구현
    getServletInfo() {...} 구현
    getServletConfig() {...} 구현
    service()는 구현하지 않음.
   }
   - public abstract class HttpServlet extends GenericServlet {
   service() {
   String method = ...getMethod();
   if("get".equals(method)) {
   doGet();
   } else if("post".equals(method)) {
   doPost();
   } ...
   ...
   }
   doGet() {...}
   doPost() {...}
   doXxx() {...}
   ...
   }


서버에 자동 요청하는 방법
  1) Refresh
   - setHeader("Refresh", "1;url=URL");
   - <html><head><meta http-equiv="Refresh" content="1;url=URL"></head>...
 
  2) Redirect
        - sendRedirect("URL");

2013년 8월 29일 목요일

2013-08-29 [서블릿] 서블릿 등등

서블릿 만들기

  - javax.servlet.Servlet 인터페이스 구현
  - 이 인터페이스에 선언된 메서드를 서블릿 컨테이너(의 스레드)가 호출한다.
 
  서블릿의 인스턴스 생성 시점
  - 클라이언트가 요청할 때
  - 서버가 시작될 때 만들어지는 것이 아님!!!
  - 한번 만들면 다시 만들지 않음.
 
  서블릿 등록
  - 서블릿이 실행되려면 web.xml에 등록되어야 한다.
  - 1) 서블릿 선언: <servlet></servlet>
  - 2) 서블릿에 URL 부여: <servlet-mapping></servlet-mapping>



서블릿 만들기 2

  - 매번 서블릿을 만들 때 마다 구현에 관심없는 메서드들도 만들기 때문에
    짜증난다. 예) init(), destroy(), getServletConfig(), getServletInfo()
  - 주로 어떤 작업을 수행할 것인지 service() 메서드를 구현하는데 집중할 필요가 있다.
  - 대안? 도우미 클래스(BaseServlet)를 정의하여 상속 받는다.
 



javax.servlet.GenericServlet 클래스
  - 서블릿 생성 시 모든 메서드를 구현하는 번거로움을 막기 위해
    미리 4개의 메서드(init, destory, getServletConfig, getServletInfo)를 구현한
    추상 클래스이다.
  - 이전에 우리가 직접 만들었던 BaseServlet과 같은 역할을 한다.
    GenericServlet의 용도를 이해하는데 도움이 될 것 같아 BaseServlet을 만들었다.
    BaseServlet에 대해 왜 만들었는지 궁금해 하지 말라!
 
  - 클라이언트로 출력하기!



제대로 Unicode를 클라이언트가 원하는 문자집합으로 변환하려면
// 출력스트림을 얻기 전에 변환할 문자집합을 설정한다.
response.setContentType("text/plain;charset=UTF-8");





주석

// 라인 주석

/*
 * 멀티라인 주석
 */


/** JavaDoc 주석
  - javadoc.exe로 API 문서를 만들 때 사용하는 주석
  - 이 주석에 들어있는 내용을 가지고 API 주석을 만든다.
  - 개발자가 별도의 문서를 작성할 필요 없이, 소스 코드에 문서를 위한 내용을 포함하게 만든다.


 @author jinyoungeom
 @애노테이션이름(값)
 애노테이션(annotation)
 - 컴파일러나 JVM에게 전달하는 주석





Servlet의...
service()메서드

- 클라이언트가 보낸 Data를 읽기 전에, 문자집합을 알려줘야 한다.
반드시 getParameter()를 호출하기 전에 알려줘야 한다. 호출한 후에는 의미없다.
- 단, URL로 데이타를 보내는 경우(GET요청) 서블릿 컨테이너의 매뉴얼에 따라 설정한다.
 예) 톰캣인 경우, server.xml 파일의 <Connector> 태그의 다음 속성 값을 설정한다.
  <Connector .....  URIEncoding="UTF-8">...</Connector>
 다음은 POST 요청시에 사용한다.
 request.setCharacterEncoding("UTF-8");


2013년 8월 28일 수요일

2013-08-28 [Servlet] 톰캣을 이용한 웹프로그램 생성

웹 프로그램 구조...
이클립스는 Unicode이기때문에 UTF-8로 바꿔주는 것이필요하다
톰캣은  iso8859-1로 받고 보내기때문에 바꿔주는 코드가 필요하다.


Data를 읽기전에 읽기Data의 문자집합을 알려준다.

Data를 쓰기전에 쓰기Data의 문자집합을 알려준다.

2013년 8월 27일 화요일

2013-08-27 [Servlet] WEB 어플리케이션의 기초, TOMCAT설치하기



1.web이 나오게 된 과정





















1) web 이전방식
























2) HTML 의 도입
나는 <링크정보> 자바</끝>를 배웁니다.

설명 제어하는 Data = Meta data = "Markup" 이라고 합니다.

그래서 Hyper Text Markup Language ==> HTML이라고 불리는 것입니다.




2. 문서를 주고 받는 규칙 정의




connectionful(stateful)과 stateless(connectionless)


1) connectionful(stateful)
 - 인터폴이라고 생각하면 쉽다. full-online으로 계속 연결되어 있어야 한다.
 - 리소스(메모리)를 계속 사용해야 되기때문에 연결에 제한이 있고 많은 client처리가 불가
 - 요청시 누구의 요청인지 알고 응답이 빠르다.
 - ex) FTP, Telnet, chatting

2) stateless(connectionless)
 - 114라고 생각하면 쉽다. 매번연결이 필요하다.
 - 매번 연결과 끊김이 일어나기 때문에 많은 client의 요청이 처리가능하다.
 - 응답속도가 느리다.
 - client의 상태관리가 안된다.




3. HTTP



 - Hyper-Text Transfer Protocol

 HTTP server(web server) 와 HTTP client(web Browser)




4.Web의 발전








1) 문서전송


2) 간단한 Application(게시판 ,방명록)







*Web Application 아키텍처





*webApplication 구동





CGI(Common Gateway Interface)
-> web server와 web Application 사이에 데이터를 주고 받는 규칙


3) Web을 Application의 플랫폼화

PC App -> Web App으로 전환

HTML문서는 UI가 단순한 문제가 있었다.
그래서 아래와 같은 3가지 를 이용해 복잡한 UI를 표현할 수 있게 되었다.
HTML5     -> 문서구조
CSS3       -> 고급UI
JavaScript -> UI제어,서버통신





5.Servlet Container



 Web Application에서 Java App과 관리 S/W를 Servlet Container를 통해서 가능하게 되었따.

* Servlet Container와 Application







6. Java EE 버전..








7.Web Application 배치(Deployment)
 -> 서버마다 배치폴더가 다르다
 -> Tomcat
 -> c\javaide\server\apache-tomcat
       \bin           //톰켓 실행관련
       \cont         //선점파일
       \lib            // Tomcat java- libran
       \work        // 실행중에 임시 생성하는 파일
       \webapps   // web app 배치폴더




8.Web Application 배치폴더 구조




배치폴더 루트 / 웹어플폴더/ WEB-INF /web.xml        // 기타 설정파일들
배치폴더 루트 / 웹어플폴더/ WEB-INF /classes         // 자바 클래스 파일
배치폴더 루트 / 웹어플폴더/ WEB-INF /lib /.jar          // 자바라이브러리 파일





9.Servlet 만들기









서블릿을 만들려면 Servlet인터페이스(규칙)를 상속받아 반드시 메서드를 구현해야 한다.
호출규칙으로서 다음과 같은 5가지 메서드가 있다.
- init()
- service()
- destroy()
- getServletConfig()
- getServletInfo()

일반적으로 메서드를 항상 구현하는 번거로움이 있기 때문에 자주 쓰이는 service()를 뺀 나머지를 구현해 놓은 추상클래스가 있다. 이 추상클래스를 보통 상속받으면 service()만 구현하면 된다. 이 추상클래스를 GenericServlet 클래스라고 한다.








10. TOMCAT 설치하기






1) 이클립스 환경설정에서 아래와같이 Runtime 환경변수 등록






2) 아래와 같이 설치한 Tomcat 버전을 찾아 설치







3) 아래와 같이 톰켓 폴더지정






4) 아래와같이 Servers에서 New->Server







5)  다운로드한 Tomcat 버전에 맞추어 선택








6) 아래서버를 더블클릭하여 나오는 창에서 HTTP 포트번호를 원하는 포트번호로 지정