2012-10-31
java] SimpleDateFormate 예제
출처 : http://www.ssial.com/141
import java.text.SimpleDateFormat;
.
.
.
Format formatter;
// The year
formatter = new SimpleDateFormat("yy"); // 02
formatter = new SimpleDateFormat("yyyy"); // 2002
// The month
formatter = new SimpleDateFormat("M"); // 1
formatter = new SimpleDateFormat("MM"); // 01
formatter = new SimpleDateFormat("MMM"); // Jan
formatter = new SimpleDateFormat("MMMM"); // January
// The day
formatter = new SimpleDateFormat("d"); // 9
formatter = new SimpleDateFormat("dd"); // 09
// The day in week
formatter = new SimpleDateFormat("E"); // Wed
formatter = new SimpleDateFormat("EEEE"); // Wednesday
// Get today's date
Date date = new Date();
// Some examples
formatter = new SimpleDateFormat("MM/dd/yy");
String s = formatter.format(date);
// 01/09/02
formatter = new SimpleDateFormat("dd-MMM-yy");
s = formatter.format(date);
// 29-Jan-02
// Examples with date and time; see also
// e316 Formatting the Time Using a Custom Format
formatter = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss");
s = formatter.format(date);
// 2002.01.29.08.36.33
formatter = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z");
s = formatter.format(date);
// Tue, 09 Jan 2002 22:14:02 -0500
// The hour (1-12)
formatter = new SimpleDateFormat("h"); // 8
formatter = new SimpleDateFormat("hh"); // 08
// The hour (0-23)
formatter = new SimpleDateFormat("H"); // 8
formatter = new SimpleDateFormat("HH"); // 08
// The minutes
formatter = new SimpleDateFormat("m"); // 7
formatter = new SimpleDateFormat("mm"); // 07
// The seconds
formatter = new SimpleDateFormat("s"); // 3
formatter = new SimpleDateFormat("ss"); // 03
// The am/pm marker
formatter = new SimpleDateFormat("a"); // AM
// The time zone
formatter = new SimpleDateFormat("z"); // PST
formatter = new SimpleDateFormat("zzzz"); // Pacific Standard Time
formatter = new SimpleDateFormat("Z"); // -0800
// Get today's date
Date date = new Date();
// Some examples
formatter = new SimpleDateFormat("hh:mm:ss a");
String s = formatter.format(date);
// 01:12:53 AM
formatter = new SimpleDateFormat("HH.mm.ss");
s = formatter.format(date);
// 14.36.33
출처: http://www.exampledepot.com/egs/java.text/pkg.html#Times
라벨:
자바,
프로그래밍,
java,
programing,
simpleDataFormate
JAVA] RSS Reader 만들기
** java]Http 통신 의 예제 파일 참조
javascript를 이용한 초간단 Rss Reader 구현하기 : javascript 를 이용한 초간단 Rss Reader 구현하기
참조사이트 : http://blog.naver.com/sullim75?Redirect=Log&logNo=140028752352
춣처 : http://poolpiri.egloos.com/7021118
간단한 Rss Reader 만들기...
블로그를 만들어보다가 Rss를 읽어서 웹상에서 보여주는 RssReader가 필요할꺼 같아서...
위의 소스는 commons.digester 1.5/1.6 을 기준으로 작성 되어서 2.x에서는 RSSDigester()를 찾을 수 없었다...(2010.07.06 기준)
간단하게 만들어봅니다.
자카르타 오픈 컴포넌트중에 하나인 commons.digester를 이용한겁니다...그래서 간단허져...
일단 아래와 같이 간단한 메서드를 만들어봅니다.
/**
* RSSDigester를 이용해서 링크의 스트림(xml)을 파싱해서 Channel객체를 리턴한다.
*
* @param xmlLink
* @param response
* @return org.apache.commons.digester.rss.Channel
* @throws Exception
*/
private Channel getChannel(String xmlLink)
throws Exception {
Channel chan = null;
try {
RSSDigester digester = new RSSDigester();
// 방법 1. Rss Link를 이용한 파싱...
//chan = (Channel) digester.parse(xmlLink);
// 방법 2. Rss Link를 URL로 연결해서 얻은 스트림으로 파싱...
//chan = (Channel) digester.parse(new URL(xmlLink).openStream());
// 방법 3. 국내 사이트 Character Encoding문제 때문에...추가...
chan = (Channel) digester.parse(getEncodedReader(xmlLink));
} catch (java.io.IOException ioe) {
chan = new Channel();
chan.setTitle("ERROR");
StringBuffer sb = new StringBuffer("<span class="error">");
sb.append("IOException parsing RSS XML LINK : " + xmlLink);
sb.append("</span>n<p>");
sb.append(ioe.toString());
chan.setDescription(sb.toString());
} catch (org.xml.sax.SAXException se) {
chan = new Channel();
chan.setTitle("ERROR");
StringBuffer sb = new StringBuffer("<span class="error">");
sb.append("SAXException parsing RSS XML LINK : " + xmlLink);
sb.append("</span>n<p>");
sb.append(se.toString());
chan.setDescription(sb.toString());
}
return chan;
}
* RSSDigester를 이용해서 링크의 스트림(xml)을 파싱해서 Channel객체를 리턴한다.
*
* @param xmlLink
* @param response
* @return org.apache.commons.digester.rss.Channel
* @throws Exception
*/
private Channel getChannel(String xmlLink)
throws Exception {
Channel chan = null;
try {
RSSDigester digester = new RSSDigester();
// 방법 1. Rss Link를 이용한 파싱...
//chan = (Channel) digester.parse(xmlLink);
// 방법 2. Rss Link를 URL로 연결해서 얻은 스트림으로 파싱...
//chan = (Channel) digester.parse(new URL(xmlLink).openStream());
// 방법 3. 국내 사이트 Character Encoding문제 때문에...추가...
chan = (Channel) digester.parse(getEncodedReader(xmlLink));
} catch (java.io.IOException ioe) {
chan = new Channel();
chan.setTitle("ERROR");
StringBuffer sb = new StringBuffer("<span class="error">");
sb.append("IOException parsing RSS XML LINK : " + xmlLink);
sb.append("</span>n<p>");
sb.append(ioe.toString());
chan.setDescription(sb.toString());
} catch (org.xml.sax.SAXException se) {
chan = new Channel();
chan.setTitle("ERROR");
StringBuffer sb = new StringBuffer("<span class="error">");
sb.append("SAXException parsing RSS XML LINK : " + xmlLink);
sb.append("</span>n<p>");
sb.append(se.toString());
chan.setDescription(sb.toString());
}
return chan;
}
파라미터로 와야하는 String xmlLink은 본 엠파스 블로그에 있는거같은 RSS링크 유알엘을 넣어주심 됩니다. 제 블로그를 예를 들면..."http://blog.empas.com/poolpiri3/rss.xml" 이게 들어오면 되는겁니다.
여기 예제는 엠파스에서 제공하는 rss.2.0 버전에만 잘돌아갑니당...이 버전은 웬만한 국내 RSS가 지원하는 버전입니다...
소스 중간에 있는 주석을 보시면 몇가지 방법이 있습니다만...국내 사이트의 경우 한글 인코딩 문제로 파싱이 제대로 안됩니다. 여기 엠파스도 마찬가지구여... 이럴줄 알았으면 굳이 digester를 쓰지 않고 방법을 생각했으면 더 쉬워질 수 도 있었습니다만...제가 무지한지라...하여 아래와 같은 메서드를 무식하게 추가했습니다.
여기 예제는 엠파스에서 제공하는 rss.2.0 버전에만 잘돌아갑니당...이 버전은 웬만한 국내 RSS가 지원하는 버전입니다...
소스 중간에 있는 주석을 보시면 몇가지 방법이 있습니다만...국내 사이트의 경우 한글 인코딩 문제로 파싱이 제대로 안됩니다. 여기 엠파스도 마찬가지구여... 이럴줄 알았으면 굳이 digester를 쓰지 않고 방법을 생각했으면 더 쉬워질 수 도 있었습니다만...제가 무지한지라...하여 아래와 같은 메서드를 무식하게 추가했습니다.
/**
* xml파일의 encoding타입을 읽어서 그 타입대로 컨버전후 InputStreamReader를 리턴한다.
*
* @param xmlLink
* @return InputStreamReader
*/
private InputStreamReader getEncodedReader(String xmlLink) {
URL url = null;
InputStreamReader reader = null;
BufferedReader br = null;
try {
url = new URL(xmlLink);
reader = new InputStreamReader(url.openStream());
byte b[] = new byte[1024];
br = new BufferedReader(reader);
String line = br.readLine();
while (line != null) {
if (!(line.trim().equals(""))) {
int index = line.toLowerCase().indexOf("encoding");
String prefix = """;
String encoding = "";
if (index != -1) {
int start = line.indexOf(prefix, index) + 1;
if (start == -1) {
prefix = "'";
start = line.indexOf(prefix, index) + 1;
if (start == -1) {
start = line.indexOf("=", index) + 1;
prefix = "?";
}
}
encoding = line.substring(start, line.indexOf(prefix, start));
if (encoding != null && !("".equals(encoding))) {
reader = new InputStreamReader( url.openStream(), encoding.trim());
} else {
reader = new InputStreamReader(url.openStream());
}
} else {
reader = new InputStreamReader(url.openStream());
}
break;
}
line = br.readLine();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
return reader;
}
* xml파일의 encoding타입을 읽어서 그 타입대로 컨버전후 InputStreamReader를 리턴한다.
*
* @param xmlLink
* @return InputStreamReader
*/
private InputStreamReader getEncodedReader(String xmlLink) {
URL url = null;
InputStreamReader reader = null;
BufferedReader br = null;
try {
url = new URL(xmlLink);
reader = new InputStreamReader(url.openStream());
byte b[] = new byte[1024];
br = new BufferedReader(reader);
String line = br.readLine();
while (line != null) {
if (!(line.trim().equals(""))) {
int index = line.toLowerCase().indexOf("encoding");
String prefix = """;
String encoding = "";
if (index != -1) {
int start = line.indexOf(prefix, index) + 1;
if (start == -1) {
prefix = "'";
start = line.indexOf(prefix, index) + 1;
if (start == -1) {
start = line.indexOf("=", index) + 1;
prefix = "?";
}
}
encoding = line.substring(start, line.indexOf(prefix, start));
if (encoding != null && !("".equals(encoding))) {
reader = new InputStreamReader( url.openStream(), encoding.trim());
} else {
reader = new InputStreamReader(url.openStream());
}
} else {
reader = new InputStreamReader(url.openStream());
}
break;
}
line = br.readLine();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
return reader;
}
하여튼 이렇게 얻어진 channel를 객체를 통해서 아래와 같이 jsp에서 뿌려주심 됩니다.
<% int maxItems = 10;
if (channel != null) {
if ("ERROR".equals(channel.getTitle())) {%>
<tr bgcolor="#FFCCFF">
<td width="100" bgcolor="#CCCCFF">블로그 이름</td>
<td bgcolor="#CCFFCC"><%=channel.getDescription()%></td>
</tr>
<%return;
}%><% String divId = Utility.replace(channel.getTitle(), " ", "_");
divId = Utility.replace(channel.getTitle(), "'", "_");%>
<!--<%=channel.getLastBuildDate()%><%=channel.getCopyright()%><%=channel.getDocs()%><%=channel.getLanguage()%>-->
<tr bgcolor="#FFCCFF">
<td bgcolor="#CCFFCC" width="500" colspan="2" valign="bottom"><a href="<%=channel.getLink()%>" target="_blank"><h3><%=channel.getTitle()%></h3></a><br>
<%=channel.getDescription()%></td>
</tr>
<% Image image = channel.getImage();
if (image != null) {%><tr bgcolor="#FFFFFF">
<td colspan="2" height="50"><img src="<%=image.getURL()%>" alt="<%=image.getTitle()%>" > <!--width="<%=image.getWidth()%>" height="<%=image.getHeight()%>"-->
</td>
</tr>
<% }
Item[] items = channel.getItems();
for (int j = 0; j < items.length; j++) {if (items[j].getTitle() != null && items[j].getLink() != null) {%>
<tr bgcolor="#FFFFFF">
<td colspan="2"><a href="<%=items[j].getLink()%>" target="_blank" class="RssLink"><%=items[j].getTitle()%></a></td>
</tr>
<% } else if (items[j].getTitle() != null) {%><tr bgcolor="#FFFFFF">
<td colspan="2"><div class="RssTitle"><%=items[j].getTitle()%></div></td>
</tr>
<% }
if (items[j].getDescription() != null) {%><tr bgcolor="#FFFFFF">
<td colspan="2"><div class="RssDesc"><%=items[j].getDescription()%>...</div></td>
</tr>
<% }
if (maxItems != -1 && j >= maxItems)
break;
}
} else {%>
<tr bgcolor="#FFFFFF">
<td colspan="2">블로그 리스트가 하나도 없습니다. -_-</td>
</tr>
<% }%>
if (channel != null) {
if ("ERROR".equals(channel.getTitle())) {%>
<tr bgcolor="#FFCCFF">
<td width="100" bgcolor="#CCCCFF">블로그 이름</td>
<td bgcolor="#CCFFCC"><%=channel.getDescription()%></td>
</tr>
<%return;
}%><% String divId = Utility.replace(channel.getTitle(), " ", "_");
divId = Utility.replace(channel.getTitle(), "'", "_");%>
<!--<%=channel.getLastBuildDate()%><%=channel.getCopyright()%><%=channel.getDocs()%><%=channel.getLanguage()%>-->
<tr bgcolor="#FFCCFF">
<td bgcolor="#CCFFCC" width="500" colspan="2" valign="bottom"><a href="<%=channel.getLink()%>" target="_blank"><h3><%=channel.getTitle()%></h3></a><br>
<%=channel.getDescription()%></td>
</tr>
<% Image image = channel.getImage();
if (image != null) {%><tr bgcolor="#FFFFFF">
<td colspan="2" height="50"><img src="<%=image.getURL()%>" alt="<%=image.getTitle()%>" > <!--width="<%=image.getWidth()%>" height="<%=image.getHeight()%>"-->
</td>
</tr>
<% }
Item[] items = channel.getItems();
for (int j = 0; j < items.length; j++) {if (items[j].getTitle() != null && items[j].getLink() != null) {%>
<tr bgcolor="#FFFFFF">
<td colspan="2"><a href="<%=items[j].getLink()%>" target="_blank" class="RssLink"><%=items[j].getTitle()%></a></td>
</tr>
<% } else if (items[j].getTitle() != null) {%><tr bgcolor="#FFFFFF">
<td colspan="2"><div class="RssTitle"><%=items[j].getTitle()%></div></td>
</tr>
<% }
if (items[j].getDescription() != null) {%><tr bgcolor="#FFFFFF">
<td colspan="2"><div class="RssDesc"><%=items[j].getDescription()%>...</div></td>
</tr>
<% }
if (maxItems != -1 && j >= maxItems)
break;
}
} else {%>
<tr bgcolor="#FFFFFF">
<td colspan="2">블로그 리스트가 하나도 없습니다. -_-</td>
</tr>
<% }%>
흠흠...제가 봐도 어설프네여...
이렇게 하면 자기 홈페이지나 특정사이트에 기존에 IFRAME같은 방법으로 넣어줬던 다른 사이트의 특정 게시물 리스트를 RSS와 RSS Reader를 통해서 출력해줄 수 있습니다.
물론 항상 신규 리스트겠죠 또한 해당 사이트에서 RSS를 지원해야만 가능한거구여...요샌 상당수 사이트들이 지원을 하구여...
그럼...
그래서 아래의 소스로 rss reader를 구현하게 되었다...
RssReader.java
=================================
package rss;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.Scanner;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.CharacterData;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class RssReader {
private static RssReader instance = null;
private static String ENCODING = "UTF-8";
static String NL = System.getProperty("line.separator");
private RssReader() {
}
public static RssReader getInstance() {
if(instance == null) {
instance = new RssReader();
}
return instance;
}
public void writeNews() {
try {
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
// URL u = new URL("http://mutasyon.net/cs/blogs/hakkiocal/rss.aspx");
// URL u = new URL("http://rss.joins.com/joins_news_list.xml");
// URL u = new URL("http://feeds.feedburner.com/afriken");
URL u = new URL("http://blog.rss.naver.com/jeffyang.xml");
Document doc = builder.parse(u.openStream());
NodeList nodes = doc.getElementsByTagName("item");
NodeList nodeChannel = doc.getElementsByTagName("channel");
for(int i=0;i<nodes.getLength();i++) {
Element element = (Element)nodes.item(i);
System.out.println("Title: " + getElementValue(element,"title"));
System.out.println("Category: " + getElementValue(element,"category"));
System.out.println("Link: " + getElementValue(element,"link"));
System.out.println("Publish Date: " + getElementValue(element,"pubDate"));
System.out.println("author: " + getElementValue(element,"author"));
System.out.println("comment: " + getElementValue(element,"comments"));
System.out.println("guid: " + getElementValue(element,"guid"));
System.out.println("language: " + getElementValue(element,"language"));
System.out.println("description: " + getElementValue(element,"description"));
System.out.println();
}//for
}//try
catch(Exception ex) {
ex.printStackTrace();
}
}
public void writeNews(String url) {
try {
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
URL u = new URL(url);
Document doc = builder.parse(u.openStream());
NodeList nodes = doc.getElementsByTagName("item");
for(int i=0;i<nodes.getLength();i++) {
Element element = (Element)nodes.item(i);
System.out.println("Title: " + getElementValue(element,"title"));
System.out.println("Category: " + getElementValue(element,"category"));
System.out.println("Link: " + getElementValue(element,"link"));
System.out.println("Publish Date: " + getElementValue(element,"pubDate"));
System.out.println("author: " + getElementValue(element,"author"));
System.out.println("comment: " + getElementValue(element,"comments"));
System.out.println("guid: " + getElementValue(element,"guid"));
System.out.println("language: " + getElementValue(element,"language"));
System.out.println("description: " + getElementValue(element,"description"));
System.out.println();
}//for
}//try
catch(Exception ex) {
ex.printStackTrace();
}
}
private String getCharacterDataFromElement(Element e) {
try {
Node child = e.getFirstChild();
if(child instanceof CharacterData) {
CharacterData cd = (CharacterData) child;
return cd.getData();
}
}
catch(Exception ex) {
}
return "";
} //private String getCharacterDataFromElement
protected float getFloat(String value) {
if(value != null && !value.equals("")) {
return Float.parseFloat(value);
}
return 0;
}
protected String getElementValue(Element parent,String label) {
return getCharacterDataFromElement((Element)parent.getElementsByTagName(label).item(0));
}
/**
* 파일 읽기
* @param ctx
* @param fileName
* @return
* @throws FileNotFoundException
*/
public static StringBuffer readFile(String fileName, String fEncoding) throws FileNotFoundException {
StringBuffer result = new StringBuffer();
// Scanner scanner = new Scanner(new File(fileName), fEncoding);
try {
BufferedReader in = new BufferedReader(new FileReader(fileName));
try {
String line = null;
while ((line=in.readLine()) != null) {
result.append(line+NL);
}
} finally {
in.close();
}
// while (scanner.hasNextLine()) {
// result.append(scanner.nextLine()+NL);
// }
}catch(IOException ex ) {
ex.printStackTrace();
}
return result;
}
public static StringBuffer readFileScanner(String fileName, String fEncoding) throws FileNotFoundException {
StringBuffer result = new StringBuffer();
Scanner scanner = new Scanner(new File(fileName), fEncoding);
try {
while (scanner.hasNextLine()) {
result.append(scanner.nextLine()+NL);
}
} finally {
scanner.close();
}
return result;
}
public static void main(String[] args) {
try {
// StringBuffer strUrl = readFile(args[0], ENCODING);
StringBuffer strUrl = readFileScanner(args[0], ENCODING);
if(strUrl != null ){
String[] urls = strUrl.toString().split(NL);
for(int i=0; i < urls.length;i++) {
RssReader reader = RssReader.getInstance();
reader.writeNews(urls[i]);
}
}
RssReader reader = RssReader.getInstance();
reader.writeNews();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
// e.printStackTrace();
System.out.println("지정된 파일을 찾을 수 없습니다. 파일을 확인하시기 바랍니다.");
}
}
}
라벨:
자바,
java,
programing,
rss,
rss reader
java] random 사용하여 난수 구하기.
// 1 ~ 10 사이의 정수 난수
for (int i = 1; i <= 20; i++) {
int n = (int) (Math.random() * 10) + 1; <== *10 부분을 100, 1000 으로 늘리면 1-100, 1-1000 까지의 난수를 구할 수 있다.
System.out.println(n);
}
// 0.0 ~ 1.0 사이의 실수 난수
for (int i = 1; i <= 20; i++)
System.out.println(Math.random());
java] Quartz를 사용하여 동적으로 Job 등록하기
출처 : http://zemba.tistory.com/53
Quartz는 작업을 일정 지정한 시간에 Class기능을 수행하도록 만드는 스케쥴러이다.
이를 위해서는 Schduler가 있어야 하며 또 수행할 작업들의 Class가 있어야 한다.
나는 Quartz를 사용하기 위해서 우선 다음과 같이 분류하였다.
분류
|
기능
|
Quartz Scheduler Main
|
실질적인 Scheduler가 Job을 수행시키는 Class
|
Quartz Job Class
|
수행할 작업의 내용이 담겨있는 Class
|
Quartz PropertyLoader
|
Properties에 Job정보를 Main Class에서 읽어 드리도록만든 Loader Class(정해진 규칙에 따라서 등록해야 함)
|
각 분류별 Class의 코드의 내용을 확인해보자.
1.Scheduler Class(THJobMain.class)
- Main에서는 Properties파일에서 등록한 Job내용을 읽어드려 수행하는 작업만 수행한다.
- Scheduler는 StdSchedulerFactory에 스케쥴생성을 통하여 스케쥴러를 시작할수 있다. 단순히 스케쥴러는 시작만한다.
- 스케쥴러 에서 Start후에는 스케쥴러에 등록된 Job Class가 동작하게 되는것이다.
- JobRegist에서 Job을 등록해준다.
- JobRegist에서는 CronTrigger를 사용하여 스케쥴에 등록하여준다.
- JobDetail은 "Name" , "Group" , "Class" 형태로 등록하고
CronTrigger는 "Name" , "Group" , "CronExpression"으로 등록한다.
- 해당 Job을 scheduler.scheduleJob(jobDetail, trigger); 를 사용하여 스케쥴러에 등록해준다.
1.Scheduler Class(THJobMain.class)
- Main에서는 Properties파일에서 등록한 Job내용을 읽어드려 수행하는 작업만 수행한다.
- Scheduler는 StdSchedulerFactory에 스케쥴생성을 통하여 스케쥴러를 시작할수 있다. 단순히 스케쥴러는 시작만한다.
- 스케쥴러 에서 Start후에는 스케쥴러에 등록된 Job Class가 동작하게 되는것이다.
- JobRegist에서 Job을 등록해준다.
- JobRegist에서는 CronTrigger를 사용하여 스케쥴에 등록하여준다.
- JobDetail은 "Name" , "Group" , "Class" 형태로 등록하고
CronTrigger는 "Name" , "Group" , "CronExpression"으로 등록한다.
- 해당 Job을 scheduler.scheduleJob(jobDetail, trigger); 를 사용하여 스케쥴러에 등록해준다.
package tahoe.core.job;import java.text.ParseException; import org.apache.log4j.PropertyConfigurator; import org.quartz.CronTrigger; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SchedulerFactory; import org.quartz.impl.StdSchedulerFactory; public class THJobMain { private SchedulerFactory schedulFactoty = null; private Scheduler scheduler = null; private JobDetail jobDetail = null; private CronTrigger trigger = null; private String className = null; private String expression = null; THPropertyLoader ThProp = new THPropertyLoader(); public THJobMain() { JobInit(); } private void JobInit() { try { schedulFactoty = new StdSchedulerFactory(); scheduler = schedulFactoty.getScheduler(); scheduler.start(); JobRegist(); } catch (SchedulerException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void JobRegist() { String taskGroups = ThProp.read("TaskGroups"); String taskList = ThProp.read( taskGroups + ".TaskNames"); String[] arTaskGroups = taskList.split(","); for ( int i = 0; i < arTaskGroups.length; i++ ) { Class c = null; className = ThProp.read( arTaskGroups[i] + ".class" ); expression = ThProp.read( arTaskGroups[i] + ".Expression" ); try { c = Class.forName( className ); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } jobDetail = new JobDetail( arTaskGroups[i], arTaskGroups[i], c ); trigger = new CronTrigger( arTaskGroups[i], arTaskGroups[i] ); try { trigger.setCronExpression( expression ); scheduler.scheduleJob(jobDetail, trigger); } catch (SchedulerException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch ( ParseException e2 ) { e2.printStackTrace(); } } } public static void main(String[] args) { PropertyConfigurator.configure("WEB-INF/conf/log4j.properties"); new THJobMain(); } } |
2.PropertyLoader Class(THPropertyLoader.class)
- Param으로 받은 string Value를 사용하여 Properties파일의 해당 내용을 찾는다.
- String으로 값을 Return해준다.
package tahoe.core.job import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class THPropertyLoader { public THPropertyLoader() {} /** * properties 파일 읽기 */ public String read(String propKey) { Properties pp = new Properties(); try { FileInputStream fis = new FileInputStream("WEB-INF/conf/quartz.properties"); pp.load(fis); } catch (IOException ioe) { ioe.printStackTrace(); System.exit(-1); } return pp.getProperty(propKey); } } |
3.Job Class(THJobTest1.class,THJobTest2.class,THJobTest3.class)
- 실재 스케쥴이 시작될때 작업을 해야할 기능이 있는 Class이다.
- Job Class는 Quartz의 Job class를 필수적으로 구현해서 사용해야한다.(implement Job)
- Job 수행은 execute를 통해서 실행된다.(로직을 사용시에 이부분에서 로직을 구현하면 된다.)
- Test를 위해 sysout메세지 출력으로 Test해본다.
public class THJobTest1 implements Job { public void execute(JobExecutionContext context) { System.out.println("Test Job1 = " + new Date()); } } |
public class THJobTest2 implements Job { public void execute(JobExecutionContext context) { System.out.println("Test Job2 = " + new Date()); } } |
public class THJobTest3 implements Job { public void execute(JobExecutionContext context) { System.out.println("Test Job3 = " + new Date()); } } |
이제 Properties파일에 설정한후 실행을 해보자.
현재 Property에 Expression 설정을 매 5초 마다 실행 하도록 설정하였다.
각각 등록후 에 Main에서 수행시킬 경우 다음과 같이 내용이 출력되었다.
이로써 Job Class를 작성한후 매번 Main에서 Job을 등록하지 않아도 Properties파일을 사용하여 작업스케쥴러를
등록하여 편리하게 사용할 수 있다.
[2010:06:15 11:06:58][INFO][org.quartz.simpl.SimpleThreadPool][0(ms)][Tahoe]-Job execution threads will use class loader of thread: main
[2010:06:15 11:06:58][INFO][org.quartz.core.SchedulerSignalerImpl][0(ms)][Tahoe]-Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
[2010:06:15 11:06:58][INFO][org.quartz.core.QuartzScheduler][0(ms)][Tahoe]-Quartz Scheduler v.1.7.3 created.
[2010:06:15 11:06:58][DEBUG][org.quartz.utils.UpdateChecker][0(ms)][Tahoe]-Checking for update...
[2010:06:15 11:06:58][INFO][org.quartz.simpl.RAMJobStore][0(ms)][Tahoe]-RAMJobStore initialized.
[2010:06:15 11:06:58][INFO][org.quartz.impl.StdSchedulerFactory][0(ms)][Tahoe]-Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
[2010:06:15 11:06:58][INFO][org.quartz.impl.StdSchedulerFactory][0(ms)][Tahoe]-Quartz scheduler version: 1.7.3
[2010:06:15 11:06:58][INFO][org.quartz.core.QuartzScheduler][0(ms)][Tahoe]-Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
[2010:07:15 11:07:00][DEBUG][org.quartz.simpl.SimpleJobFactory][0(ms)][Tahoe]-Producing instance of Job 'THJobTest1.THJobTest1', class=tahoe.core.job.THJobTest1
[2010:07:15 11:07:00][DEBUG][org.quartz.core.JobRunShell][0(ms)][Tahoe]-Calling execute on job THJobTest1.THJobTest1
[2010:07:15 11:07:00][DEBUG][org.quartz.simpl.SimpleJobFactory][0(ms)][Tahoe]-Producing instance of Job 'THJobTest2.THJobTest2', class=tahoe.core.job.THJobTest2
[2010:07:15 11:07:00][DEBUG][org.quartz.core.JobRunShell][0(ms)][Tahoe]-Calling execute on job THJobTest2.THJobTest2
[2010:07:15 11:07:00][DEBUG][org.quartz.simpl.SimpleJobFactory][0(ms)][Tahoe]-Producing instance of Job 'THJobTest3.THJobTest3', class=tahoe.core.job.THJobTest3
[2010:07:15 11:07:00][DEBUG][org.quartz.core.JobRunShell][0(ms)][Tahoe]-Calling execute on job THJobTest3.THJobTest3
Test Job3 = Mon Mar 15 11:07:00 KST 2010
Test Job1 = Mon Mar 15 11:07:00 KST 2010
Test Job2 = Mon Mar 15 11:07:00 KST 2010[2010:07:15 11:07:01][DEBUG][org.quartz.utils.UpdateChecker][0(ms)][Tahoe]-No update found.
[2010:07:15 11:07:05][DEBUG][org.quartz.simpl.SimpleJobFactory][0(ms)][Tahoe]-Producing instance of Job 'THJobTest1.THJobTest1', class=tahoe.core.job.THJobTest1
[2010:07:15 11:07:05][DEBUG][org.quartz.core.JobRunShell][0(ms)][Tahoe]-Calling execute on job THJobTest1.THJobTest1
Test Job1 = Mon Mar 15 11:07:05 KST 2010
[2010:07:15 11:07:05][DEBUG][org.quartz.simpl.SimpleJobFactory][0(ms)][Tahoe]-Producing instance of Job 'THJobTest2.THJobTest2', class=tahoe.core.job.THJobTest2
[2010:07:15 11:07:05][DEBUG][org.quartz.core.JobRunShell][0(ms)][Tahoe]-Calling execute on job THJobTest2.THJobTest2
Test Job2 = Mon Mar 15 11:07:05 KST 2010
[2010:07:15 11:07:05][DEBUG][org.quartz.simpl.SimpleJobFactory][0(ms)][Tahoe]-Producing instance of Job 'THJobTest3.THJobTest3', class=tahoe.core.job.THJobTest3
[2010:07:15 11:07:05][DEBUG][org.quartz.core.JobRunShell][0(ms)][Tahoe]-Calling execute on job THJobTest3.THJobTest3
Test Job3 = Mon Mar 15 11:07:05 KST 2010
java Framework/java] PDF 작업 관련 url
- 자바 애플리케이션에서 동적으로 PDF 파일 생성하기 : http://www.yunsobi.com/blog/221
- lucene 에서 PDF 를 text 로 변환하는 소스 : http://blog.naver.com/PostView.nhn?blogId=kgj1&logNo=108051492
- PDF 파일로 이미지(jpg)파일 만들기 : http://zxzx200.tistory.com/17
- PDF renderer : https://pdf-renderer.dev.java.net/
- PDFBOX (apache open source ) : http://pdfbox.apache.org/
- iText에서 한글 처리 문제 해결 :
- iText 에서 장평 처리
- iText의 예제 소스 중 part/chapter14/TextStateOperateors.java 의 59-62 줄 사이의 canvas.setHorizontalScaling(50) 으로 조정 가능(이미지로 처리하는 듯 함)
- iText의 예제 소스 중 part/chapter14/TextStateOperateors.java 의 59-62 줄 사이의 canvas.setHorizontalScaling(50) 으로 조정 가능(이미지로 처리하는 듯 함)
- 거니네(iText관련 문서/강좌??) http://guni.loveyust.net/tag/itext
- IText 예제 샘플 사이트 : http://www.roseindia.net/java/itext/index.shtml
- iText 공식 사이트 : http://www.lowagie.com/iText/download.html
iText.jar : iText-5.0.5.jar
- IText API site : http://api.itextpdf.com/index.html?index-all.html
pdfContentByte 에서 bold 를 사용할 수 있는 방법??
.
// first define a standard font for our textFont helvetica8BoldBlue = FontFactory.getFont(FontFactory.HELVETICA, 8, Font.BOLD, Color.blue);
// create a column object
ColumnText ct = new ColumnText(cb);
// define the text to print in the column
Phrase myText = new Phrase("Lorem ipsum dolor sit amet, ...", helvetica8BoldBlue);
ct.setSimpleColumn(myText, 72, 600, 355, 317, 10, Element.ALIGN_LEFT);
ct.go();
java Framework/java] Object와 JSONObject
[다운]
Java에서 Json 객체로 변환할 때, json-lib라는 오픈 소스를 이용한다.
http://json-lib.sourceforge.net
json-lib에서 array를 변환할 때는 EZMorph 라이브러리가 필요하다.
http://ezmorph.sourceforge.net
자바스크리브에서 객체를 json 객체로 변환시에는 json.js를 이용한다.
http://json.org
[사용법]
Java에서 Json-lib를 사용하기 위해서 필요한 라이브러리는 다음과 같고, eclipse 사용시 Build Path -> Add Exeternal Archives 에 추가한다.
Java에서 Json 객체로 변환할 때, json-lib라는 오픈 소스를 이용한다.
http://json-lib.sourceforge.net
json-lib에서 array를 변환할 때는 EZMorph 라이브러리가 필요하다.
http://ezmorph.sourceforge.net
자바스크리브에서 객체를 json 객체로 변환시에는 json.js를 이용한다.
http://json.org
[사용법]
Java에서 Json-lib를 사용하기 위해서 필요한 라이브러리는 다음과 같고, eclipse 사용시 Build Path -> Add Exeternal Archives 에 추가한다.
json-lib-2.1-jdk15.jar
jakarta commons-lang 2.3
jakarta commons-beanutils 1.7.0
jakarta commons-collections 3.2
jakarta commons-logging 1.1
ezmorph 1.0.4
jakarta commons-lang 2.3
jakarta commons-beanutils 1.7.0
jakarta commons-collections 3.2
jakarta commons-logging 1.1
ezmorph 1.0.4
[예제]
1. 자바스크립트에서
object.toJSONString();
2. 자바에서
JSONObject oJSONObject = JSONObject.fromObject( object );
JSONArray = JSONArray.fromObject( retlist );
json형식 ==>{"jsontest":[{"name":"Mr.Cho","location":"Seoul"}]}
import java.util.Iterator;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class JSONParse {
public static void main(String[] ar) {
String s = "{\"jsontest\":[{\"name\":\"Mr.Cho\",\"location\":\"Seoul\"}]}";
JSONObject jo = JSONObject.fromObject(s);
JSONArray ja = jo.getJSONArray("jsontest");
for (Iterator i = ja.iterator(); i.hasNext();) {
JSONObject ob = (JSONObject) i.next();
String a = ob.getString("name");
String b = ob.getString("location");
System.out.println(a);
System.out.println(b);
}
}
}
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class JSONParse {
public static void main(String[] ar) {
String s = "{\"jsontest\":[{\"name\":\"Mr.Cho\",\"location\":\"Seoul\"}]}";
JSONObject jo = JSONObject.fromObject(s);
JSONArray ja = jo.getJSONArray("jsontest");
for (Iterator i = ja.iterator(); i.hasNext();) {
JSONObject ob = (JSONObject) i.next();
String a = ob.getString("name");
String b = ob.getString("location");
System.out.println(a);
System.out.println(b);
}
}
}
※
아래 fromObject를 사용할 수 있어서 json.jar (org.json.JSONObject) 보다는 json-lib.jar (net.sf.json.JSONObject) 이 더 편한 것 같다.
JSONObject.fromObject( obj )
obj에 문자열도 가능하며, 이것이 JSONText 규칙에 맞을 경우 적절한 JSON 객체를 만들어준다.
이때, obj에 있는 문자열은 작은따옴표(')도 문자열로 간주한다.
Map states = JSONObject.fromObject("{'':'선택안함','1':'신청','2':'완료','3':'보류'}")
위와 같이 하면 꽤 깔쌈하게 Map 객체를 만들 수 있으며, 이를 Velocity에서도 #set 구문을 이용해서 똑같이 쓸 수도 있다.
JSONObject.fromObject( obj )
obj에 문자열도 가능하며, 이것이 JSONText 규칙에 맞을 경우 적절한 JSON 객체를 만들어준다.
이때, obj에 있는 문자열은 작은따옴표(')도 문자열로 간주한다.
Map states = JSONObject.fromObject("{'':'선택안함','1':'신청','2':'완료','3':'보류'}")
위와 같이 하면 꽤 깔쌈하게 Map 객체를 만들 수 있으며, 이를 Velocity에서도 #set 구문을 이용해서 똑같이 쓸 수도 있다.
라벨:
자바,
프로그래밍,
java,
json,
programing
java] jsp jdbc 연결 예제
출처 : http://allinfo.tistory.com/14
파일명 : jdbctest.jsp
<%@ page contentType="text/html;charset=euc-kr" import="java.sql.*" %>
<% request.setCharacterEncoding("euc-kr"); %>
<%
// 데이터베이스 연결관련 변수 선언
Connection conn = null;
Statement stmt = null;
// 데이터베이스 연결관련정보를 문자열로 선언
String jdbc_driver = "oracle.jdbc.driver.OracleDriver";
String jdbc_url = "jdbc:oracle:thin:@localhost:1521:ORCL";
try{
// JDBC 드라이버 로드
Class.forName(jdbc_driver);
// 데이터베이스 연결정보를 이용해 Connection 인스턴스 확보
conn = DriverManager.getConnection(jdbc_url,"scott","tiger");
// Connection 클래스의 인스턴스로 부터 SQL 문 작성을 위한 Statement 준비
stmt = conn.createStatement();
// username 값을 입력한 경우 sql 문장을 수행.
if(request.getParameter("username") != null) {
String sql = "insert into jdbc_test values('"+request.getParameter("username")+"','"+request.getParameter("email")+"')";
stmt.executeUpdate(sql);
}
}
catch(Exception e) {
System.out.println(e);
}
%>
<HTML>
<HEAD><TITLE>JDBC 테스트 </TITLE></HEAD>
<BODY>
<center>
<H2>이벤트 등록</H2>
<HR>
<form name=form1 method=post action=jdbctest.jsp>
등록이름 : <input type=text name=username>
email주소 : <input type=text name=email size=20>
<input type=submit value="등록">
</form>
<HR>
</center>
# 등록 목록<P>
<%
try{
// select 문장을 문자열 형태로 구성한다. String sql = "select username, email from jdbc_test";
// select 를 수행하면 데이터정보가 ResultSet 클래스의 인스턴스로 리턴됨. ResultSet rs = stmt.executeQuery(sql);
int i=1;
// 마지막 데이터까지 반복함. while(rs.next()) {
out.println(i+" : "+rs.getString(1)+" , "+rs.getString("email")+"<BR>");
i++;
}
// 사용한 자원의 반납.
rs.close();
stmt.close();
conn.close();
}
catch(Exception e) {
System.out.println(e);
}
%>
</BODY>
</HTML>
피드 구독하기:
글 (Atom)