*** Tibero 접속 
1.  SSH 접속
>  su – root

2. 유저 root에서 Tibero 로 변경
>  su - tibero

3.디비 호출
> export TB_SID=디비명

4. tbsql 아이디/비밀번호
> tbsql 아이디
  pw...

//----------------------------------

 

Posted by 홍반장水 홍반장水

Eclipse - 줄맞춤.  refactor > Format 

Ctrl + Shift + f

Posted by 홍반장水 홍반장水

JAVA, XML Mapper 만들기

Eclipse > new > others > MyBatis > MyBatis XML Mapper 선택.

http://www.mybatis.org/mybatis-3/ko/sqlmap-xml.html

 

MyBatis – 마이바티스 3 | 매퍼 XML 파일

Mapper XML 파일 마이바티스의 가장 큰 장점은 매핑구문이다. 이건 간혹 마법을 부리는 것처럼 보일 수 있다. SQL Map XML 파일은 상대적으로 간단하다. 더군다나 동일한 기능의 JDBC 코드와 비교하면 아마도 95% 이상 코드수가 감소하기도 한다. 마이바티스는 SQL을 작성하는데 집중하도록 만들어졌다. SQL Map XML파일은 첫번째(first class)엘리먼트만을 가진다. cache - 해당 네임스페이스을 위한 캐시 설정 cache-re

www.mybatis.org

Mapper XML 파일

마이바티스의 가장 큰 장점은 매핑구문이다. 이건 간혹 마법을 부리는 것처럼 보일 수 있다. SQL Map XML 파일은 상대적으로 간단하다. 더군다나 동일한 기능의 JDBC 코드와 비교하면 아마도 95% 이상 코드수가 감소하기도 한다. 마이바티스는 SQL을 작성하는데 집중하도록 만들어졌다.

SQL Map XML파일은 첫번째(first class)엘리먼트만을 가진다.

  • cache - 해당 네임스페이스을 위한 캐시 설정
  • cache-ref - 다른 네임스페이스의 캐시 설정에 대한 참조
  • resultMap - 데이터베이스 결과데이터를 객체에 로드하는 방법을 정의하는 엘리먼트
  • parameterMap - 비권장됨! 예전에 파라미터를 매핑하기 위해 사용되었으나 현재는 사용하지 않음
  • sql - 다른 구문에서 재사용하기 위한 SQL 조각
  • insert - 매핑된 INSERT 구문.
  • update - 매핑된 UPDATE 구문.
  • delete - 매핑된 DELEETE 구문.
  • select - 매핑된 SELECT 구문.
Posted by 홍반장水 홍반장水

[단축키] alt + shift + j  in Eclipse, 주석, comment

주석 생성은 alt + shift + j 를 누르면 된다.
그런데 위와 같은 주석은 일부로 템플릿을 만들어서 저장 시켜주는 것이다. 

이클립스 상위 메뉴 중 window > prefereances 를 들어간다.
그리고 왼쪽 탭들 중Java > Code Style > Code Template 를 들어간다.

Posted by 홍반장水 홍반장水

 [JSP] 현재 URL 가져오기

Context : <%= request.getContextPath() %>

URL : <%= request.getRequestURL() %>

URI : <%= request.getRequestURI() %>

Path : <%= request.getServletPath() %>

 

URL은 Uniform Resource Locator

URI는 Uniform Resource Identifier

URI(동물) 가 좀더 상위 개념이라서 URL(강아지), URN(다람쥐) 등의 하위 개념을 포함한다.

URI 와 URL 이 아예 다른게 아니라 포함관계라서

모든 URL 는 URI 이다. 가 성립힌다. (TRUE)

URI = URL + URN

 

Posted by 홍반장水 홍반장水

파사드(프랑스어: Façade)는 건물의 출입구로 이용되는 정면 외벽 부분을 가리키는 말이다. 한글화하여 순화하려면 '정면'(正面)이 무난할 것으로 여겨진다. 건축에서 파사드의 궁극적 목적은 '소통'이다. 건물의 입면이 다양해지면서 파사드는 건물 외피 전체를 의미하기도 한다.

건축의 관점에서 파사드는 종종 그 건물에서 가장 중요한 디자인적 요소가 된다. 그리하여 파사드가 그 건물의 나머지 부분의 색채, 톤을 잡아준다. 이런 측면에서 '파사드'라는 개념은 은유적으로 사용될 수 있는데, 거시적 관점과 미시적 관점에 대해 사유할 여지를 준다.[1]

많은 경우에 파사드는 역사적인 구조물이며, 지역 법률에 의하여 그 변경이 크게 제한되어 있으며, 가끔 파사드의 변경은 거부감을 발생시킨다.

'미디어 파사드'는 '파사드(Facade)'와 '미디어(Media)'의 합성어로, 건물 외벽 등에 LED 조명을 설치해 미디어 기능을 구현하는 것을 의미한다.

Posted by 홍반장水 홍반장水

JSTL변수 ${} 를 JSP에서 사용 하기, 변수 혼용하기

JSTL ---> JSP
///////////////////
<c:set var="변수이름" value="${JSTL변수}"/>

<%
String strJsp=(String)pageContext.getAttribute("변수이름");
%>

////////////////

JSP ---> JSTL
<%
String strJSP="A123"
pageContext.setAttribute("strJSTL",strJSP);
%>

<c:out value="${strJSTL}" />

=-========================================

<%
int jspVal = 888;
pageContext.setAttribute("jspVal", jspVal) ;
%>
<c:out value="${jspVal}" default="999"></c:out>
<c:set var="tmpValue" value="${jspVal}"></c:set>
<c:out value="${tmpValue}" default="0"></c:out>
<%= pageContext.getAttribute("tmpValue") %>

Posted by 홍반장水 홍반장水

Java XML parse Library (=XPath)

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.net.HttpURLConnection;
import java.net.URL;
 
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;
 
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
 
public class OpenApi {
    public static void main(String[] args) {
        BufferedReader br = null;
        //DocumentBuilderFactory 생성
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true);
        DocumentBuilder builder;
        Document doc = null;
        try {
            //OpenApi호출
            String urlstr = "http://openapi.airkorea.or.kr/"
                    + "openapi/services/rest/ArpltnInforInqireSvc/getMsrstnAcctoRltmMesureDnsty"
                    + "?stationName=수내동&dataTerm=month&pageNo=1&numOfRows=10&ServiceKey=서비스키&ver=1.3";
            URL url = new URL(urlstr);
            HttpURLConnection urlconnection = (HttpURLConnection) url.openConnection();
            
            //응답 읽기
            br = new BufferedReader(new InputStreamReader(urlconnection.getInputStream(), "UTF-8"));
            String result = "";
            String line;
            while ((line = br.readLine()) != null) {
                result = result + line.trim();// result = URL로 XML을 읽은 값
            }
            
            // xml 파싱하기
            InputSource is = new InputSource(new StringReader(result));
            builder = factory.newDocumentBuilder();
            doc = builder.parse(is);
            XPathFactory xpathFactory = XPathFactory.newInstance();
            XPath xpath = xpathFactory.newXPath();
            // XPathExpression expr = xpath.compile("/response/body/items/item");
            XPathExpression expr = xpath.compile("//items/item");
            NodeList nodeList = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
            for (int i = 0; i < nodeList.getLength(); i++) {
                NodeList child = nodeList.item(i).getChildNodes();
                for (int j = 0; j < child.getLength(); j++) {
                    Node node = child.item(j);
                    System.out.println("현재 노드 이름 : " + node.getNodeName());
                    System.out.println("현재 노드 타입 : " + node.getNodeType());
                    System.out.println("현재 노드 값 : " + node.getTextContent());
                    System.out.println("현재 노드 네임스페이스 : " + node.getPrefix());
                    System.out.println("현재 노드의 다음 노드 : " + node.getNextSibling());
                    System.out.println("");
                }
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

 

1. XML이 제공되는 URL로 접속해서 데이터를 받아온다.

2. DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance()로 factory를 생성한다.

3. DocumentBuilder builder = factory.newDocumentBuilder();로 builder를 생성한다.

4. InputSource is = new InputSource(new StringReader( 1.에서 받은 xml문자열 )); 로 InputSource를 생성한다.

  - XML파일에서 받는거면 InputSource is = new InputSource(new FileReader( File객체 ));로 생성한다.

5. Document doc = builder.parse(is); 로 XML을 파싱한다.

6. XPath xpath = XPathFactory.newInstance().newXPath(); 로 XPath 객체를 생성하고

7. XpathExpression expr = xpath.complie( 선택하는 문법 ); 으로 가져올 element를 선택한다.

8. 해당 노드(Element)에 접근해서 필요한 데이터를 추출한다.

 

대략적으로 위와 같은 과정으로 XML데이터 파싱이 이루어진다.

 DocumentBuilderFactory로부터 builder를 만들어내고 InputSource에 XML을 넣어서 document를 만드는 것까지는 일반적이다.

여기서 XML을 파싱해서 새롭게 만들어진 DOM객체를 접근하는데에 XPath가 쓰인다.

중점적으로 봐야할 부분은 역시 XPath의 문법이다. XPath는 노드에 접근하는데에 표현식(XPathExpression)이 사용된다.

다른 블로그에서 Xpath 표현식 문법(?)에 대해 잘 정리한 곳이 많으므로 여기서는 자주 쓰이고 중요한 부분만 정리한다.


 

 XPathExpression

표현식까지 익혀야 한다고 번거로운 라이브러리라고 판단할 수도 있겠지만 한 번 익혀두거나 나중에 찾아보면서 사용해도 훌륭한 것 같은 라이브러리니 간단하게 배운다.

item : <item>요소를 모두 선택함
/item : "/" 루트 노드의 자식 노드중에서 <item>엘리먼트를 선택함 (앞에 "/"가 들어가면 절대 경로)
item/jeongpro : <item>엘리먼트의 자식 노드중에서 <jeongpro>엘리먼트를 선택 (상대 경로)
// : 현재 노드의 위치와 상관없이 지정된 노드부터 탐색
//item : 위치와 상관없이 엘리먼트 이름이 <item>인 모든 엘리먼트
item/@id : 모든 <item>엘리먼트의 id속성 노드를 모두 선택함
item[k] : <item>엘리먼트 중에서 k번 째 <item>엘리먼트
item[@attr = val] : attr이라는 속성이 val값을 가지는 모든 <item>엘리먼트

 

이런 표현식들이 있으니 잘 사용하면된다. 위의 예제에서는 //items/item 이라는 표현식을 적었으므로 "위치와 상관없이 <items>라는 노드들 중에서 자식 노드가 <item>인 노드(element)들을 NodeList로 받았다.

결과적으로 파싱을 마친 후 노드에서 원하는 데이터를 정확하게 추출하는 것이 중요하다.

node.getNodeName() 으로 "element 이름"을 받았고

node.getTextContent() 로 "값"을 받았다. (* 참고로 getNodeValue()가 있는데 혼란을 겪지 않길 바란다.)

또한 node.getPrefix() 로 "네임스페이스 값"을 받을 수도 있고

node.getNextSibling으로 "다음 노드"를 선택할 수도 있다.

속성은 node.getAttributes().item(0) 이런식으로 받을 수 있다.

끝으로 문자열에서 xml 파싱하는 소스도 첨부한다.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.net.HttpURLConnection;
import java.net.URL;
 
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;
 
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
 
public class OpenApi {
    public static void main(String[] args) {
        //DocumentBuilderFactory 생성
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true);
        DocumentBuilder builder;
        Document doc = null;
        try {
            // xml 파싱하기
            String result = "<response xmlns:s='http://www.example.net/'><items><item><s:best>hello</s:best></item></items></response>";
            InputSource is = new InputSource(new StringReader(result));
            builder = factory.newDocumentBuilder();
            doc = builder.parse(is);
            XPathFactory xpathFactory = XPathFactory.newInstance();
            XPath xpath = xpathFactory.newXPath();
            // XPathExpression expr = xpath.compile("/response/body/items/item");
            XPathExpression expr = xpath.compile("//items/item");
            NodeList nodeList = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
            for (int i = 0; i < nodeList.getLength(); i++) {
                NodeList child = nodeList.item(i).getChildNodes();
                for (int j = 0; j < child.getLength(); j++) {
                    Node node = child.item(j);
                    System.out.println("현재 노드 이름 : " + node.getNodeName());
                    System.out.println("현재 노드 이름 : " + node.getLocalName());
                    System.out.println("현재 노드 타입 : " + node.getNodeType());
                    System.out.println("현재 노드 값 : " + node.getTextContent());
                    System.out.println("현재 노드 네임스페이스 : " + node.getPrefix());
                    System.out.println("현재 노드의 다음 노드 : " + node.getAttributes().item(0));
                    System.out.println("");
                }
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}
 

 https://jeong-pro.tistory.com/144

 

자바 XML 파싱 라이브러리, XPath를 사용한 예제와 정확하게 element를 선택하는 방법을 알아보자

Java XML parse Library (=XPath) XPath : 자바에서 내장 패키지(javax.xml.xpath)로 제공하는 라이브러리로 XML형식의 웹문서, 파일, 문자열을 파싱하는데 사용한다. 요즘 누가 XML쓰나? JSON이랑 비교했을 때 태..

jeong-pro.tistory.com

 

Posted by 홍반장水 홍반장水

Youtube 반복재생 안될때. 

< iframe width="560" height="315" src="https://www.youtube.com/embed/vn6b2gj4EVc?rel=0&autoplay=1&modestbranding=1&loop=1&showinfo=0;playlist=vn6b2gj4EVc"

에서 마지막에 playlist= 에 동영상 코드를 동일하게 넣어주어라. 

그리고, rel= autoplay= 순서 바꾸지 말고. 

 

<iframe width="560" height="315" src="https://www.youtube.com/embed/vn6b2gj4EVc?rel=0&autoplay=1&modestbranding=1&loop=1&showinfo=0;playlist=vn6b2gj4EVc" ~~~></iframe>
Posted by 홍반장水 홍반장水

JAVA, JSP - QR Code 만들기 소스 - ZXing ("Zebra Crossing") barcode scanning library for Java, Android

https://github.com/zxing/zxing

 

zxing/zxing

ZXing ("Zebra Crossing") barcode scanning library for Java, Android - zxing/zxing

github.com

java  android   barcode   barcode-scanner   zxing   qr-code   datamatrix   upc  

Posted by 홍반장水 홍반장水