jsp 현재 날짜, 일주일전 날짜, 한달 전 날짜 구하기.

currentCalendar.add 부분에 -값이 아닌 +값을 대입하면 현재 이후의 날짜를 구할 수 있지요.

 

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="java.text.DecimalFormat" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.util.Calendar" %>

<%
    DecimalFormat df = new DecimalFormat("00");
    Calendar currentCalendar = Calendar.getInstance();

  //현재 날짜 구하기
    String strYear   = Integer.toString(currentCalendar.get(Calendar.YEAR));
    String strMonth  = df.format(currentCalendar.get(Calendar.MONTH) + 1);
    String strDay   = df.format(currentCalendar.get(Calendar.DATE));
    String strDate = strYear + strMonth + strDay;

  //일주일 전 날짜 구하기
    currentCalendar.add(currentCalendar.DATE, -7);
    String strYear7   = Integer.toString(currentCalendar.get(Calendar.YEAR));
    String strMonth7  = df.format(currentCalendar.get(Calendar.MONTH) + 1);
    String strDay7   = df.format(currentCalendar.get(Calendar.DATE));
    String strDate7 = strYear7 + strMonth7 + strDay7;

  //한달 전 날짜 구하기
    currentCalendar.add(currentCalendar.DATE, -24);
    String strYear31   = Integer.toString(currentCalendar.get(Calendar.YEAR));
    String strMonth31  = df.format(currentCalendar.get(Calendar.MONTH) + 1);
    String strDay31   = df.format(currentCalendar.get(Calendar.DATE));
    String strDate31 = strYear31 + strMonth31 + strDay31;
%>

<!-- 현재날짜 -->
<c:set var="nowdate" value='<%=strDate%>' />
<!-- 일주일전 -->
<c:set var="nowdate7" value='<%=strDate7%>' />
<!-- 한달전 -->
<c:set var="nowdate31" value='<%=strDate31%>' /> 
Posted by 홍반장水 홍반장水
TAG Java, jsp, 날짜

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 홍반장水 홍반장水

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 홍반장水 홍반장水

Calendar 클래스 (달력 출력)

Calendar 클래스도 Date 클래스처럼 날짜와 시간에 관한 정보를 표현할 때 사용한다. Date 클래스에서 deprecate된 메소드나 생성자들 중 같은 기능의 메소드가 Calendar 클래스에서 제공된다.
Calendar 클래스는 추상 클래스이므로 객체를 직접 생성할 수는 없지만, getInstance() 메소드를 이용하여 시스템의 날짜와 시간 정보를 표현할 수 있다.

Calendar.DAY_OF_YEAR
Calendar.DAY_OF_MONTH
Calendar.DAY_OF_WEEK

 

Posted by 홍반장水 홍반장水
TAG Calendar, Java

메이븐(MAVEN) 파헤치기

 

Posted by 홍반장水 홍반장水

JSTL, Function Tag의 이해

  • Functon 태그는 자주 사용하는 유틸 함수의 기능을 제공한다.
  • <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 선언을 해줘야 사용할 수 있다.

5.1 Function Tag 에서 지원하는 함수들

  • 아래 표는 Function Tag 에서 지원하는 함수들이다.

 

속성 설명
fn:contains(string, sbustring) string이 substring을 포함하면 return True
fn:containsIgnoreCase(string, sbustring) 대소문자 관계없이 string이 substring을 포함하면 return True
fn:endsWith(string, suffix) string이 suffix로 끝나면 return True
fn:escapeXml(string) stting에 XML과 HTML에서 특수문자(<,>,&,',")들이 있으면, XML엔티티 코드로 바꿔준뒤 문자열 반환
fn:indexOf(string, sbustring) 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내의 문자열 separetor에 따라 나누어서 배열로 구성해서 반환
fn:startsWith(string, prefix) string이 prefix로 시작하면 return True
fn:substring(string, begin, end) string에서 begin인덱스에서 시작해서 end인덱스에 끝나는 부분의 문자열 반환
fn:substringAfter(string, sbustring) string에서 substring이 나타나는 이후의 문자열 반환
fn:substringBefore(string, sbustring) string에서 substring이 나타나는 이전의 문자열 반환
fn:toLowerCase(string) string을 모두 소문자로 바꿔 리턴
fn:toUpperCase(string) string을 모두 대문자로 바꿔 리턴
fn:trim(string) string앞뒤의 공백을 모두 제거하여 반환

 

 

 

출처 : http://wiki.gurubee.net/pages/viewpage.action?pageId=26740270

 

JSTL의 이해 및 실습 - 12.구루비 Dev 스터디 - 개발자, DBA가 함께 만들어가는 구루비 지식창고!

JSTL의 이해 및 실습 Added by 김정식, last edited by 김정식 on 9월 18, 2012  (view change) JSTL의 이해 및 활용 1. JSTL의 이해 http://tomcat.apache.org/taglibs/ JS

wiki.gurubee.net

.....

'프로그래밍 > JSP&Servlet' 카테고리의 다른 글

JSP Spring workflow  (0) 2019.04.24
eclipse(이클립스) 유용한 단축키  (0) 2019.04.23
JSTL, Function Tag의 이해  (0) 2019.04.23
주석, JSP, JAVA  (0) 2019.04.23
JSTL, Format Tag의 이해  (0) 2019.04.23
JSP 에서 ASP의 response.end 처럼 하기  (0) 2019.04.23
Posted by 홍반장水 홍반장水

주석, JSP, JAVA

 

 

1) JSP주석

​<%-- 로 시작하고, 주석 내용이 위치한후 --%> 

<%-- 설명 --%>

<%-- 와 --%> 사이에 들어오는 문자열은 무엇이 오든 상관없다. 단 주석이 다음과 같이 중첩될 경우 첫번째 <%--와 첫번째 --%>사이에 있는 문장만 주석으로 처리되며, 마지막 --%>는 출력 결과에 그대로 포함.
 
<%-- <%--주석--%> --%>
 
2) 자바 언어 주석

  //주석내용
  /* 주석내용 */

여기서 첫번째로 //는 현재줄에서 //이후로나오는 모든 내용을 주석으로 처리.
두번째는  /*와 */ 사이에 있는 내용을 주석으로 처리.

이들 자바 주석은 스크립트릿,표현식, 선언부 안에서만 사용 가능한 주석들이며, 그외의 곳에서 사용될 경우 주석으로 인식되지 않는다.

Posted by 홍반장水 홍반장水
TAG Java, jsp, 주석

java, Eclipse 사용시 탭을 공백문자로 바꾸기. tab-to-space

 

1. 이클립스 상단 메뉴들 중 [Window] -> [Preferences] 를 차례로 클릭하여 설정 팝업을 띄운다.

* 텍스트 파일 설정  
2. 설정 팝업에서 [General] -> [Editors] -> [Text Editors] 를 차례로 클릭하고 우측의 "Insert spaces for tabs" 체크박스를 체크한다.

* 자바 파일 설정 
3. (2)위 동일하게 [Java] -> [Code Style] -> [Formatter] 를 차례로 클릭하고 우측의 "Edit" 버튼을 클릭한다.

4. [Tab policy] 항목을 "Tab only" 에서 "Spaces only" 로 바꾸고, 상단의 profile name을 적절하게 변경한다. (Ex.Eclipse Tab-to-Space)

* XML 파일 설정 
5. (2)와 동일하게 [XML] -> [XML Files] -> [Editor] 에서 "Indent using spaces" 라디오버튼을 체크한다.
위의 설정은 웹 개발자들이 자주 사용하는 텍스트 파일, 자바파일, xml파일을 동일하게 적용하기 위함이다.

위와 같이 적용이 끝난 후 코딩을 하면 Tab을 눌렀을 경우 Spaces가 4칸의 효과를 확인 할 수 있다.

이렇게 개발자들이 설정을 하고 나면 Tab을 사용하던 Spaces를 사용하던간에 동일한 Spaces를 이용하여 라인을 맞춘것으로 보이기 때문에 가독성에 있어서 효율적인 소스코드를 볼 수 있다.

Posted by 홍반장水 홍반장水

답답해서 찾아보다가 앗! 이거 설명이 좀 쉽네. ㅎㅎ

 

https://all-record.tistory.com/165

 

Spring MVC - home.jsp의 동작원리

스프링 MVC 프로젝트의 구조 스프링 MVC 프로젝트를 생성하면 위와 같은 구조로 되어있다. 프로젝트의 구조를 살펴보면 위와 같다. 여기에서 중요한 것에 WEB-INF 밑에 있는 spring 폴더이다. 여기에는 스프링..

all-record.tistory.com

 

 

Posted by 홍반장水 홍반장水
TAG Java, MVC, Spring

 

In Eclipse from your project:

  1. Right-click on your project
  2. Click Properties
  3. Java build path: Libraries; Remove the "JRE System Library[J2SE 1.4]"
  4. Click Add Library -> JRE System Library
  5. Select the new "Execution Environment" or Workspace default JRE

https://stackoverflow.com/questions/3138384/warning-build-path-specifies-execution-environment-j2se-1-4

 

Warning - Build path specifies execution environment J2SE-1.4

I create a Maven project in Eclipse Helios. It works fine for a day, but then this warning shows up: Build path specifies execution environment J2SE-1.4. There are no JREs installed in the works...

stackoverflow.com

 

이클립스에 기존 프로젝트를 import 한 후, 아래와 같은 warning 이 발생하는 경우

Build path specifies execution environment JavaSE-1.6. warning. There are no JREs installed in the workspace that are strictly compatible with this environment.

아래와 같이 조치하시면 warning 이 제거됩니다.


* 프로젝트 Properties 메뉴를 클릭한다.

* Java Build Path 를 클릭한 후, Libraries tab 을 클릭한다.

* "JRE System Library" 를 제거한다.

* "Add Library..." 버튼을 클릭한 후, "JRE System Library" 를 선택하고 "Next" 버튼을 클릭한다.

 

 

Posted by 홍반장水 홍반장水