<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CEEHQncyeyp7ImA9WhRaE0Q.&quot;"><id>tag:blogger.com,1999:blog-4269806382658593631</id><updated>2012-02-16T20:43:53.993+09:00</updated><category term="가젯" /><category term="Network" /><category term="갤럭시s" /><category term="Tomcat" /><category term="ACTIVITY" /><category term="컴퓨터" /><category term="AUDIO" /><category term="JAVA" /><category term="ArrayList" /><category term="DB" /><category term="BITMAP" /><category term="Direct X" /><category term="ECLIPSE" /><category term="에러" /><category term="단어장" /><category term="MEDIASTORE" /><category term="UI" /><category term="안드로이드 마켓" /><category term="변신인간" /><category term="오드로이드" /><category term="Servlet" /><category term="게임" /><category term="안드로이드" /><category term="GUI" /><title>DeVeLoPeR</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://dreamchallenger.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://dreamchallenger.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>DynamicPro</name><uri>http://www.blogger.com/profile/11966660154765054808</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>132</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/blogspot/iDdqk" /><feedburner:info uri="blogspot/iddqk" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CEcAQXo7cCp7ImA9WhdXFk8.&quot;"><id>tag:blogger.com,1999:blog-4269806382658593631.post-8440226293773786007</id><published>2011-08-29T21:47:00.000+09:00</published><updated>2011-08-29T21:47:20.408+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-29T21:47:20.408+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="변신인간" /><category scheme="http://www.blogger.com/atom/ns#" term="게임" /><title>[변신인간] Map.java (GUI 부분)</title><content type="html">&lt;br /&gt;
package com.jay.Change;&lt;br /&gt;
&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.event.KeyEvent;&lt;br /&gt;
import java.awt.event.KeyListener;&lt;br /&gt;
import java.util.Random;&lt;br /&gt;
&lt;br /&gt;
import javax.swing.ImageIcon;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
&lt;br /&gt;
import com.jay.Character.*;&lt;br /&gt;
import com.jay.Control.*;&lt;br /&gt;
&lt;br /&gt;
public class Map {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Panel에 주인공과 몬스터들을 삽입하여 제어&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;CPanel cPanel = new CPanel();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;boolean isUp, isDown, isLeft, isRight, isA, isChange = false;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;static final String bPath = "D:/자바 프로그램/변신인간/하늘2.jpg";&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;ImageIcon img;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Control control = new Control(cPanel);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;public static void main(String[] args) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;Map map = new Map();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;map.go();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;public void go() {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;JFrame frame = new JFrame();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;frame.setTitle("ChangeMan");&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;img = new ImageIcon(bPath);&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;JPanel background = new JPanel();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;background.setLayout(new BorderLayout());&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;JLabel label = new JLabel(new ImageIcon(bPath));&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;label.setHorizontalAlignment(JLabel.CENTER);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;background.add(label); // default center section&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;// background.add(cPanel);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;frame.getContentPane().add(cPanel);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;cPanel.addKeyListener(new ListenKey());&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;frame.setFocusable(true);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;frame.setSize(820, 650);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;frame.setVisible(true);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;cPanel.requestFocus();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;control.Thread();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;class ListenKey implements KeyListener {&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;@Override&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;public void keyPressed(KeyEvent e) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;// TODO Auto-generated method stub&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;switch (e.getKeyCode()) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;case KeyEvent.VK_LEFT:&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;control.setIsLeft(true);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;case KeyEvent.VK_RIGHT:&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;control.setIsRight(true);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;case KeyEvent.VK_UP:&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;control.setIsUp(true);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;case KeyEvent.VK_DOWN:&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;control.setIsDown(true);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;case KeyEvent.VK_A:&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;control.setIsA(true);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;@Override&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;public void keyReleased(KeyEvent e) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;// TODO Auto-generated method stub&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;switch (e.getKeyCode()) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;case KeyEvent.VK_LEFT:&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;control.setIsLeft(false);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;case KeyEvent.VK_RIGHT:&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;control.setIsRight(false);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;case KeyEvent.VK_UP:&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;control.setIsUp(false);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;case KeyEvent.VK_DOWN:&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;control.setIsDown(false);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;case KeyEvent.VK_A:&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;control.setIsA(false);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;@Override&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;public void keyTyped(KeyEvent e) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;// TODO Auto-generated method stub&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;class CPanel extends JPanel {&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;/**&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt; *&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt; */&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;private static final long serialVersionUID = 6652451537073754302L;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;public void paintComponent(Graphics g) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;g.drawImage(img.getImage(), 0, 0, this);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;control.Move(g);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;br /&gt;
}&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;KeyListener를 이용해서 컨트롤 제어&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4269806382658593631-8440226293773786007?l=dreamchallenger.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/m2VGXd01aetCDumdjvlZJDBSr40/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/m2VGXd01aetCDumdjvlZJDBSr40/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/m2VGXd01aetCDumdjvlZJDBSr40/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/m2VGXd01aetCDumdjvlZJDBSr40/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/iDdqk/~4/5tgts14CZSY" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/8440226293773786007?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/8440226293773786007?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/iDdqk/~3/5tgts14CZSY/mapjava-gui.html" title="[변신인간] Map.java (GUI 부분)" /><author><name>DynamicPro</name><uri>http://www.blogger.com/profile/11966660154765054808</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://dreamchallenger.blogspot.com/2011/08/mapjava-gui.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ACRH4zcCp7ImA9WhdQGUQ.&quot;"><id>tag:blogger.com,1999:blog-4269806382658593631.post-422411351095386667</id><published>2011-08-22T15:49:00.002+09:00</published><updated>2011-08-22T15:49:25.088+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-22T15:49:25.088+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="변신인간" /><title>[변신인간] 간단한 게임을 만들어보자.</title><content type="html">&amp;nbsp;시나리오&lt;br /&gt;
&amp;nbsp;바야흐로 2050년, 인류는 최대의 위기에 봉착해 있다. 실상이 파악 되지 않았던 UFO가 지구를 침공한 것이다. 그들은 무차별적으로 인체 실험을 하였고 말로다 할 수 없는 어마어마한 인원들이 희생되어 갔다. 그리고 마침내 그들은 지구를 식민지로 만들고 지구를 통치하기 시작하였다. &amp;nbsp;이 때, 그 들의 무자비한 실험 결과 변신인간이 탄생하게 된다. 그는 무기를 먹음으로써 무기로 변할 수 있었고 그 능력을 바탕으로 수용소를 탈출한다. 이제 그는 외계인의 우두머리를 처치하기 위해 외로운 싸움을 시작한다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4269806382658593631-422411351095386667?l=dreamchallenger.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/w5CPYXHiFr-XWy8fG4_eEBbJZhA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/w5CPYXHiFr-XWy8fG4_eEBbJZhA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/w5CPYXHiFr-XWy8fG4_eEBbJZhA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/w5CPYXHiFr-XWy8fG4_eEBbJZhA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/iDdqk/~4/9PcXfAi8GE8" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/422411351095386667?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/422411351095386667?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/iDdqk/~3/9PcXfAi8GE8/blog-post_22.html" title="[변신인간] 간단한 게임을 만들어보자." /><author><name>DynamicPro</name><uri>http://www.blogger.com/profile/11966660154765054808</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://dreamchallenger.blogspot.com/2011/08/blog-post_22.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEACR34yeCp7ImA9WhdQFE0.&quot;"><id>tag:blogger.com,1999:blog-4269806382658593631.post-3856152250435413309</id><published>2011-08-15T20:05:00.001+09:00</published><updated>2011-08-15T20:12:46.090+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-15T20:12:46.090+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JAVA" /><title>원할한 KeyListener 활용을 위한 Thread 도입</title><content type="html">KeyListener를 사용하다 보면 몇 가지 불편한 점이 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;그것은 여러 개의 키를 동시에 누를 경우 처리가 힘들 다는 점이다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;이는 HashSet 등을 통해서도 해결할 수 있다. HashSet은 중복키를&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;저장하지 않기에 여기에 Button Pressed 때 들어오는 Key값들을&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;저장하면 된다. 그때 들어오는 키값을 저장하는 방법은&lt;br /&gt;
&lt;br /&gt;
e.getKeyCode() or e.getKeyChar() 로 저장하면 된다. (이떄 e가&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;KeyEvent를 뜻한다)&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;저장 된 Key 값들을 Button released 때 set.remove(e.getKeyCode())&lt;br /&gt;
&lt;br /&gt;
를 이용하여 삭제 하면 된다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;저장 된 code들을 불러올 때에는&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;while(set.hasNext())&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;set.next() - 이 것을 부르면 key값이 불러진다.&lt;br /&gt;
}&lt;br /&gt;
&amp;nbsp;그러므로 여기서 불러진 값을 이용하여 자신이 원하는 Action을&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;만들면 된다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;예) set에 VM_UP , VM_DOWN 이 들어 있을 경우&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;while(set.hasNext())&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;{&lt;/div&gt;&lt;br /&gt;
&amp;nbsp; switch(set.next())&lt;br /&gt;
&amp;nbsp; case:VM_UP&lt;br /&gt;
&amp;nbsp;break;&lt;br /&gt;
&amp;nbsp;case : VM_DOWN&lt;br /&gt;
&amp;nbsp;break;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&amp;nbsp;를 이용하여 액션을 컨트롤 할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;이 경우 문제가 발생하였으니 그 문제는 바로&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;오른쪽 화살표 누름 -&amp;gt; 오른쪽 + 위 화살표 누름 -&amp;gt; 위 화살표 땜&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;이 때 이상하게 오른쪽 버튼은 눌러져 있는 상태이지만 더 이상&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;Pressed Listener로 해당 액션이 전달되지 않았다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;이유는 잘 알지 못하겠지만 먼저 누르고 있던 키보드 버튼 보다&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;나중에 누른 키보드 버튼을 먼저 떼면 이 문제가 발생하였다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;이를 해결하기 위한 보다 나은 방법은 바로 스레드를 도입하는 것이었다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;Listener에서 Push 된 버튼을&amp;nbsp;boolean을 이용하여 조작할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;즉, Pressed 때 클릭된 버튼에 true를 주고, Released 때 false를 줌으로&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;액션을 컨트롤 하는 것이다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;그 후, 스레드를 이용해서 Button Pressed 일 때 즉, 해당 버튼에 대한&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;boolean 값이 true 일 때 할 액션을 만들어 주면 성공이다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;관련 소스)&lt;br /&gt;
&lt;br /&gt;
Thread의 Runnable 소스&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;class CharMove implements Runnable {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;public void run() {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;while (true) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;Move();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;public void Move() {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;while (isUp == true || isDown == true || isLeft == true&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;					&lt;/span&gt;|| isRight == true) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;if (isUp == true) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;					&lt;/span&gt;cy -= 5;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;					&lt;/span&gt;cPanel.repaint();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;					&lt;/span&gt;System.out.println("UP ");&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;if (isDown == true) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;					&lt;/span&gt;cy += 5;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;					&lt;/span&gt;cPanel.repaint();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;					&lt;/span&gt;System.out.println("Down ");&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;if (isLeft == true) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;					&lt;/span&gt;cx -= 5;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;					&lt;/span&gt;cPanel.repaint();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;					&lt;/span&gt;System.out.println("LEFT ");&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;if (isRight == true) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;					&lt;/span&gt;cx += 5;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;					&lt;/span&gt;cPanel.repaint();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;					&lt;/span&gt;System.out.println("Right ");&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;try {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;					&lt;/span&gt;Thread.sleep(100);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;} catch (InterruptedException e) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;					&lt;/span&gt;// TODO Auto-generated catch block&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;					&lt;/span&gt;e.printStackTrace();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
Thread 작동 코드&lt;br /&gt;
&lt;br /&gt;
CharMove charMove = new CharMove();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;Thread cThread = new Thread(charMove);&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;cThread.start();&lt;br /&gt;
&lt;br /&gt;
KeyListener에서 조작하고자 하는 버튼을 제어하는 코드&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;class ListenKey implements KeyListener {&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;@Override&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;public void keyPressed(KeyEvent e) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;// TODO Auto-generated method stub&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;switch (e.getKeyCode()) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;case KeyEvent.VK_LEFT:&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;isLeft = true;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;case KeyEvent.VK_RIGHT:&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;isRight = true;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;case KeyEvent.VK_UP:&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;isUp = true;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;case KeyEvent.VK_DOWN:&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;isDown = true;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;@Override&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;public void keyReleased(KeyEvent e) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;// TODO Auto-generated method stub&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;switch (e.getKeyCode()) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;case KeyEvent.VK_LEFT:&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;isLeft = false;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;case KeyEvent.VK_RIGHT:&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;isRight = false;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;case KeyEvent.VK_UP:&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;isUp = false;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;case KeyEvent.VK_DOWN:&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;isDown = false;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;@Override&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;public void keyTyped(KeyEvent e) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;// TODO Auto-generated method stub&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4269806382658593631-3856152250435413309?l=dreamchallenger.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EkfICzwZn2mjwCXpqBLMjN5ZdJQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EkfICzwZn2mjwCXpqBLMjN5ZdJQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EkfICzwZn2mjwCXpqBLMjN5ZdJQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EkfICzwZn2mjwCXpqBLMjN5ZdJQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/iDdqk/~4/GP1PizRaff4" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/3856152250435413309?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/3856152250435413309?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/iDdqk/~3/GP1PizRaff4/keylistener-thread.html" title="원할한 KeyListener 활용을 위한 Thread 도입" /><author><name>DynamicPro</name><uri>http://www.blogger.com/profile/11966660154765054808</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://dreamchallenger.blogspot.com/2011/08/keylistener-thread.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkABSX0_eCp7ImA9WhdQE0Q.&quot;"><id>tag:blogger.com,1999:blog-4269806382658593631.post-6659709073770671326</id><published>2011-08-15T15:45:00.000+09:00</published><updated>2011-08-15T15:45:58.340+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-15T15:45:58.340+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JAVA" /><title>KeyEvent 와 KeyListener</title><content type="html">KeyEvent는 자바에서 Key를 눌렀을때 발생하는 Event이다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;Java 홈페이지를 보면 알겠지만 모든 키에 다 이름을 할당해 놓았다.&lt;br /&gt;
&lt;br /&gt;
A를 누르면 VK_A B를 누르면 VK_B 등 등&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;VK_* 로써 알기 쉽게 설명이 되어 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;KeyListener를 통해 이 Event들을 받아서 컨트롤 할 수 있다.&lt;br /&gt;
&lt;br /&gt;
cPanel.addKeyListener(new ListenKey());&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;KeyLIstener를 사용하기 위해서는 이 처럼 addKeyListener() Fuction을&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;사용해서 나타낸다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;이때 넘어오는 파라미터 값은 KeyListener를 상속 받은 클래스면 된다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class ListenKey implements KeyListener{&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;@Override&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;public void keyPressed(KeyEvent e) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;// TODO Auto-generated method stub&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;switch(e.getKeyCode()){&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;case KeyEvent.VK_LEFT:&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;cx--;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;cPanel.repaint();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;case KeyEvent.VK_RIGHT:&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;cx++;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;cPanel.repaint();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;case KeyEvent.VK_UP:&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;cy--;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;cPanel.repaint();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;case KeyEvent.VK_DOWN:&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;cy++;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;cPanel.repaint();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;보다시피 KeyListener에는 3가지 Method가 Implements 되어 있어 반드시&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;추가해야 한다. 세 가지 Method는 알기 쉽다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;이름에서도 알수 있다 시피 Key가 눌러 졌을때, Key를 땠을 때,&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;Key를 쳤을 때에 각각의 Method가 호출되게 된다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;위 코드에서는 키가 눌러졌을 때 Object를 움직이는 간단한 코드를 삽입하였다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4269806382658593631-6659709073770671326?l=dreamchallenger.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uLrTjPHEzLFwEz_QixGFZzBhQ28/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uLrTjPHEzLFwEz_QixGFZzBhQ28/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uLrTjPHEzLFwEz_QixGFZzBhQ28/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uLrTjPHEzLFwEz_QixGFZzBhQ28/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/iDdqk/~4/JIK1tomuiso" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/6659709073770671326?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/6659709073770671326?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/iDdqk/~3/JIK1tomuiso/keyevent-keylistener.html" title="KeyEvent 와 KeyListener" /><author><name>DynamicPro</name><uri>http://www.blogger.com/profile/11966660154765054808</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://dreamchallenger.blogspot.com/2011/08/keyevent-keylistener.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MHQ3s9cSp7ImA9WhdQE0o.&quot;"><id>tag:blogger.com,1999:blog-4269806382658593631.post-8356949556470840717</id><published>2011-08-15T12:37:00.000+09:00</published><updated>2011-08-15T12:37:12.569+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-15T12:37:12.569+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="GUI" /><title>JPanel에 Image 넣기</title><content type="html">&lt;span class="Apple-style-span" style="color: #333333; font-family: Verdana, Arial, Tahoma, Calibri, Geneva, sans-serif; font-size: 13px;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre class="bbcode_code" style="background-attachment: initial; background-clip: initial; background-color: #f2f6f8; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: repeat no-repeat; border-bottom-style: inset; border-bottom-width: 1px; border-color: initial; border-left-style: inset; border-left-width: 1px; border-right-style: inset; border-right-width: 1px; border-top-style: inset; border-top-width: 1px; direction: ltr; font-family: monospace; font-size: 12px; height: 84px; line-height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; overflow-x: scroll; overflow-y: scroll; padding-bottom: 6px; padding-left: 6px; padding-right: 6px; padding-top: 6px; text-align: left;"&gt;String path = "path_to_image";
JPanel panel = new JPanel(new BorderLayout());
JLabel label = new JLabel(new ImageIcon(path));
label.setHorizontalAlignment(JLabel.CENTER);
panel.add(label);  // default center section&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
출처:&amp;nbsp;&lt;a href="http://www.java-forums.org/new-java/4477-how-add-images-jpanels.html"&gt;http://www.java-forums.org/new-java/4477-how-add-images-jpanels.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
패널에 Layout을 설정하지 않을 시&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Verdana, Arial, Tahoma, Calibri, Geneva, sans-serif; font-size: 13px;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre class="bbcode_code" style="background-attachment: initial; background-clip: initial; background-color: #f2f6f8; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: repeat no-repeat; border-bottom-style: inset; border-bottom-width: 1px; border-color: initial; border-left-style: inset; border-left-width: 1px; border-right-style: inset; border-right-width: 1px; border-top-style: inset; border-top-width: 1px; direction: ltr; font-family: monospace; font-size: 12px; height: 228px; line-height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; overflow-x: scroll; overflow-y: scroll; padding-bottom: 6px; padding-left: 6px; padding-right: 6px; padding-top: 6px; text-align: left;"&gt;class Pseudo extends JPanel {
    BufferedImage image;

    Pseudo(BufferedImage image) {
        this.image = image;
        // or load it in this class
        setLayout(null);
        add components...
    }

    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        int x = 
        int y = 
        g.drawImage(image, x, y, this);
    }
}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4269806382658593631-8356949556470840717?l=dreamchallenger.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/sIwPfAPppM5VQtef-sXiEYe70Vk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sIwPfAPppM5VQtef-sXiEYe70Vk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/sIwPfAPppM5VQtef-sXiEYe70Vk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sIwPfAPppM5VQtef-sXiEYe70Vk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/iDdqk/~4/tGEJ7BC6ke8" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/8356949556470840717?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/8356949556470840717?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/iDdqk/~3/tGEJ7BC6ke8/jpanel-image.html" title="JPanel에 Image 넣기" /><author><name>DynamicPro</name><uri>http://www.blogger.com/profile/11966660154765054808</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://dreamchallenger.blogspot.com/2011/08/jpanel-image.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYFRX4_eyp7ImA9WhdQE08.&quot;"><id>tag:blogger.com,1999:blog-4269806382658593631.post-6735390201156632309</id><published>2011-08-14T20:41:00.000+09:00</published><updated>2011-08-14T20:41:54.043+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-14T20:41:54.043+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Servlet" /><title>서버와 클라이언트</title><content type="html">&amp;nbsp;서버 - 클라이언트로부터 요청을 받아, 요청한 것을 넘겨 줌, 사용자가 웹 브라우져를 통해 서버에 자원을 요청하면 그 요청에 맞는 자료를 넘겨주는 역할&lt;br /&gt;
&amp;nbsp;클라이언트 - 서버에 자료를 요청하고 요청한 자료가 도착하면 사용자에게 그 내용을 보여주는 역할&lt;br /&gt;
&amp;nbsp;둘 사이의 의사소통을 위해 HTML과 HTTP가 필요하다.&lt;br /&gt;
&amp;nbsp;HTML =&amp;gt; 브라우져가 서버의 전달사항을 어떤 식으로 보여줘야 하는 지 알려주는 Language&lt;br /&gt;
&amp;nbsp;HTTP =&amp;gt; 클라이언트와 서버간에 대화하기 위해 만들어진 규약&lt;br /&gt;
&amp;nbsp;보통 클라이언트가 요청하면 서버에서 응답을 보내주는 형식으로 짜여 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;클라이언트에서 HTTP를 이용해 자원을 요청하면 서버는 그 요청에 맞는 자료를 HTTP에 HTML을 실어 전송한다. 그러면 Browser는 HTML을 해독하여 사용자에게 보여준다.&lt;br /&gt;
&amp;nbsp;HTTP 요청에는 HTTP Method가 들어 있다.&lt;br /&gt;
&amp;nbsp;HTTP Method 중 가장 중요하고 자주 사용 되는 것은 Get 과 Post 이다.&lt;br /&gt;
&amp;nbsp;Get의 경우 자료를 요청할 때 자주 쓰인다. 단순하게 자료를 받아 오는 것이기에 멱등 - 즉 같은 동작을 여러번 반복해도 문제가 생기지 않는다.&lt;br /&gt;
&amp;nbsp;Post의 경우 서버에 자료를 요청할 때 사용자가 몇 가지 정보를 함께 제출하여 그 정보에 따라 응답을 받을 수 있다.&lt;br /&gt;
&amp;nbsp;사실 Get으로도 정보를 보낼 수 있지만 그 정보가 URL 뒤에 붙어서 나오기에 보낼 수 있는 양이 한계가 있고 URL 창에 정보가 노출되어 보안상 중요한 내용을 보내기에 적합하지 못하다. 그리고 Get으로 보내는 요청은 URL 뒤에 붙어 나오기에 즐겨찾기에 추가 할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;HTTP 응답은 Header와 Body로 구성되어 있다.&lt;br /&gt;
&amp;nbsp;Header =&amp;gt; 사용된 프로토콜, 보내준 요청이 성공했는지, 몸체에 포함 된 컨텐츠 종류가 무엇인지 등...&lt;br /&gt;
Body =&amp;gt; HTML과 같은 컨텐츠&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;사실 웹서버는 정적인 정보만을 제공할 수 있다. 그렇기에 웹 서버에 동적인 서비스를 제공하기 위해서는 같은 컴퓨터에 있는 다른 App들의 도움이 필요하다. 이러한 App들을 CGI라 한다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;그리고 이러한 서블릿을 원할하게 돌아가기 위해서는 많은 도움이 필요하다. 서블릿 클래스 생성과 로드 그리고 스레드 관리 등 많은 일들을 해야 한다. 이와 같은 일을 하기 위해서 컨테이너가 생겼다. Tomcat도 이러한 컨테이너의 일종이다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4269806382658593631-6735390201156632309?l=dreamchallenger.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_7H2QpCP8hrtx-j7APpk_OGCka4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_7H2QpCP8hrtx-j7APpk_OGCka4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_7H2QpCP8hrtx-j7APpk_OGCka4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_7H2QpCP8hrtx-j7APpk_OGCka4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/iDdqk/~4/TEyxmZeLoIA" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/6735390201156632309?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/6735390201156632309?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/iDdqk/~3/TEyxmZeLoIA/blog-post_14.html" title="서버와 클라이언트" /><author><name>DynamicPro</name><uri>http://www.blogger.com/profile/11966660154765054808</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://dreamchallenger.blogspot.com/2011/08/blog-post_14.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcAR3o9fyp7ImA9WhdQE08.&quot;"><id>tag:blogger.com,1999:blog-4269806382658593631.post-2512598094226296415</id><published>2011-08-14T20:07:00.001+09:00</published><updated>2011-08-14T20:07:26.467+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-14T20:07:26.467+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="단어장" /><title>[단어장] Source - Error.java</title><content type="html">&lt;br /&gt;
package dictionary;&lt;br /&gt;
&lt;br /&gt;
public class Error {&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;// A - Z 65 - 90&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;// a - z 97 - 122&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;public static boolean ECheck(String e) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;int length = e.length();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;boolean t = false;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;for (int i = 0; i &amp;lt; length; i++) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;char temp = e.charAt(i);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;if (temp &amp;lt; 32) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;t = true;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;} else if (temp &amp;gt; 32 &amp;amp;&amp;amp; temp &amp;lt; 65) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;t = true;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;} else if (temp &amp;gt; 90 &amp;amp;&amp;amp; temp &amp;lt; 97) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;t = true;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;} else if (temp &amp;gt; 122) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;t = true;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;if (length == 0) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;t = true;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;return t;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;br /&gt;
}&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;이 부분은 단어장에 영어단어를 입력 시 영어를 입력하는 지 아닌지&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;확인하는 처리를 해준 것이다.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4269806382658593631-2512598094226296415?l=dreamchallenger.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YQPmfVl9jYqBsWb_KbDs9OrhgzI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YQPmfVl9jYqBsWb_KbDs9OrhgzI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YQPmfVl9jYqBsWb_KbDs9OrhgzI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YQPmfVl9jYqBsWb_KbDs9OrhgzI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/iDdqk/~4/AXybhsWkKhg" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/2512598094226296415?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/2512598094226296415?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/iDdqk/~3/AXybhsWkKhg/source-errorjava.html" title="[단어장] Source - Error.java" /><author><name>DynamicPro</name><uri>http://www.blogger.com/profile/11966660154765054808</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://dreamchallenger.blogspot.com/2011/08/source-errorjava.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcESHc5eCp7ImA9WhdQE08.&quot;"><id>tag:blogger.com,1999:blog-4269806382658593631.post-6035908858809813104</id><published>2011-08-14T20:06:00.000+09:00</published><updated>2011-08-14T20:06:49.920+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-14T20:06:49.920+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="단어장" /><title>[단어장] Source - DTable.java</title><content type="html">&lt;br /&gt;
package dictionary;&lt;br /&gt;
&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import java.awt.event.WindowAdapter;&lt;br /&gt;
import java.awt.event.WindowEvent;&lt;br /&gt;
import java.sql.Connection;&lt;br /&gt;
import java.sql.Statement;&lt;br /&gt;
&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTable;&lt;br /&gt;
import javax.swing.event.ListSelectionEvent;&lt;br /&gt;
import javax.swing.event.ListSelectionListener;&lt;br /&gt;
import javax.swing.table.DefaultTableModel;&lt;br /&gt;
&lt;br /&gt;
/*query = "create table Word " + "(name varchar(32), "&lt;br /&gt;
&amp;nbsp;+ "mean varchar(200), " + "importance TINYINT , "&lt;br /&gt;
&amp;nbsp;+ "count SMALLINT)";*/&lt;br /&gt;
public class DTable {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;private static Connection con = null;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;private static Statement stmt = null;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;private static JTable table = null;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;private JFrame frame = new JFrame();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;private DefaultTableModel model = new DefaultTableModel();&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;public JFrame getFrame(){&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;return frame;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;public JTable getTable(){&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;return table;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;public DefaultTableModel getDModel(){&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;return model;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;public void showWords() {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;// Frame&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;frame.setLayout(new BorderLayout());&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;// Table&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;table = new JTable(model);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;table.getSelectionModel().addListSelectionListener(new RowListener());&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;D_DB.setTable(table, model);&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;JScrollPane scrollPane = new JScrollPane(table);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;// Save&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;JPanel panel = new JPanel();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;JButton button = new JButton("Save");&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;button.addActionListener(new SaveListener());&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;panel.add(button);&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;// 위치 조정&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;frame.getContentPane().add(panel, BorderLayout.NORTH);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;frame.getContentPane().add(scrollPane, BorderLayout.CENTER);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;frame.setBounds(50, 50, 300, 300);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;frame.setVisible(true);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;class SaveListener implements ActionListener {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;public void actionPerformed(ActionEvent event) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;Dictionary d = new Dictionary();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;d.createAndShowGUI();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;class RowListener implements ListSelectionListener {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;public void valueChanged(ListSelectionEvent event) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;if (event.getValueIsAdjusting()) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;return;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;if (table.getSelectionModel().isSelectionEmpty() == false) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;int row = table.getSelectionModel().getLeadSelectionIndex();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;int col = table.getColumnModel().getSelectionModel()&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;						&lt;/span&gt;.getLeadSelectionIndex();&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;String word = (String) table.getValueAt(row, col);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;String[] data = new String[2];&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;D_DB.getData(data, word);&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;if (data[0] != null &amp;amp;&amp;amp; data[1] != null) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;					&lt;/span&gt;Dictionary d = new Dictionary(data[0], data[1]);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;					&lt;/span&gt;d.createAndShowGUI();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;이 부분은 단어장을 나타낸다. 즉 Dictionary Form에서 저장해 놓은 단어들을&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;보여주는 부분이다. 이를 Table에 나타내도록 하였다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;Table 에서 해당 줄을 클릭하면 그 단어의 뜻을 보여주는 창을 띄우도록&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;하였고 이를 위해서 Listener를 사용하였다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4269806382658593631-6035908858809813104?l=dreamchallenger.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/OILb5bo9pWR6uN3afnAxzPi22Ro/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OILb5bo9pWR6uN3afnAxzPi22Ro/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/OILb5bo9pWR6uN3afnAxzPi22Ro/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OILb5bo9pWR6uN3afnAxzPi22Ro/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/iDdqk/~4/5KetQIbdQQU" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/6035908858809813104?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/6035908858809813104?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/iDdqk/~3/5KetQIbdQQU/source-dtablejava.html" title="[단어장] Source - DTable.java" /><author><name>DynamicPro</name><uri>http://www.blogger.com/profile/11966660154765054808</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://dreamchallenger.blogspot.com/2011/08/source-dtablejava.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08GSXg_eCp7ImA9WhdQE0w.&quot;"><id>tag:blogger.com,1999:blog-4269806382658593631.post-1404206390180604143</id><published>2011-08-14T20:03:00.000+09:00</published><updated>2011-08-14T20:03:48.640+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-14T20:03:48.640+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="단어장" /><title>[단어장] Source - Dictionary.java</title><content type="html">&lt;br /&gt;
package dictionary;&lt;br /&gt;
&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
import javax.swing.JOptionPane;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.JTextArea;&lt;br /&gt;
import javax.swing.JTextField;&lt;br /&gt;
import javax.swing.table.DefaultTableModel;&lt;br /&gt;
&lt;br /&gt;
public class Dictionary {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;JFrame frame;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;JPanel English;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;JPanel Meaning;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;JPanel Save;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;JLabel word;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;JTextField eword = null;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;JLabel mean;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;JTextArea emean = null;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;JButton save;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;JButton ok;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;JButton delete;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;boolean isNew = true;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;//Table&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;static DTable table = new DTable();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Dictionary() {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Dictionary(String name, String mean) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;eword = new JTextField(20);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;eword.setText(name);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;emean = new JTextArea(10, 20);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;emean.setText(mean);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;isNew = false;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;public static void main(String[] args) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;table.showWords();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;public void createAndShowGUI() {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;// Frame&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;frame = new JFrame("Dictionary");&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;English = new JPanel();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;Meaning = new JPanel();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;Save = new JPanel();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;word = new JLabel("영어");&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;if (eword == null)&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;eword = new JTextField(20);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;mean = new JLabel(" 뜻 ");&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;if (emean == null)&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;emean = new JTextArea(10, 20);&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;// add Panel&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;English.add(word);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;English.add(eword);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;Meaning.add(mean);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;Meaning.add(emean);&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;// add Button&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;if (isNew == true) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;save = new JButton("Save");&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;save.addActionListener(new SaveListener());&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;ok = new JButton("Cancel");&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;ok.addActionListener(new OkListener());&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;Save.add(save);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;Save.add(ok);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;}else&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;{&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;delete = new JButton("Delete");&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;delete.addActionListener(new DeleteListener());&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;JButton ok = new JButton("OK");&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;ok.addActionListener(new OkListener());&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;Save.add(delete);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;Save.add(ok);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;frame.getContentPane().add(BorderLayout.NORTH, English);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;frame.getContentPane().add(BorderLayout.CENTER, Meaning);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;frame.getContentPane().add(BorderLayout.SOUTH, Save);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;frame.pack();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;frame.setVisible(true);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;class OkListener implements ActionListener {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;public void actionPerformed(ActionEvent event) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;frame.setVisible(false);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;table.getTable().getSelectionModel().clearSelection();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;class DeleteListener implements ActionListener {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;public void actionPerformed(ActionEvent event) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;String ew = eword.getText();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;String em = emean.getText();&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;D_DB.DeleteWord(ew);&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;frame.setVisible(false);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;int row = table.getTable().getSelectionModel()&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;						&lt;/span&gt;.getLeadSelectionIndex();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;table.getDModel().removeRow(row);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;table.getTable().getSelectionModel().clearSelection();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;class SaveListener implements ActionListener {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;public void actionPerformed(ActionEvent event) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;String ew = eword.getText();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;String em = emean.getText();&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;if (Error.ECheck(ew) == false) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;D_DB.insertWord(ew, em, 1);&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;D_DB.showTable();&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;System.out.println(ew + " " + em);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;frame.setVisible(false);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;DefaultTableModel model = table.getDModel();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;model.addRow(new Object[] { ew });&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;} else {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;JOptionPane.showMessageDialog(null, "'영어'란에 영어만 입력하세요");&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;단어장에 단어를 입력하는 폼을 만든 것이다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;Frame 과 Panel을 이용해서 구성되어 있다.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;createAndShowGUI() Method에서 구현하고 있다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;frame 을 만들고 거기에 English 와 Meaning 패널을 집어 넣는다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;English 패널에는 word JLabel과 eword JTextField를 집어 넣어서&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;영어 단어를 적게 만들었고&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;Meaning 필드에는 JLabel 과 JTextAread를 이용해서 뜻을 넣도록&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;하였다.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;그리고 사실 이 동일 클래스에서 두가지 상황을 가능하게 만들었다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;그래서 만약 입력 하는 단계라면 버튼이 Save 와 Cancel이 나오게&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;함과 동시에 단어 입력을 가능하게 하였다. 반면 입력하는 단계가&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;아닐 경우 (단어장에서 해당 단어를 클릭 했을 때) 그 단어의 영어&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;와 뜻을 보여줌과 동시에 삭제 기능과 확인 기능 (Delete 와 OK) 버튼&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;을 넣도록 구현 하였다.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;Listener에서 관련 내용을 다루고 있다&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4269806382658593631-1404206390180604143?l=dreamchallenger.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/WOrzZldZQDpxtsNoZ2lossNtfvE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WOrzZldZQDpxtsNoZ2lossNtfvE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/WOrzZldZQDpxtsNoZ2lossNtfvE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WOrzZldZQDpxtsNoZ2lossNtfvE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/iDdqk/~4/iTTHEDWP1Wo" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/1404206390180604143?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/1404206390180604143?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/iDdqk/~3/iTTHEDWP1Wo/source-dictionaryjava.html" title="[단어장] Source - Dictionary.java" /><author><name>DynamicPro</name><uri>http://www.blogger.com/profile/11966660154765054808</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://dreamchallenger.blogspot.com/2011/08/source-dictionaryjava.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUMQ3o9fCp7ImA9WhdQEEo.&quot;"><id>tag:blogger.com,1999:blog-4269806382658593631.post-7240530734640889461</id><published>2011-08-11T22:44:00.000+09:00</published><updated>2011-08-11T22:44:42.464+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-11T22:44:42.464+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="단어장" /><title>[단어장] Java로 간단한 단어장을 만들어 보자.</title><content type="html">&amp;nbsp;소스와 함께 간단하게 단어장을 만들어 보자.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;일단 단어장을 만들기 위해서 뭐가 필요할지에 대해 이야기 해 보겠다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;1. 단어장을 만들기 위해서는 단어들을 저장할 DB가 필요하고&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;2. 단어장에 넣을 단어들을 입력하기 위한 GUI 창이 필요하고&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;3. 단어들을 보여줄 GUI가 필요하다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;이 세 가지만 다룰 줄 안다면 간단하게 단어장을 만들 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;1. DB 다루기&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;MySql과 JDBC를 이용하여 자바에서 DB를 사용하도록 하자.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;MySql 과 JDBC를 저장하는 방법은 블로그 내 다른 글을 참조하도록 하자.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;그럼 이제 단어장을 만들기 위해 필요한 DB 연산 기능을 생각해 보자.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;우선 무엇보다도 저장할 공간 즉 Table이 필요하다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;이를 위해서는 Create Table을 이용하여 DB를 만들어야 한다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;그 후 입력한 단어들을 저장하기 위해서 Insert 문을 사용하게 된다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;그리고 사용자가 원하는 단어를 뽑기 우해서 Select 문을 사용하고&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;필요없는 단어를 지우기 위해 Delete 문을 사용하여야 한다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;이 정도 기본적인 Sql 문들을 이용할 줄 알고 이를 Java에서 나타내기 위해&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;JDBC를 잘 이용한다면 DB 구축은 쉽게 할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;현재 본인이 만들어 놓은 단어장에 들어 있는 DB 관련 소스이다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
package dictionary;&lt;br /&gt;
&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.sql.Connection;&lt;br /&gt;
import java.sql.DriverManager;&lt;br /&gt;
import java.sql.ResultSet;&lt;br /&gt;
import java.sql.SQLException;&lt;br /&gt;
import java.sql.Statement;&lt;br /&gt;
&lt;br /&gt;
import javax.swing.JTable;&lt;br /&gt;
import javax.swing.table.DefaultTableModel;&lt;br /&gt;
&lt;br /&gt;
import dictionary.DTable.RowListener;&lt;br /&gt;
&lt;br /&gt;
public class D_DB {&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;static Connection con = null;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;static Statement stmt = null;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;static String userid = "root", password = "root";&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;static String url = "jdbc:mysql://localhost:3306/test";&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;public static Connection getConnection() {&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;try {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;Class.forName("org.gjt.mm.mysql.Driver"); // Class.forName("myDriver.ClassName");&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;														&lt;/span&gt;// ?&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;} catch (java.lang.ClassNotFoundException e) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;System.err.print("ClassNotFoundException: ");&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;System.err.println(e.getMessage());&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;try {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;con = DriverManager.getConnection(url, userid, password);&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;} catch (SQLException ex) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;System.err.println("SQLException: " + ex.getMessage());&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;return con;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;public static void createTables() {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;Connection con = getConnection();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;String query;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;Statement stmt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;try {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;query = "create table Word " + "(name varchar(32), "&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;					&lt;/span&gt;+ "mean varchar(200), " + "importance TINYINT , "&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;					&lt;/span&gt;+ "count SMALLINT)";&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;stmt = con.createStatement();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;stmt.executeUpdate(query);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;stmt.close();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;con.close();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;} catch (Exception e) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;e.printStackTrace();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;public static void insertWord(String word, String mean, int importance) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;Connection con = getConnection();&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;String insert = "insert into Word values('" + word + "', '" + mean&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;+ "', " + importance + ", " + 1 + ")";&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;String select = "SELECT name, count FROM Word WHERE name = '" + word + "'";&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;try {&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;stmt = con.createStatement();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;ResultSet result = stmt.executeQuery(select);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;if (result.first() == false) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;stmt.executeUpdate(insert);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;} else {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;int count = result.getInt(2);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;count++;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;String update = "update Word set mean = '" + mean + "', count = " + count&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;						&lt;/span&gt;+ " where name = '" + word+ "'";&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;stmt.executeUpdate(update);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;stmt.close();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;con.close();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;} catch (SQLException e) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;// TODO Auto-generated catch block&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;e.printStackTrace();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;public static void showTable() {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;Connection con = getConnection();&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;String select = "SELECT * FROM Word ";&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;try {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;stmt = con.createStatement();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;ResultSet result = stmt.executeQuery(select);&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;while(result.next()){&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;String word = result.getString(1);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;String mean = result.getString(2);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;int imp = result.getInt(3);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;int count = result.getInt(4);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;System.out.println("영어 단어 " + word + " 영어 뜻 " +&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;						&lt;/span&gt;mean + " 중요도" + imp + " 저장횟수 " + count);&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;stmt.close();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;con.close();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;} catch (SQLException e) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;// TODO Auto-generated catch block&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;e.printStackTrace();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;public static void DeleteWord(String word) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;Connection con = getConnection();&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;String delete = "DELETE FROM Word where name = '" + word + "'";&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;try {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;stmt = con.createStatement();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;stmt.executeUpdate(delete);&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;stmt.close();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;con.close();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;} catch (SQLException e) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;// TODO Auto-generated catch block&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;e.printStackTrace();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;public static void setTable(JTable table,DefaultTableModel model) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;Connection con = D_DB.getConnection();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;String select = "SELECT name FROM Word";&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;String title = "word";&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;try {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;stmt = con.createStatement();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;ResultSet result = stmt.executeQuery(select);&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;model.addColumn(title);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;while (result.next()) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;String word = result.getString(1);&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;model.addRow(new Object[] { word });&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;stmt.close();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;con.close();&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;} catch (SQLException e) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;// TODO Auto-generated catch block&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;e.printStackTrace();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;public static void getData(String[] data, String word){&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;Connection con = getConnection();&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;String select = "SELECT name,mean FROM Word where name = '" +&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;word + "'";&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;try {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;stmt = con.createStatement();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;ResultSet result = stmt.executeQuery(select);&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;while(result.next()){&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;data[0] = result.getString(1);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;data[1] = result.getString(2);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;stmt.close();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;con.close();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;} catch (SQLException e) {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;// TODO Auto-generated catch block&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;e.printStackTrace();&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;br /&gt;
}&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&amp;nbsp;이 Code를 D_DB.java 라는 클래스를 새로 만든 후 붙여 넣으면 된다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;질문 사항이 있으면 댓글을 달아주시기 바랍니다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;다음 번에는 단어장을 만들 때 필요한 GUI를 만드는 방법을 알려드리겠&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;습니다.&lt;br /&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4269806382658593631-7240530734640889461?l=dreamchallenger.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/u02TjgUGRD57m8FNIUl1TtrrWz0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/u02TjgUGRD57m8FNIUl1TtrrWz0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/u02TjgUGRD57m8FNIUl1TtrrWz0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/u02TjgUGRD57m8FNIUl1TtrrWz0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/iDdqk/~4/_cZgQBufInA" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/7240530734640889461?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/7240530734640889461?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/iDdqk/~3/_cZgQBufInA/java.html" title="[단어장] Java로 간단한 단어장을 만들어 보자." /><author><name>DynamicPro</name><uri>http://www.blogger.com/profile/11966660154765054808</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://dreamchallenger.blogspot.com/2011/08/java.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkAHSHc4cSp7ImA9WhdRE0U.&quot;"><id>tag:blogger.com,1999:blog-4269806382658593631.post-3491787929947198032</id><published>2011-08-03T23:12:00.000+09:00</published><updated>2011-08-03T23:12:19.939+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-03T23:12:19.939+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Servlet" /><title>Servlet EL 함수</title><content type="html">&amp;nbsp;1. 정적인 공용 메소드를 제공하는 클래스를 먼저 작성&lt;br /&gt;
&amp;nbsp;일반적인 자바 클래스 but Method는 반드시 public static 으로&lt;br /&gt;
&amp;nbsp;인자는 있어도 무방 but 리턴 타입이 void면 곤란&lt;br /&gt;
&amp;nbsp;작성 후 /WEB-INF/classes 디렉토리에 .class 파일을 옮길 것&lt;br /&gt;
&amp;nbsp;2. 태그 라이브러리 서술자 파일&lt;br /&gt;
&amp;nbsp; TLD( Tag Library Descriptor) 란 파일로 함수를 정의한 자바 클래스와 이를 호출할 JSP 매핑&lt;br /&gt;
&amp;nbsp;3. JSP에 taglib 지시자를 코딩&lt;br /&gt;
&amp;nbsp; 지금 JSP에서 이 TLD를 쓸 건데 다른 것하고 헛갈릴 수 있으니 앞첨자 (prefix)를 붙이고 싶네&lt;br /&gt;
&amp;nbsp;4. 함수를 호출하는 EL 작성&lt;br /&gt;
&amp;nbsp;${prefix:name()}&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;EL 연산자들&lt;br /&gt;
&amp;nbsp;더하기: + // 뺴기 : - // 곱하기 * // 나누기 / 와 div // 나머지 % 와 mod&lt;br /&gt;
&amp;nbsp;논리 연산자 :&lt;br /&gt;
&amp;nbsp;AND : &amp;amp;&amp;amp; 와 and // OR || 와 or // NOT : ! 와 not&lt;br /&gt;
&amp;nbsp;관계 연산자 :&lt;br /&gt;
&amp;nbsp;등호 == 와 eq // 부등호 != 와 ne // ~보다 작다 &amp;lt; 와 lt // ~보다 크다 &amp;gt; 와 gt // ~ 보다 작거나 같다 : &amp;lt;= 와 le // ~보다 크거나 같다 &amp;gt;= 와 ge&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;EL은 널(null)을 아주 자연스럽게 처리&lt;br /&gt;
&amp;nbsp;산술 연산에서 EL은 널을 "0"으로&lt;br /&gt;
&amp;nbsp;논리연산에서 EL은 널을 "거짓 (false)"로 처리&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4269806382658593631-3491787929947198032?l=dreamchallenger.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/AM84UM1yyKHuajivmNCv1Tpol8Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AM84UM1yyKHuajivmNCv1Tpol8Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/AM84UM1yyKHuajivmNCv1Tpol8Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AM84UM1yyKHuajivmNCv1Tpol8Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/iDdqk/~4/F96C00KDQ10" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/3491787929947198032?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/3491787929947198032?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/iDdqk/~3/F96C00KDQ10/servlet-el.html" title="Servlet EL 함수" /><author><name>DynamicPro</name><uri>http://www.blogger.com/profile/11966660154765054808</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://dreamchallenger.blogspot.com/2011/08/servlet-el.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQBQn8_eip7ImA9WhdRE0U.&quot;"><id>tag:blogger.com,1999:blog-4269806382658593631.post-617849960427927787</id><published>2011-08-03T23:05:00.000+09:00</published><updated>2011-08-03T23:05:53.142+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-03T23:05:53.142+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Servlet" /><title>Servlet Action(서블릿 액션)</title><content type="html">&amp;nbsp;표준 액션 &amp;nbsp;&amp;lt;jsp:include page = "wickedFooter.jsp"/&amp;gt;&lt;br /&gt;
&amp;nbsp;기타 액션: &amp;lt;c:set var = "rate" value "32" /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;스크립트가 없는 JSP&lt;br /&gt;
&amp;nbsp;빈 관련 표준 액션&lt;br /&gt;
&amp;nbsp;&amp;lt;jsp:useBean&amp;gt; 실제 객체를 선언하고 초기화하는 태크&lt;br /&gt;
&amp;nbsp;&amp;lt;jsp:useBean id="person" class = "foo.Person" scope = "request"/&amp;gt;&lt;br /&gt;
&amp;nbsp;id = 빈 객체 식별자 선언&lt;br /&gt;
&amp;nbsp;class = 클래스 타입 선언&lt;br /&gt;
&amp;nbsp;scope = 빈 객체 속성 생존 범위&lt;br /&gt;
&amp;nbsp;&amp;lt;jsp:getProperty name = "person" property = "name" /&amp;gt;&lt;br /&gt;
&amp;nbsp;name = 빈객체 이름&lt;br /&gt;
&amp;nbsp;property = 프로퍼티 이름을 적음&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;lt;jsp:useBean&amp;gt;은 객체 생성도 함&lt;br /&gt;
&amp;nbsp;&amp;lt;jsp:setProperty name = "person" property = "name" value = "Fred"/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;lt;jsp:useBean id = "person" type = "foo.Person" class = "foo.Employee" scope = "page"&amp;gt;&lt;br /&gt;
&amp;nbsp;class 없이 type만 쓸 경우, 빈이 먼저 존재해야 함&lt;br /&gt;
&amp;nbsp;type 이 있든 없든 관계없이 class가 있을 경우 이 클래스는 추상 객체여서는 안되며 반드시 인자가 없는 public 생성자가 있어야 함&lt;br /&gt;
&amp;nbsp;scope 속성의 default 값은 "page"&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;서블릿을 거치지 않고 JSP로 바로 요청을 날리면,&lt;br /&gt;
&amp;nbsp;&amp;lt;%person.setName(request.getParaeter("userName"));%&amp;gt;&lt;br /&gt;
&amp;nbsp;표준 액션 안에 스크립팅&lt;br /&gt;
&amp;nbsp;&amp;lt;jsp:setProperty name = "person" property = "name" value = "&amp;lt;%= request.getParameter("userName") %&amp;gt;%&amp;gt;&lt;br /&gt;
&amp;nbsp;param 속성으로 요청 파라미터 값을 빈 프로퍼티에 곧바로 설정가능&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;여기서 value 대신 param = "userName" 을 쓸 수도 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;이 보다 더 나은 방식으로는 폼 입력 필드 이름이 빈 프로퍼티 이름과 같으면 param 속성이 없어도 동작한다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;빈의 모든 프로퍼티 이름과 요청 파라미터 이름이 같을 때&lt;br /&gt;
&amp;nbsp;예) Param 빈에 두개의 프로퍼티 (name, empID) 가 있을때&lt;br /&gt;
&amp;nbsp;&amp;lt;jsp:setProperty name = "person" property = "*" /&amp;gt;&lt;br /&gt;
&amp;nbsp;빈 태그는 기본 타입 프로퍼티를 자동으로 변환&lt;br /&gt;
&amp;nbsp;프로퍼티가 String 기본형도 아닌 경우&lt;br /&gt;
&amp;nbsp;EL을 사용&lt;br /&gt;
&amp;nbsp;${person.dog.name}&lt;br /&gt;
&amp;nbsp;[] 연산자는 도트 연산자 보다 막강&lt;br /&gt;
&amp;nbsp;${person["name"]} = ${param.name}&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;[]연산자는 맵, 빈, 리스트, 배열 사용가능&lt;br /&gt;
&amp;nbsp;오른쪽에 있는 값이 인덱스 값 즉 숫자가 될 수 있으며, 자바 명명 규칙을 따르지 않는 것도 올 수 있음&lt;br /&gt;
&amp;nbsp;예) 문자열과 도트를 가지는 다음과 같은 값 "coo.foo.trouble" 도 맵의 키가 될 수 있다.&lt;br /&gt;
&amp;nbsp;[] 연산자 안의 값이 문자열(따옴표로 묶여 있다면) 이라면, 이것은 맵키가 될 수 있고, 빈 프로퍼티 또는 리스트나 배열 인덱스가 될 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;배열에 [] 연산자 사용하기&lt;br /&gt;
EL의 [] 연산자는 그냥 [] 연산자일 뿐 자바와 상관관계가 없다.&lt;br /&gt;
&amp;nbsp;문자열(String)이아니면, 이게 뭘까 하고 실행(평가)&lt;br /&gt;
&amp;nbsp;맵 키 값이면 맵의 값을 가져 옴&lt;br /&gt;
&amp;nbsp;request.setAttribute("Genre", "Ambient");&lt;br /&gt;
&amp;nbsp;Music is ${musicMap[Genre]} =&amp;gt; Music is ${musicMap["Ambient"]}&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp;[] 안에 내장 표현식을 쓸 수 있다.&lt;br /&gt;
&amp;nbsp;${musicMap[MusicType[0]]}&lt;br /&gt;
&amp;nbsp;${musicMap["Ambient"]}&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;EL에서 요청 파라미터&lt;br /&gt;
&amp;nbsp;${param.name}&lt;br /&gt;
&amp;nbsp;${param.empID}&lt;br /&gt;
&amp;nbsp;${paramValues.food[0]}&lt;br /&gt;
&lt;br /&gt;
Request에서 파라미터 이상의 정보를 원할 때&lt;br /&gt;
&amp;nbsp;"host" 헤더 정보 읽기&lt;br /&gt;
&amp;nbsp;Host is : ${header["host"]} = ${header.host}&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;requestScope은 request 정보 (property)가 아닌 request 속성을 가져 오기 위해 사용. request 정보 pageContext를 통해서 접근&lt;br /&gt;
&amp;nbsp;${pageContext.request.method}&lt;br /&gt;
&amp;nbsp;생존 범위 관련 내장 객체가 도움이 될 때&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;한 군데 이상 똑같은 이름으로 몰려 있을지도 모르는 경우&lt;br /&gt;
${requestScope.person.name}&lt;br /&gt;
&amp;nbsp;속성 이름이 문자열인 경우&lt;br /&gt;
&amp;nbsp;request.setAttribute("foo.person",p);&lt;br /&gt;
&amp;nbsp;-&amp;gt; ${requestScope["foo.person"].name}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4269806382658593631-617849960427927787?l=dreamchallenger.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4KMIjn-lzPP8-JZMcCig_uAtY1k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4KMIjn-lzPP8-JZMcCig_uAtY1k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4KMIjn-lzPP8-JZMcCig_uAtY1k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4KMIjn-lzPP8-JZMcCig_uAtY1k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/iDdqk/~4/fcRefKotZl4" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/617849960427927787?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/617849960427927787?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/iDdqk/~3/fcRefKotZl4/servlet-action.html" title="Servlet Action(서블릿 액션)" /><author><name>DynamicPro</name><uri>http://www.blogger.com/profile/11966660154765054808</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://dreamchallenger.blogspot.com/2011/08/servlet-action.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ENR3s6eip7ImA9WhdREkU.&quot;"><id>tag:blogger.com,1999:blog-4269806382658593631.post-5204234783395255870</id><published>2011-08-02T21:54:00.000+09:00</published><updated>2011-08-02T21:54:56.512+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-02T21:54:56.512+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Servlet" /><title>PageContext로 속성 접근하기</title><content type="html">&amp;nbsp;pageContext는 자신이 설정되어 있는 page 범위 속성 뿐만 아니라 어떤 다른 생존 범위 속성도 접근할 수 있을 정도로 매우 막강&lt;br /&gt;
&amp;nbsp;pageContext를 이용하여 속성을 읽고, 설정하는 예제&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&amp;nbsp;page 생존 범위의 속성 세팅하기&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&amp;nbsp;&amp;lt;%Float one = new Float(42.5);%&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;lt;% pageContext.setAttribute("foo",one);%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&amp;nbsp;page 생존 범위의 속성 읽기&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&amp;nbsp;&amp;lt;%= pageContext.getAttribute("foo")%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&amp;nbsp;pageContext를 이용하여 session 생존 범위 속성 세팅하기&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&amp;nbsp;&amp;lt;%Float two = new Float(22.4);%&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;lt;%pageContext.setAttribute("foo",two, PageContext.SESSION_SCOPE);%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;pageContext를 이용하여 session 생존 범위 속성 읽기&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&amp;nbsp;&amp;lt;%=pageContext.getAttribute("foo", PageContext.SESSION_SCOPE)%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&amp;nbsp;pageContext를 이용하여 application 생존 범위 속성 읽기&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&amp;nbsp;&amp;lt;%= pageContext.getAttribute("mail",PageContext.APPLICATION_SCOPE)%&amp;gt;&lt;br /&gt;
&amp;nbsp;= &amp;lt;%= application.getAttribute("mail")%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&amp;nbsp;pageContext를 이용하여 어떤 생존범위인지 모르는 속성 찾기&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&amp;lt;%= pageContext.findAttribute("foo")%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;3가지 지시자&lt;br /&gt;
&amp;nbsp;1. page 지시자&lt;br /&gt;
&amp;nbsp;&amp;lt;%@page import = "foo.*" session = "false" %&amp;gt;&lt;br /&gt;
&amp;nbsp;2. taglib 지시자&lt;br /&gt;
&amp;nbsp;&amp;lt;%@taglib tagdir = "/WEB-INF/tags/cool" prefix = "cool"%&amp;gt;&lt;br /&gt;
&amp;nbsp;3. include 지시자&lt;br /&gt;
&amp;lt;%@ include file = "wickedHeader.html" %&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4269806382658593631-5204234783395255870?l=dreamchallenger.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YQL20Wya8Y4BKkngA10keH2PBYc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YQL20Wya8Y4BKkngA10keH2PBYc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YQL20Wya8Y4BKkngA10keH2PBYc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YQL20Wya8Y4BKkngA10keH2PBYc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/iDdqk/~4/kliqxzVbDjU" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/5204234783395255870?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/5204234783395255870?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/iDdqk/~3/kliqxzVbDjU/pagecontext.html" title="PageContext로 속성 접근하기" /><author><name>DynamicPro</name><uri>http://www.blogger.com/profile/11966660154765054808</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://dreamchallenger.blogspot.com/2011/08/pagecontext.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMNR3g9fSp7ImA9WhdREkU.&quot;"><id>tag:blogger.com,1999:blog-4269806382658593631.post-7841036597163635146</id><published>2011-08-02T21:34:00.002+09:00</published><updated>2011-08-02T21:34:56.665+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-02T21:34:56.665+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Servlet" /><title>JSP 사용</title><content type="html">&amp;nbsp;JSP 도 Servlet으로 변환된다.&lt;br /&gt;
&amp;nbsp;JSP 안에서 자바 코드를 &amp;lt;%.... %&amp;gt; 태그 안에 스크립틀릿으로 작성&lt;br /&gt;
&amp;nbsp;&amp;lt;%@ page import = "foo.*" %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JSP 초기화 하기&lt;br /&gt;
&amp;nbsp;서블릿 초기화 파라미터 설정하기&lt;br /&gt;
&amp;nbsp;jspInit() 재정의하기&lt;br /&gt;
jspInit() 메소드를 JSP 파일에 코딩 =&amp;gt; 컨테이너가 서블릿 인생 시작 시에 이 메소드를 호출&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4269806382658593631-7841036597163635146?l=dreamchallenger.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/x0yf8XFZCcpWCdszw40hXZXDR_c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x0yf8XFZCcpWCdszw40hXZXDR_c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/x0yf8XFZCcpWCdszw40hXZXDR_c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x0yf8XFZCcpWCdszw40hXZXDR_c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/iDdqk/~4/STpULzVI1IE" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/7841036597163635146?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/7841036597163635146?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/iDdqk/~3/STpULzVI1IE/jsp.html" title="JSP 사용" /><author><name>DynamicPro</name><uri>http://www.blogger.com/profile/11966660154765054808</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://dreamchallenger.blogspot.com/2011/08/jsp.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcBR388eip7ImA9WhdREkU.&quot;"><id>tag:blogger.com,1999:blog-4269806382658593631.post-403162762655322365</id><published>2011-08-02T21:27:00.000+09:00</published><updated>2011-08-02T21:27:36.172+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-02T21:27:36.172+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Servlet" /><title>Servlet 세션 관리</title><content type="html">&amp;nbsp;대화 상태 유지 하기&lt;br /&gt;
&amp;nbsp;Session에 정보 저장 =&amp;gt; 클라이언트 구별을 위해 유일한 세션 ID가 필요&lt;br /&gt;
&amp;nbsp;세션 ID 쿠키 사용 =&amp;gt; 컨테이너가 알아서 관리&lt;br /&gt;
&amp;nbsp;쿠키 사용을 못할 시 =&amp;gt; URL 재작성&lt;br /&gt;
&amp;nbsp;response의 URL 인코딩 =&amp;gt; response.encodeURL("/BeerTest.do");&lt;br /&gt;
&amp;nbsp;사용자로부터 들어 온 요청을 다른 서블릿이나 JSP로 보내고 싶은데 세션은 계속해서 유지하고 싶을 떄&lt;br /&gt;
&amp;nbsp;response.encodeRedirectURL("/BeerTest.do")&lt;br /&gt;
&amp;nbsp;세션 제거 하기&lt;br /&gt;
HttpSession 메소드&lt;br /&gt;
세션 타임 아웃 설정하기&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&amp;nbsp; 시간이 다 되어서&lt;/li&gt;
&lt;li&gt;&amp;nbsp; 개발자가 세션 객체에 invalidate() 메소드 실행&lt;/li&gt;
&lt;li&gt;&amp;nbsp; App 다운&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&amp;nbsp;쿠키 사용의 또 다른 방법 =&amp;gt; 쿠키는 서버와 클라이언트 간에 교환하는 조그마한 데이터&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;서블릿 API로 쿠키 사용하기&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;세션 이동&lt;/div&gt;&lt;div&gt;&amp;nbsp;오직 HttpSession 객체와 그 속성 만이 하나의 VM에서 다른 VM으로 옮겨 감&lt;/div&gt;&lt;div&gt;&amp;nbsp;HttpSession은 웹 애플리캐이션 당 하나의 세션 ID당 하나 밖에 없음 얼마나 많은 VM이 분산환경에서 돌아가든지 상관 없음&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;실제 세션 이동 HttpSession만 이동한다&lt;/div&gt;&lt;div&gt;&amp;nbsp;HttpSessionActivationListener 는 속성을 옮김&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4269806382658593631-403162762655322365?l=dreamchallenger.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/92V-ERmOLCv-LCRkRsIr4fH34sI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/92V-ERmOLCv-LCRkRsIr4fH34sI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/92V-ERmOLCv-LCRkRsIr4fH34sI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/92V-ERmOLCv-LCRkRsIr4fH34sI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/iDdqk/~4/wig2JMr_J48" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/403162762655322365?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/403162762655322365?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/iDdqk/~3/wig2JMr_J48/servlet_02.html" title="Servlet 세션 관리" /><author><name>DynamicPro</name><uri>http://www.blogger.com/profile/11966660154765054808</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://dreamchallenger.blogspot.com/2011/08/servlet_02.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIHRXk9eip7ImA9WhdREkU.&quot;"><id>tag:blogger.com,1999:blog-4269806382658593631.post-1156038750220317561</id><published>2011-08-02T21:18:00.000+09:00</published><updated>2011-08-02T21:18:54.762+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-02T21:18:54.762+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Servlet" /><title>Servlet 속성(Attribute)란?</title><content type="html">&amp;nbsp;ServletContext, HttpServletRequest, HttpSession 객체 중 하나에 설정해 놓는 객체&lt;br /&gt;
&amp;nbsp;Context, Request, Session&lt;br /&gt;
&amp;nbsp;Context 생존 범위는 스레드-안전 하지 못하다&lt;br /&gt;
&amp;nbsp;세션 속성 역시 스레드 - 안전 하지 못하다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;가능한 방법은 ServletContext나 httpSession 등에 Synchronized를 거는 방법이 있다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4269806382658593631-1156038750220317561?l=dreamchallenger.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/H0j9hgQiJT7oUS-Ts92gSMMalqg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/H0j9hgQiJT7oUS-Ts92gSMMalqg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/H0j9hgQiJT7oUS-Ts92gSMMalqg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/H0j9hgQiJT7oUS-Ts92gSMMalqg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/iDdqk/~4/NFUSyZ2Mef0" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/1156038750220317561?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/1156038750220317561?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/iDdqk/~3/NFUSyZ2Mef0/servlet-attribute.html" title="Servlet 속성(Attribute)란?" /><author><name>DynamicPro</name><uri>http://www.blogger.com/profile/11966660154765054808</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://dreamchallenger.blogspot.com/2011/08/servlet-attribute.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMHQX46fip7ImA9WhdREkU.&quot;"><id>tag:blogger.com,1999:blog-4269806382658593631.post-4168412531484607119</id><published>2011-08-02T21:17:00.000+09:00</published><updated>2011-08-02T21:17:10.016+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-02T21:17:10.016+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Servlet" /><title>Servlet Listener( 서블렛 리스너)</title><content type="html">&amp;nbsp;ServletContextListener =&amp;gt; ServletContext 초기화와 소멸에 귀를 기울임&lt;br /&gt;
&amp;nbsp;Context 초기화(App 배포)를 알아차림&lt;br /&gt;
&amp;nbsp;ServletContext로부터 Context 초기화 파라미터를 읽음&lt;br /&gt;
&amp;nbsp;데이터 베이스 연결을 위해 초기화 파라미터 검색명 사용&lt;br /&gt;
&amp;nbsp;데이터베이스 Connection 객체를 속성에 저장&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;HttpSessionBindingListener -&amp;gt; 속성 자신이 세션에 속성으로 추가, 제거 되는 지&lt;br /&gt;
&amp;nbsp;HttpSessionAttributeListener -&amp;gt; 세션에 어떤 속성이라도 속성이 추가, 제거, 수정 되는 이벤트가 발생하는지&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4269806382658593631-4168412531484607119?l=dreamchallenger.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uSiQAmOl0kvUhz8sFxu4PS_oDRE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uSiQAmOl0kvUhz8sFxu4PS_oDRE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uSiQAmOl0kvUhz8sFxu4PS_oDRE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uSiQAmOl0kvUhz8sFxu4PS_oDRE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/iDdqk/~4/m5OA0qRqpjw" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/4168412531484607119?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/4168412531484607119?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/iDdqk/~3/m5OA0qRqpjw/servlet-listener.html" title="Servlet Listener( 서블렛 리스너)" /><author><name>DynamicPro</name><uri>http://www.blogger.com/profile/11966660154765054808</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://dreamchallenger.blogspot.com/2011/08/servlet-listener.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUDQ308fip7ImA9WhdREkU.&quot;"><id>tag:blogger.com,1999:blog-4269806382658593631.post-5069174762593655632</id><published>2011-08-02T21:14:00.000+09:00</published><updated>2011-08-02T21:14:32.376+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-02T21:14:32.376+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Servlet" /><title>ServletConfig() Method</title><content type="html">&amp;nbsp;컨테이너가 서블릿을 초기화 할 때, 서블릿 마다 하나씩 ServletConfig 생성&lt;br /&gt;
&amp;nbsp;Container는 DD에서 서블릿 초기화 파라미터를 읽어, 이 정보를 ServletConfig로 넘겨줌. 그 다음 ServletConfig를 서블릿의 init() method에 제공 컨테이너가 서블릿을 만들 때 DD를 읽어 이름/값의 쌍으로 ServletConfig를 생성&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;ServletConfig -&amp;gt; init-param&lt;br /&gt;
&amp;nbsp;JSP에서 서블릿 초기화 파라미터 접근 하는 법은?&lt;br /&gt;
&amp;nbsp;&amp;lt;context-param&amp;gt;&lt;br /&gt;
&amp;nbsp;ServletContext로 할 수 있는 일은?&lt;br /&gt;
&amp;nbsp;컨텍스트 파라미터에는 String 밖에 저장이 안 됨&lt;br /&gt;
&amp;nbsp;초기화 파라미터로 데이터베이스 dataSource 객체를 저장하고 싶을 경우 =&amp;gt; Data source 검색명(look up name)을 저장 =&amp;gt; 그 후 String 검색명을 실제 DataSource 객체로 바꾸면 됨&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4269806382658593631-5069174762593655632?l=dreamchallenger.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/SoD6ncvIcQb-Xhjvk_58ZsgZKmY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SoD6ncvIcQb-Xhjvk_58ZsgZKmY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/SoD6ncvIcQb-Xhjvk_58ZsgZKmY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SoD6ncvIcQb-Xhjvk_58ZsgZKmY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/iDdqk/~4/daPSSN2jRkg" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/5069174762593655632?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/5069174762593655632?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/iDdqk/~3/daPSSN2jRkg/servletconfig-method.html" title="ServletConfig() Method" /><author><name>DynamicPro</name><uri>http://www.blogger.com/profile/11966660154765054808</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://dreamchallenger.blogspot.com/2011/08/servletconfig-method.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcDRn8_cCp7ImA9WhdREkU.&quot;"><id>tag:blogger.com,1999:blog-4269806382658593631.post-4785065766489399690</id><published>2011-08-02T21:11:00.000+09:00</published><updated>2011-08-02T21:11:17.148+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-02T21:11:17.148+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Servlet" /><title>Servlet Request &amp; Response (서블릿 요청 응답)</title><content type="html">&amp;nbsp;service()의 인자이자 가장 중요한 것&lt;br /&gt;
&amp;nbsp;Request =&amp;gt; 쿠키, 헤더, 세션 등 HTTP에 관련된 것들을 서비스, HTTP 프로토콜에 관련 된 Method 추가, 서블릿이 클라이언트, 브라우져와 대화하기 위한 것&lt;br /&gt;
&amp;nbsp;Response =&amp;gt; HTTP에 관련 된 오류, 쿠키, 헤더 정보에 대한 메소드&lt;br /&gt;
&amp;nbsp;HttpServlet Request와 HttpServletResponse는 Container가 구축&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;Http 요청 메소드는 doGet() or doPost() 결정&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4269806382658593631-4785065766489399690?l=dreamchallenger.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IwgJXm_3l-ULSC6uw2BnZQoW3Wo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IwgJXm_3l-ULSC6uw2BnZQoW3Wo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IwgJXm_3l-ULSC6uw2BnZQoW3Wo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IwgJXm_3l-ULSC6uw2BnZQoW3Wo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/iDdqk/~4/ps6rTXUe030" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/4785065766489399690?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/4785065766489399690?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/iDdqk/~3/ps6rTXUe030/servlet-request-response.html" title="Servlet Request &amp; Response (서블릿 요청 응답)" /><author><name>DynamicPro</name><uri>http://www.blogger.com/profile/11966660154765054808</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://dreamchallenger.blogspot.com/2011/08/servlet-request-response.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4GQn88cSp7ImA9WhdREkU.&quot;"><id>tag:blogger.com,1999:blog-4269806382658593631.post-3666667661051988468</id><published>2011-08-02T21:08:00.000+09:00</published><updated>2011-08-02T21:08:43.179+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-02T21:08:43.179+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Servlet" /><title>Servlet 로딩과 초기화 (Servlet loading &amp; initailize)</title><content type="html">&amp;nbsp;컨테이너가 서블릿 파일을 찾아서 로딩 시 시작 =&amp;gt; 컨테이너 시작 시(톰캣) 이루어 진다.&lt;br /&gt;
&amp;nbsp;생성자의 실행 성성자 : '존재하지 않음' -&amp;gt; '초기화 됨'&lt;br /&gt;
&amp;nbsp;객체를 만드는 것이지 서블릿을 만드는 것이 아니다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;1. ServletConfig 객체&lt;br /&gt;
&amp;nbsp;서블릿 당 하나&lt;br /&gt;
&amp;nbsp;서블릿 배포시 설정 된 정보를 서블릿으로 넘겨주기 위해&lt;br /&gt;
&amp;nbsp;ServletContext 접근&lt;br /&gt;
&amp;nbsp;파라미터값은 배포서술자에서 설정 가능&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;2. ServletContext&lt;br /&gt;
&amp;nbsp;Application 당 하나&lt;br /&gt;
&amp;nbsp;웹 App의 파라미터 정보를 읽음 (DD 안에 설정 된 정보들)&lt;br /&gt;
&amp;nbsp;App용 게시판&lt;br /&gt;
&amp;nbsp;서버 정보 파악&lt;br /&gt;
&amp;nbsp;Servlet 의 임무 =&amp;gt; 요청 핸들링&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4269806382658593631-3666667661051988468?l=dreamchallenger.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EPi5UH6YCed2j-Mg98_vjQhpM9g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EPi5UH6YCed2j-Mg98_vjQhpM9g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EPi5UH6YCed2j-Mg98_vjQhpM9g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EPi5UH6YCed2j-Mg98_vjQhpM9g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/iDdqk/~4/kMJhnXRxmYw" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/3666667661051988468?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/3666667661051988468?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/iDdqk/~3/kMJhnXRxmYw/servlet-servlet-loading-initailize.html" title="Servlet 로딩과 초기화 (Servlet loading &amp; initailize)" /><author><name>DynamicPro</name><uri>http://www.blogger.com/profile/11966660154765054808</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://dreamchallenger.blogspot.com/2011/08/servlet-servlet-loading-initailize.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4ASHc8fSp7ImA9WhdREkw.&quot;"><id>tag:blogger.com,1999:blog-4269806382658593631.post-7749615430260237086</id><published>2011-08-02T00:35:00.000+09:00</published><updated>2011-08-02T00:35:49.975+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-02T00:35:49.975+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Servlet" /><title>JSP Fragment</title><content type="html">&amp;nbsp;JSP Code를 나타내는 객체, 스크립팅 사용 불가&lt;br /&gt;
&amp;nbsp;객체 =&amp;gt; 다른 도우미 객체로 넘길수 있고 JSpFragment의 메소드 (getJspContent()) 를 호출해서 필요한 정보를 읽을 수 있음 =&amp;gt; 이를 통해 속성 정보 및 다른 객체 정보에 접근 가능&lt;br /&gt;
&amp;nbsp;JSP Fragment가 하는 작업 =&amp;gt; 응답에 태그 몸체 내용 출력&lt;br /&gt;
&amp;nbsp;getContents()나 getBody() 같은 메소드는 없다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;몸체&lt;br /&gt;
&amp;nbsp;invoke() method는 인자로 java.io.write를 받는다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4269806382658593631-7749615430260237086?l=dreamchallenger.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Qr1gP1kccELUtS1vvl49_q6_9l4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Qr1gP1kccELUtS1vvl49_q6_9l4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Qr1gP1kccELUtS1vvl49_q6_9l4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Qr1gP1kccELUtS1vvl49_q6_9l4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/iDdqk/~4/nb91VZ4jb6s" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/7749615430260237086?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/7749615430260237086?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/iDdqk/~3/nb91VZ4jb6s/jsp-fragment.html" title="JSP Fragment" /><author><name>DynamicPro</name><uri>http://www.blogger.com/profile/11966660154765054808</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://dreamchallenger.blogspot.com/2011/08/jsp-fragment.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8GQHo9fyp7ImA9WhdREkw.&quot;"><id>tag:blogger.com,1999:blog-4269806382658593631.post-6330303207070027678</id><published>2011-08-02T00:33:00.000+09:00</published><updated>2011-08-02T00:33:41.467+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-02T00:33:41.467+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Servlet" /><title>태그 파일</title><content type="html">&amp;nbsp;include 처럼 행동하지만 좀 더 개선된 방식&lt;br /&gt;
&amp;nbsp;&amp;lt;myTags: Header/&amp;gt; =&amp;gt; 태그 이름이 바로 파일 이름&lt;br /&gt;
&amp;nbsp;태그 파일에서는 요청 파라미터를 사용하지 않고 태그 속성으로 정보를 넘김&lt;br /&gt;
&amp;nbsp;속성으로 넘겨야 할 값이 많을 경우&lt;br /&gt;
&amp;nbsp;한문장 정도 크기 일 때&lt;br /&gt;
&amp;nbsp;태그 파일에 쓸 body-content 정의 =-&amp;gt; tag 지시자 사용&lt;br /&gt;
&amp;nbsp;&amp;lt;body-content&amp;gt;=&amp;gt; TLD 파일 &amp;lt;tag&amp;gt;의 하위 항목 필수&lt;br /&gt;
태그 파일 =&amp;gt; 정의하지 않으면 디폴트인 scriptless가 설정&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;태그 파일에서는 스크립팅이 가능하지만 태그 파일을 호출하는 JSP에서 태그 몸체에 스크립팅 사용 불가&lt;br /&gt;
&amp;nbsp;커스텀 태그 핸들러 : classic, simple&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;자바 코드를 출력하기 위해&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;몸체가 있는 심플 태그&lt;br /&gt;
&amp;nbsp;body를 사용하기 위해 =&amp;gt; getJspBody().invoke(null);&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4269806382658593631-6330303207070027678?l=dreamchallenger.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1b2FSBWOdKPft7zfcRAW_gpPmYc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1b2FSBWOdKPft7zfcRAW_gpPmYc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1b2FSBWOdKPft7zfcRAW_gpPmYc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1b2FSBWOdKPft7zfcRAW_gpPmYc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/iDdqk/~4/O_UE_Z7vEw0" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/6330303207070027678?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/6330303207070027678?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/iDdqk/~3/O_UE_Z7vEw0/blog-post.html" title="태그 파일" /><author><name>DynamicPro</name><uri>http://www.blogger.com/profile/11966660154765054808</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://dreamchallenger.blogspot.com/2011/08/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8CR3ozeyp7ImA9WhdREkw.&quot;"><id>tag:blogger.com,1999:blog-4269806382658593631.post-4491007780731239351</id><published>2011-08-02T00:01:00.000+09:00</published><updated>2011-08-02T00:01:06.483+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-02T00:01:06.483+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Servlet" /><title>Servlet 오류 페이지</title><content type="html">&amp;lt;%@ page isErrorPage = "true"%&amp;gt;&lt;br /&gt;
&amp;lt;%@ page errorPage = "errorPage.jsp"%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DD &amp;lt;error-page&amp;gt; tag&lt;br /&gt;
&amp;nbsp;&amp;lt;exception-type&amp;gt; 이나 또는 HTTP 상태 &amp;lt;error-page&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;defalut error page&lt;br /&gt;
&amp;nbsp;&amp;lt;error-page&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;lt;exception-type&amp;gt;java.lang.Throwable&amp;lt;/exception-type&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;lt;location&amp;gt; /errorPage.jsp&amp;lt;/location&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;lt;/error-pgage&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;특정 예외 사항에 대한 오류 페이지&lt;br /&gt;
&amp;nbsp;&amp;lt;error-page&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;lt;exception-type&amp;gt; java.lang.ArithmeticException&amp;lt;/exception-type&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;lt;location&amp;gt;/arithmeticError.jsp&amp;lt;/location&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;lt;/error-page&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;lt;c:catch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;예외 사항이 실제 발생시 Exception 객체에 접근하는 방법은?&lt;br /&gt;
&amp;nbsp;실제 오류 페이지도 아니고 일반 JSP 라서 내장 객체인 exception을 쓸 수도 없다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;Exception을 속성으로 만든다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;lt;c:catch&amp;gt; 문 뒤에 Exception 객체를 다루고 싶으면 옵션 속성인 var를 사용&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;lt;c:catch var = "myException"&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;lt;c:catch&amp;gt; 자바의 catch 문이 아닌 try 문처럼 행동&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4269806382658593631-4491007780731239351?l=dreamchallenger.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/03TyxDbgtyGx4J4n_e_NZTAi0HQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/03TyxDbgtyGx4J4n_e_NZTAi0HQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/03TyxDbgtyGx4J4n_e_NZTAi0HQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/03TyxDbgtyGx4J4n_e_NZTAi0HQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/iDdqk/~4/WeYjNbyDGPY" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/4491007780731239351?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/4491007780731239351?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/iDdqk/~3/WeYjNbyDGPY/servlet.html" title="Servlet 오류 페이지" /><author><name>DynamicPro</name><uri>http://www.blogger.com/profile/11966660154765054808</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://dreamchallenger.blogspot.com/2011/08/servlet.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUAQXo_cCp7ImA9WhdREkw.&quot;"><id>tag:blogger.com,1999:blog-4269806382658593631.post-8988371275163696230</id><published>2011-08-01T23:50:00.000+09:00</published><updated>2011-08-01T23:50:40.448+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-01T23:50:40.448+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JAVA" /><title>JSTL 사용하기</title><content type="html">&amp;nbsp;막강한 커스텀 태그&lt;br /&gt;
&amp;nbsp;태그 라이브러리로 JSP 구축하기&lt;br /&gt;
&amp;nbsp;taglib 지시자 문법과 의미 설명 : 표준 tag library, tag library file 커스텀 태그 만드는 방법&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;lt;c:out&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;lt;c:out value = '${user}' default = 'guest' /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;lt;c:forEach&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;lt;c:if&amp;gt; &amp;lt;c:choose&amp;gt; &amp;lt;c:when&amp;gt; &amp;lt;c:otherwise&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;lt;jsp:setProperty&amp;gt; =&amp;gt; &amp;lt;c:set&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;lt;c:set var = "userLevel" scope = "sesssion" value = "cowboy"/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;빈과 맵에 &amp;lt;c:set&amp;gt; tag 사용하기&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;lt;c:set&amp;gt; 핵심 정리&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;var과 target을 동시에 사용할 수 없다.&lt;br /&gt;
&amp;nbsp;scope는 option 없으면 page&lt;br /&gt;
&amp;nbsp;value가 null var에 있는 속성 제거&lt;br /&gt;
var 이름으로 속성이 없으면 자동생성 value가 null이 아닐 경우&lt;br /&gt;
&amp;nbsp;target 표현식이 널이면, ㅋㄴ테이너는 예외사항을 던짐&lt;br /&gt;
&amp;nbsp;target에는 실제 객체를 표현하는 표현식이 들어가야 함&lt;br /&gt;
&amp;nbsp;target 표현식이 빈이나 맵이 아니면 컨테이너는 예외사항을 던짐&lt;br /&gt;
&amp;nbsp;target 표현식이 빈이고, 해당 빈에 property에 명기된 이름으로 된 property가 없다면 컨테이너는 예외사항을 던짐 EL 표현식 ${bean.notAproperty} 또한 예외 사항을 던짐&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;lt;c:remove&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;lt;c:import&amp;gt; JSTL tag&lt;br /&gt;
&amp;nbsp;&amp;lt;c:import url = ...... /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;포함할 컨텐츠 요리하기&lt;br /&gt;
&amp;nbsp;&amp;lt;c:param&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;lt;c:param name = "subtitle" value = "...../&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;lt;c:url&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;lt;c:url value = ' /inputAcomments.jsp'/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;커스텀 라이브러리를 사용하려면 TLD를 읽을 줄 알아라&lt;br /&gt;
&amp;nbsp;태그 이름과 문법&lt;br /&gt;
&amp;nbsp;라이브러리 URI&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4269806382658593631-8988371275163696230?l=dreamchallenger.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gTP2JKNMf9wh_EZ-fsLJau5p3Rw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gTP2JKNMf9wh_EZ-fsLJau5p3Rw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gTP2JKNMf9wh_EZ-fsLJau5p3Rw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gTP2JKNMf9wh_EZ-fsLJau5p3Rw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/iDdqk/~4/zNy_dugPKLw" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/8988371275163696230?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/8988371275163696230?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/iDdqk/~3/zNy_dugPKLw/jstl.html" title="JSTL 사용하기" /><author><name>DynamicPro</name><uri>http://www.blogger.com/profile/11966660154765054808</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://dreamchallenger.blogspot.com/2011/08/jstl.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MGQnY8cCp7ImA9WhdSFUQ.&quot;"><id>tag:blogger.com,1999:blog-4269806382658593631.post-7465478208021695005</id><published>2011-07-25T21:03:00.000+09:00</published><updated>2011-07-25T21:03:43.878+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-25T21:03:43.878+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JAVA" /><title>JAVA JFrame X button 클릭 시 이벤트 헨들</title><content type="html">&lt;pre&gt;public void &lt;b&gt;setDefaultCloseOperation&lt;/b&gt;(int&amp;nbsp;operation)&lt;/pre&gt;&lt;dl&gt;&lt;dd&gt;Sets the operation that will happen by default when the user initiates a "close" on this frame. You must specify one of the following choices:
&lt;ul&gt;&lt;li&gt;&lt;code&gt;DO_NOTHING_ON_CLOSE&lt;/code&gt;&amp;nbsp;(defined in&amp;nbsp;&lt;code&gt;WindowConstants&lt;/code&gt;): Don't do anything; require the program to handle the operation in the&amp;nbsp;&lt;code&gt;windowClosing&lt;/code&gt;&amp;nbsp;method of a registered&amp;nbsp;&lt;code&gt;WindowListener&lt;/code&gt;&amp;nbsp;object.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HIDE_ON_CLOSE&lt;/code&gt;&amp;nbsp;(defined in&amp;nbsp;&lt;code&gt;WindowConstants&lt;/code&gt;): Automatically hide the frame after invoking any registered&lt;code&gt;WindowListener&lt;/code&gt;&amp;nbsp;objects.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DISPOSE_ON_CLOSE&lt;/code&gt;&amp;nbsp;(defined in&amp;nbsp;&lt;code&gt;WindowConstants&lt;/code&gt;): Automatically hide and dispose the frame after invoking any registered&amp;nbsp;&lt;code&gt;WindowListener&lt;/code&gt;&amp;nbsp;objects.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;EXIT_ON_CLOSE&lt;/code&gt;&amp;nbsp;(defined in&amp;nbsp;&lt;code&gt;JFrame&lt;/code&gt;): Exit the application using the&amp;nbsp;&lt;code&gt;System&lt;/code&gt;&amp;nbsp;&lt;code&gt;exit&lt;/code&gt;&amp;nbsp;method. Use this only in applications.&lt;/li&gt;
&lt;/ul&gt;The value is set to&amp;nbsp;&lt;code&gt;HIDE_ON_CLOSE&lt;/code&gt;&amp;nbsp;by default.

DO_NOTHING_ON_CLOSE =&amp;gt; 아무 것도 안한다.
HIDE_ON_CLOSE =&amp;gt; 프레임을 감춘다.
DISPOSE_ON_CLOSE =&amp;gt; 프레임을 감추고 버린다. (그 프레임만 종료)
EXIT_ON_CLOSE =&amp;gt; 프로그램 자체를 끈다 (모든 프레임을 종료)

이 상수를 쓸 시에는 JFrame. 을 앞에 붙여야 한다.

JFrame의 상수이기 때문이다.&lt;/dd&gt;&lt;/dl&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4269806382658593631-7465478208021695005?l=dreamchallenger.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RgeiNYIuhkUrf8OJBlJBUqVeHqk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RgeiNYIuhkUrf8OJBlJBUqVeHqk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RgeiNYIuhkUrf8OJBlJBUqVeHqk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RgeiNYIuhkUrf8OJBlJBUqVeHqk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/iDdqk/~4/0Bxzot14sQs" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/7465478208021695005?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4269806382658593631/posts/default/7465478208021695005?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/iDdqk/~3/0Bxzot14sQs/java-jframe-x-button.html" title="JAVA JFrame X button 클릭 시 이벤트 헨들" /><author><name>DynamicPro</name><uri>http://www.blogger.com/profile/11966660154765054808</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://dreamchallenger.blogspot.com/2011/07/java-jframe-x-button.html</feedburner:origLink></entry></feed>

