約 2,881,089 件
https://w.atwiki.jp/api_programming/pages/111.html
参考サイト Swingを使ってみよう - JavaDrive Swing - とほほのJava入門 下位ページ Content イベント処理の流れと実装 イベント処理部品と処理先のひも付け イベント処理の方法 レイアウト ダイアログを簡単に表示する イベント処理の流れと実装 流れ ボタンが押される イベントが発行される イベントを受け取るボタン側にaddActionListenerメソッドを実行(処理する「クラス」を登録する) 登録するクラスは、ActionListerクラスをインプリメント登録するクラスの中で、actionPerformedメソッドを実装 処理を実行する イベント処理 http //www.javadrive.jp/tutorial/event/index1.html https //docs.oracle.com/javase/jp/6/api/java/awt/event/ActionEvent.html 部品と処理先のひも付け addActionListerで処理するクラスを登録する登録するクラスはActionListenerクラスをimplementsしていること 登録するクラスはactionPerformedメソッドを実装していること イベント処理の方法 ActionListenerをimplementsしたクラスで、actionPerformedをオーバーライドする。 actionPerformed(ActionEvent e) 複数のボタンなどの部品に対して、一つのクラスでイベント処理をする場合には、どの部品から呼びだされたイベントかを識別する方法について処理する方法を記述する必要がある。 String str = actionevent.getActionCommand(); レイアウト レイアウトマネージャーの設定 - JavaDrive http //www.ne.jp/asahi/hishidama/home/tech/java/swing/layout.html ダイアログを簡単に表示する JOptionPane JOptionPane static で shorMessageDialogというものが準備されている
https://w.atwiki.jp/javafx/pages/23.html
Hello,World import javafx.ui.*; [[Frame]] { title "Hello World JavaFX" width 200 height 50 content Label { text "Hello World JavaFX" } visible true } trackback()
https://w.atwiki.jp/ce00582/pages/3780.html
import java.awt.*; import java.awt.event.*; class game0711 extends Frame implements Runnable,MouseListener{ int t; int mode; Image img1; Image off; Graphics offsc; int coin; String s[]=new String[100]; public static void main(String [] args) { Frame f=new game0711(); f.setTitle("game0711"); f.setSize(500,600); f.setBackground(Color.white); f.setVisible(true); } game0711(){ s[0]="0"; s[1]="a"; s[2]="bc"; s[3]="def"; s[4]="ghij"; s[5]="klmno"; s[6]="pqrstu"; addMouseListener(this); img1 = Toolkit.getDefaultToolkit().getImage("0219.jpg"); t=0; Thread th=new Thread(this); th.start(); addWindowListener(new stopwin()); } class stopwin extends WindowAdapter{ public void windowClosing(WindowEvent we){System.exit(0);} } public void run(){ t=0; mode=0; coin=0; while(t 100){ mode=mode+1; if(mode 6)mode=0; coin=0; repaint(); try{ Thread.sleep(1000); }catch(InterruptedException e){} t=t+1; } } public void update(Graphics g){ paint(g); } public void paint(Graphics g){ off = createImage(500,600); offsc = off.getGraphics(); offsc.drawImage(img1,0,0,500,500,this); offsc.setColor(Color.white); offsc.fillRect(0,500,500,100); offsc.drawImage(img1,0,500,100,100,this); offsc.setColor(Color.black); if(mode==0)offsc.drawString(s[0],100,500); if(mode==1)offsc.drawString(s[1],100,500); if(mode==2)offsc.drawString(s[2],100,500); if(mode==3)offsc.drawString(s[3],100,500); if(mode==4)offsc.drawString(s[4],100,500); if(mode==5)offsc.drawString(s[5],100,500); if(mode==6)offsc.drawString(s[6],100,500); g.drawImage(off,0,0,this); } public void mouseEntered(MouseEvent e){ } public void mouseExited(MouseEvent e){ } public void mousePressed(MouseEvent e){ } public void mouseReleased(MouseEvent e){ } public void mouseClicked(MouseEvent e){ double ex,ey; ey=e.getY() ; ex=e.getX(); if (ey 550)coin=1; if(ey 550)coin=2; } }
https://w.atwiki.jp/ce00582/pages/1428.html
class pro{ public static void main(String args[]){ double a; double beta; double ks; double h; double th[]=new double[11]; double k[]=new double[101]; double cx[][]=new double[11][101]; double cxs[][]=new double[11][101]; double lx[][]=new double[11][101]; double lxs[][]=new double[11][101]; double px[][]=new double[11][101]; double pxs[][]=new double[11][101]; double k1; double n1; int n2; int n3; int n; double c1; double r1; double ep; double ls; double l1; double w1; int t; int m; int mx; int t1; int t2; double uc; double ms; double pi; double p1; double p2; double p3; double pc; double i1; double dp; double z1; double z2; for (m=1;m 11;m++){ th[m]=0.95+0.01*m; } a=0.33; beta=0.95; ls=(1-a)/(2-a); ks=ls*Math.pow((1 / beta - 1) / a , 1 / (a - 1)); h=2*ks/100; for (n=1;n 101;n++){ k[n]=n*h; for (m=1;m 11;m++){ lx[m][n]=ls; cx[m][n]=th[m]*Math.pow(k[n],a)*Math.pow(lx[m][n],1-a); } } t=0; while(t 100){ for (m=1;m 11;m++){ for (n=10;n 91;n++){ k1=k[n]+th[m]*Math.pow(k[n],a)*Math.pow(lx[m][n],1-a)-cx[m][n]; n1=k1/h; n2=(int)n1; n3=n2+1; uc=0; for (mx=1;mx 11;mx++){ c1=cx[mx][n2]+(n1-n2)*(cx[mx][n3]-cx[mx][n2]); l1=lx[mx][n2]+(n1-n2)*(lx[mx][n3]-lx[mx][n2]); r1=th[mx]*a*Math.pow(k1,a-1)*Math.pow(l1,1-a); uc=uc+(beta*(1+r1))/c1; } uc=0.1*uc; cxs[m][n]=1/uc; w1=th[m]*(1-a)*Math.pow(k[n],a)*Math.pow(lx[m][n],-a); lxs[m][n]=1-cx[m][n]/w1; } } ep=0; for (m=1;m 11;m++){ for (n=10;n 91;n++){ ep=ep+Math.pow(cx[m][n]-cxs[m][n],2)+Math.pow(lx[m][n]-lxs[m][n],2); } } for (m=1;m 11;m++){ for (n=10;n 91;n++){ cx[m][n]=cxs[m][n]; lx[m][n]=lxs[m][n]; } } if (ep 0.0001)t=1000; t=t+1; } ms=20; for (m=1;m 11;m++){ for (n=10;n 91;n++){ px[m][n]=1; } } t2=0; while(t2 1000){ for (m=1;m 11;m++){ for (n=10;n 91;n++){ p1=1.05*px[m][n]; p2=0.95*px[m][n]; k1=k[n]+th[m]*Math.pow(k[n],a)*Math.pow(lx[m][n],1-a)-cx[m][n]; n1=k1/h; n2=(int)n1; n3=n2+1; dp=0; for (mx=1;mx 11;mx++){ l1=lx[mx][n2]+(n1-n2)*(lx[mx][n3]-lx[mx][n2]); r1=th[mx]*a*Math.pow(k1,a-1)*Math.pow(l1,1-a); c1=cx[mx][n2]+(n1-n2)*(cx[mx][n3]-cx[mx][n2]); pc=px[mx][n2]+(n1-n2)*(px[mx][n3]-px[mx][n2]); pi=pc/p1-1; i1=(1+r1)*(1+pi)-1; dp=dp+i1*ms*beta/(c1*(1+pi)); } dp=0.1*dp; z1=dp-p1; t1=0; while (t1 100){ dp=0; for (mx=1;mx 11;mx++){ l1=lx[mx][n2]+(n1-n2)*(lx[mx][n3]-lx[mx][n2]); r1=th[mx]*a*Math.pow(k1,a-1)*Math.pow(l1,1-a); c1=cx[mx][n2]+(n1-n2)*(cx[mx][n3]-cx[mx][n2]); pc=px[mx][n2]+(n1-n2)*(px[mx][n3]-px[mx][n2]); pi=pc/p2-1; i1=(1+r1)*(1+pi)-1; dp=dp+i1*ms*beta/(c1*(1+pi)); } dp=0.1*dp; z2=dp-p2; p3=p2-z2*(p2-p1)/(z2-z1); z1=z2; p1=p2; p2=p3; if (z2*z2 0.001){ t1=1000; } t1=t1+1; } pxs[m][n]=p2; } } ep=0; for (m=1;m 11;m++){ for (n=10;n 91;n++){ ep=ep+Math.pow(px[m][n]-pxs[m][n],2); } } System.out.println(ep); for (m=1;m 11;m++){ for (n=10;n 91;n++){ px[m][n]=pxs[m][n]; } } if (ep 0.0001)t2=10000; t2=t2+1; } } }
https://w.atwiki.jp/takejava/pages/19.html
BufferStrategyについての考察です。 こういう問題が発生したときの対処法はこうだ、という内容になるかと思います。 また、フルスクリーン化との問題も絡む場合があるのでその辺の内容も書ければと思います。 BufferStrategyというものが便利そうだぞ、ということで、 とりあえず使ってみた方は何人かはいるでしょう(私はそうでした)。 私は、ゲームを作り始めた当初は全く存在を知らなかったので、 バッファイメージの取得からフラッシュまで、1からコードを書いていました。 結局のところ、BufferStrategyはそいうったソースが煩雑になりがちな面倒な部分をすべて受け持ってくれるクラスなのです。 ただ、便利だからと言って、使い方を間違える、もしくは、知らないことがあると、どつぼにハマり、 もういやだ!二度と使うもんか!なんてことにもなってしまう可能性を秘めています。 例えば、以下のようなエラーがでたりします(でなかったとしてもそれはたまたま動いてるだけの可能性もあるので注意です)。 エラーの例1) Exception in thread "main" java.lang.IllegalStateException Component must have a valid peer at java.awt.Component$FlipBufferStrategy.createBuffers(Component.java 3981) at java.awt.Component$FlipBufferStrategy. init (Component.java 3955) at java.awt.Component$FlipSubRegionBufferStrategy. init (Component.java 4478) at java.awt.Component.createBufferStrategy(Component.java 3832) at java.awt.Canvas.createBufferStrategy(Canvas.java 194) at java.awt.Component.createBufferStrategy(Component.java 3755) at java.awt.Canvas.createBufferStrategy(Canvas.java 169) at Main. init (Main.java 80) at Main.main(Main.java 37) さぁ、このエラーのストックトレースを冷静に見られる方はいるでしょうか。 これはソース上では、キャンバスのインスタンスがcreateBufferStrategy()メソッドを呼び出しているだけなので、一見なにが悪いのかが分かりません。 ここで何も知らない人はどこをどう修正したらいいのか分からないので、ハングアップしてしまうでしょう。 すべてのエラーに対して言えることですが、 デバッグの基本はまず、自分のソースを疑うことです(基本パッケージのバグはほとんどないと思ったほうがいいという意味です、が全くないとも言えなかったりします)。 このエラーの場合は、呼び出すタイミングが怪しいと推測するのが正しいでしょう。 注目すべきは一行目の「Component must have a valid peer」という文言です。 わざわざこのように吐き出されているのです。注目せざるを得ません。 peerを確認しろ、peerが生成できてないですよ、peerが確定していませんよ、と言っています(ちなみにpeer確定問題などと言うようです)。 peerとは・・・と、語ってみたいところですが、そこまで知る必要はない、と言いますか、 そこまで調べていたらとても本筋のゲームプログラミングが進みそうにないということで、やめることにします。 今、重要なのは如何にしてこの問題を解決するか、ということにして逃げたいと思います。 さて、エラー内容、問題が把握できたところで、 じゃぁ、peerを確定すればいいのか!?いつ確定するものなんだ!?ということになると思います。 後者の、「いつ確定するか」を把握できれば、この問題は解決します。 peerはプログラマーが生成するようなものではなく、 javaシステムがOSに相談を持ちかけて作られるもの、そんなイメージでよいでしょう。 そしてこの問題については別の観点も必要のようです。・・つづく? 追記 ここからはソースをみて、触って理解に努めてください。つまり丸投げです、すいません。 下のソースをダブルクリックして、コピって、Eclipseなどにペして動かしてみてください。 とりあえずは正常に動くはずです。 クラス名は「Main」というありがちな名前でつけちゃったので、他のソースとぶつからないように新しいクラスを作ってくださいね。 ソース内容についてですが、Swing触ったことのある方なら、つっこみをいれたくなると思います。 そうです。EDTを使っていません。 これが、大元にして、かつ、わかりにくく、そして誰しもがぶつかる壁でもあります。 peer 窓 可視化 Graphics レイアウト サイズ この辺のキーワードはかなりデリケートだったりします。 大体つまづくのがこの辺の問題で、そして、あきらめてしまうのもこの辺の問題だったりします。 がんがりまそう! 遊び方としては、まず全体の流れをざっとみて、コメントを固まり単位で外したり、setvisibleしなかったり、したり、packしたりしなかったりしてみてください。それからSwingとAWTの併用の恐さも体験できるやもしれません。 結局のところ、以下のあたりにきをつければ間違いないはずです。 setVisible(true)のタイミングに気をつける setVisible含め、Swingの描画関係、もう全部でもいいぐらいですが、EDTスレッドでやるようにする setVisibleのあとにグラフィックスの取得をする そして、こんな感じに順番を守ればよいと思います。 画面の生成 画面の可視化 そしてゲーム処理 あとSwingコンポーネントの上(画面手前)にAWTは乗せないほうが良いというか、乗せれない?感じなのと、その逆も若干バグがでることもあるので気をつけたいところです。 html2 plugin Error このプラグインで利用できない命令または文字列が入っています。
https://w.atwiki.jp/sylx/pages/35.html
VMのインストール確認 Google App Engine で Hello World!
https://w.atwiki.jp/yukobayashi/pages/34.html
java htmlparser sample code import static java.util.Collections.emptyList; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.SocketTimeoutException; import java.net.URL; import java.net.URLEncoder; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.htmlparser.Node; import org.htmlparser.NodeFilter; import org.htmlparser.Parser; import org.htmlparser.filters.TagNameFilter; import org.htmlparser.filters.HasAttributeFilter; import org.htmlparser.filters.AndFilter; import org.htmlparser.util.NodeList; import org.htmlparser.util.ParserException; public class htmlparser { public static void main(String[] args){ NodeFilter FILTER = new TagNameFilter ("span"); HasAttributeFilter GOODFILTER = new HasAttributeFilter("class","goodtag1"); HasAttributeFilter BADFILTER = new HasAttributeFilter("class","badtag1"); NodeList spanList = null; NodeList goodList = null; NodeList badList = null; AndFilter andgoodfilter = new AndFilter(FILTER,GOODFILTER); AndFilter andbadfilter = new AndFilter(FILTER,BADFILTER); Parser parser = new Parser (); String testhtml = " span class=\"goodtag1\" いい /span span class=\"badtag1\" 欲しい /span span 欲しい /span "; try{ parser.setResource(testhtml); //spanList = parser.parse(FILTER); goodList = parser.parse(andgoodfilter); badList = parser.parse(andbadfilter); } catch (ParserException e){ e.printStackTrace(); } Node[] nodes = goodList.toNodeArray(); List String outList= new ArrayList String (); for(int i=0;i nodes.length; i++){ outList.add(nodes[i].getFirstChild().getText()); } System.out.println(outList); } }
https://w.atwiki.jp/maisenakajima/pages/35.html
javaサンプルプログラムバイナリファイルを作成する Which char型配列の値を比較する XML ファイルを DOMによって操作する 半角文字(半角英数字、半角記号、半角カタカナ)を全角文字に変換作成する 入力されたIPアドレス(IpV4)を0埋めされた IPアドレス表記に変換する javaサンプルプログラム バイナリファイルを作成する import java.io.FileOutputStream; import java.io.BufferedOutputStream; public class WriteBynaryTest { /** * @param args */ public static void main(String[] args) { // 改行用の変数 byte[] newline = new byte[]{ (byte)0x0D, (byte)0x00, (byte)0x0A, (byte)0x00 }; try { BufferedOutputStream out = new BufferedOutputStream( new FileOutputStream("testoutFile.dat")); // BOM(Byte Order Mark) の書き込み out.write(new byte[]{(byte)0xFF,(byte)0xFE}); // 2バイト/1文字 X 16文字 byte[] tmpbyte = new byte[2]; // "\uE000" から "\uF8FF" まで for( int i = 0xE0 ; i = 0xF8; i++) { for(int j = 0; j = 0xFF; j++) { if( (j 0) (j % 16 == 0) ) { // 改行 out.write(newline); out.flush(); } // リトルエンディアンで書き込む tmpbyte[0] = (byte)j; tmpbyte[1] = (byte)i; out.write(tmpbyte); } // 改行 out.write(newline); out.write(newline); out.flush(); } out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } } } Which import java.io.File; public class Which { /** * @param args */ public static void main(String[] args) { if( args.length == 0 ) { System.out.println( " Usage java Which programname " ); System.exit( 1 ); } String programName = args[0]; boolean isExistsProgram = false; // メモ // Unix系とWindows系では、環境変数"PATH"のつづりが異なる。 // - Unix系 :"PATH" // - Wndows系:"Path" // Windowsでは、ファイル名、環境変数の大文字小文字は無視するので、"PATH"で取得すれば、 // 環境変数"Path"の値が取得できる。 String envPath = System.getenv( "PATH" ); String envPaths[] = envPath.split( File.pathSeparator ); String concatPath = new String(); for( String dir envPaths ) { if( ( dir.endsWith(File.separator) ) == false ) { dir = dir + File.separator; } concatPath = dir + programName; File checkExistFile = new File( concatPath ); if( checkExistFile.exists() ) { System.out.println( checkExistFile ); isExistsProgram = true; break; } } if( isExistsProgram == false ) { System.out.println( "no " + programName + " in (" + envPath + ")" ); } } } char型配列の値を比較する package hello.com; public class Helloworld { /** * @param args */ public static void main(String[] args) { char[] officeCodeA = { Z , A }; char[] officeCodeB = { Z , A }; char[] officeCodeC = { Z , B }; char[] officeCodeD = { Z , A , B }; char[] officeCodeE = { Z }; // 表示用変数 String strOfficeCodeA = new String( officeCodeA ); String strOfficeCodeB = new String( officeCodeB ); String strOfficeCodeC = new String( officeCodeC ); String strOfficeCodeD = new String( officeCodeD ); String strOfficeCodeE = new String( officeCodeE ); // 文字列比較簡易版 System.out.println( "( " + strOfficeCodeA + " )" + " - " + "( " + strOfficeCodeB + " ) " + easyCompareCharArray( officeCodeA, officeCodeB ) ); System.out.println( "( " + strOfficeCodeA + " )" + " - " + "( " + strOfficeCodeC + " ) " + easyCompareCharArray( officeCodeA, officeCodeC ) ); System.out.println( "( " + strOfficeCodeA + " )" + " - " + "( " + strOfficeCodeD + " ) " + easyCompareCharArray( officeCodeA, officeCodeD ) ); System.out.println( "( " + strOfficeCodeA + " )" + " - " + "( " + strOfficeCodeE + " ) " + easyCompareCharArray( officeCodeA, officeCodeE ) ); System.out.println("-------------------------------------------------"); System.out.println( "( " + strOfficeCodeA + " )" + " - " + "( " + strOfficeCodeB + " ) " + compareCharArray( officeCodeA, officeCodeB, officeCodeA.length ) ); System.out.println( "( " + strOfficeCodeA + " )" + " - " + "( " + strOfficeCodeC + " ) " + compareCharArray( officeCodeA, officeCodeC, officeCodeA.length ) ); System.out.println( "( " + strOfficeCodeA + " )" + " - " + "( " + strOfficeCodeD + " ) " + compareCharArray( officeCodeA, officeCodeD, officeCodeA.length ) ); } // 文字列比較簡易版 public static int easyCompareCharArray(char[] charRef, char[] charDif) { String strRef = new String( charRef ); String strDif = new String( charDif ); return strRef.compareTo( strDif ); } // 文字列の長さが同じ場合の比較関数 public static int compareCharArray(char[] charRef, char[] charDif, int compareSize) { int indexA = 0; int indexB = 0; int returnValue = 0; int ref_lastIndex = compareSize - 1; int dif_lastIndex = compareSize - 1; for( ; charRef[indexA] == charDif[indexB]; indexA++, indexB++) { // 比較元char配列、もしくは、比較先char配列の終端に達した。 if( (indexA == ref_lastIndex) || (indexB == dif_lastIndex) ) { break; } } returnValue = charRef[indexA] - charDif[indexB]; return returnValue; } } XML ファイルを DOMによって操作する //以下のようなXML文書を想定 // ?xml version="1.0" encoding="UTF-8"? // MyBrowser version="1.0" // MyBrowserAuth // AuthList // Opera // ReferrenceAuth true /ReferrenceAuth // SearchAuth true /SearchAuth // InsertAuth true /InsertAuth // PrintAuth true /PrintAuth // /Opera // Firefox // ReferrenceAuth true /ReferrenceAuth // SearchAuth false /SearchAuth // InsertAuth true /InsertAuth // PrintAuth false /PrintAuth // /Firefox // /AuthList // /MyBrowserAuth // /MyBrowser import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; //import javax.xml.parsers.FactoryConfigurationError; import javax.xml.parsers.ParserConfigurationException; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; //import org.w3c.dom.DOMException; // For write operation import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpression; import javax.xml.xpath.XPathFactory; import java.io.*; public class AuthXmlEdit { // Global value so it can be ref d by the tree-adapter // static Document document; public AuthXmlEdit() { } protected String[] strAuthTagName = { "ReferrenceAuth", "SearchAuth", "InsertAuth", "PrintAuth" }; public static final String strOneTab = "\t"; public static final String strTwoTab = "\t\t"; public static final String strThreeTab = "\t\t\t"; public static final String strFourTab = "\t\t\t\t"; public static final String strFiveTab = "\t\t\t\t\t"; public static void main (String argv []) { if (argv.length != 1) { System.err.println ("Usage java TransformationApp filename"); System.exit (1); } // DocumentBuilderFactory の新しいインスタンスを取得します。 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); //factory.setNamespaceAware(true); //factory.setValidating(true); try { File f = new File(argv[0]); AuthXmlEdit authXmlEdit = new AuthXmlEdit(); // DocumentBuilder の新しいインスタンスを作成します DocumentBuilder builder = factory.newDocumentBuilder(); // 指定されたファイルの内容を XML ドキュメントとして構文解析し、新しい DOM オブジェクトを返します。 Document document = builder.parse(f); System.out.println("---------------------"); authXmlEdit.printAuth( document ); System.out.println("---------------------"); try { // XPATH テスト XPathFactory xPathFactory = XPathFactory.newInstance(); XPath xpath = xPathFactory.newXPath(); XPathExpression xPathExpr = xpath.compile("/MyBrowser/MyBrowserAuth/AuthList/Opera/ReferrenceAuth/text()"); Object result = xPathExpr.evaluate(document, XPathConstants.NODESET); NodeList nodes = (NodeList) result; System.out.println(" before "); for (int i = 0; i nodes.getLength(); i++) { System.out.println(nodes.item(i).getNodeValue()); } System.out.println(" set "); nodes.item(0).setNodeValue("12334"); System.out.println(nodes.item(0).getNodeValue()); result = xPathExpr.evaluate(document, XPathConstants.NODESET); nodes = (NodeList) result; System.out.println(" after evaluate "); for (int i = 0; i nodes.getLength(); i++) { System.out.println(nodes.item(i).getNodeValue()); } String str = xpath.evaluate("/MyBrowser/MyBrowserAuth/AuthList/Opera/ReferrenceAuth/text()", document ); System.out.println("str " + str ); //XPathExpression expr = xpath.compile("//MyBrowser/MyBrowserAuth/AuthList/Opera/ReferrenceAuth/text()"); } catch ( Exception ex ) { ex.printStackTrace(); } // Use a Transformer for output TransformerFactory tFactory = TransformerFactory.newInstance(); Transformer transformer = tFactory.newTransformer(); DOMSource source = new DOMSource(document); StreamResult result = new StreamResult(System.out); transformer.transform(source, result); } catch (TransformerConfigurationException tce) { // Error generated by the parser System.out.println ("\n** Transformer Factory error"); System.out.println(" " + tce.getMessage() ); // Use the contained exception, if any Throwable x = tce; if (tce.getException() != null) x = tce.getException(); x.printStackTrace(); } catch (TransformerException te) { // Error generated by the parser System.out.println ("\n** Transformation error"); System.out.println(" " + te.getMessage() ); // Use the contained exception, if any Throwable x = te; if (te.getException() != null) x = te.getException(); x.printStackTrace(); } catch (SAXParseException spe) { // Error generated by the parser System.out.println("\n** Parsing error" + ", line " + spe.getLineNumber() + ", uri " + spe.getSystemId()); System.out.println(" " + spe.getMessage() ); // Use the contained exception, if any Exception x = spe; if (spe.getException() != null) x = spe.getException(); x.printStackTrace(); } catch (SAXException sxe) { // Error generated by this application // (or a parser-initialization error) Exception x = sxe; if (sxe.getException() != null) x = sxe.getException(); x.printStackTrace(); } catch (ParserConfigurationException pce) { // Parser with specified options can t be built pce.printStackTrace(); } catch (IOException ioe) { // I/O error ioe.printStackTrace(); } } // main protected void printAuth( Document document ) { int intTabStep = 0; // 文書の文書要素になっている子ノードへの直接アクセスを可能にする便利な属性です。 Element root = document.getDocumentElement(); String name = root.getNodeName(); System.out.println( "ノード名 " + name ); // このノードの子をすべて含む NodeList です。子が存在しない場合、ノードを持たない NodeList が返されます。 //NodeList childNodeLists = root.getChildNodes(); intTabStep += 1; printAuthDetail( root, intTabStep ); } // protected void printAuthDetail( Node node ) { protected void printAuthDetail( Node node, int intTabStep ) { NodeList childNodeList = node.getChildNodes(); int count = childNodeList.getLength(); for(int i=0; i count; i++){ Node childNode = childNodeList.item( i ); String nodeName = childNode.getNodeName(); String nodeValue = childNode.getNodeValue(); String strTab = ""; // 要素ノードの場合 if( childNode.getNodeType() == Node.ELEMENT_NODE ){ strTab = makeTabString( intTabStep ); System.out.print( strTab ); System.out.println("ノード名 " + nodeName); // 下の階層に行くため、タブの数を増やす。 intTabStep += 1; // 再帰呼び出し printAuthDetail( childNode, intTabStep ); intTabStep -= 1; //printAuthDetail(childNode); } // テキストノードの場合 if( childNode.getNodeType() == Node.TEXT_NODE ){ //System.out.println("ノード名 " + nodeName); //System.out.println("ノード値 " + nodeValue); boolean isParentAuthNode = isAuthNode( childNode ); if( isParentAuthNode ) { strTab = makeTabString( intTabStep ); System.out.print( strTab ); System.out.println("ノード値 " + nodeValue); } } } } protected boolean isAuthNode( Node node ) { // 親ノードが、以下の要素ノードの場合のみ、true // - ReferrenceAuth // - SearchAuth // - InsertAuth // - PrintAuth boolean isParentAuthNode = false; Node parentNode = node.getParentNode(); String strParentNodeName = parentNode.getNodeName(); for( int i = 0; i strAuthTagName.length; i++ ) { if( strAuthTagName[i].equals(strParentNodeName) ) { isParentAuthNode = true; break; } } return isParentAuthNode; } protected String makeTabString( int intTabStep ) { String strTab = ""; switch( intTabStep ) { case 1 strTab = strOneTab; break; case 2 strTab = strTwoTab; break; case 3 strTab = strThreeTab; break; case 4 strTab = strFourTab; break; case 5 strTab = strFiveTab; break; default // 何もしない break; } return strTab; } // 参考URL // http //www.technotype.net/tutorial/tutorial.php?fileId={DOM} sectionId={traversing-the-node-tree} } 半角文字(半角英数字、半角記号、半角カタカナ)を全角文字に変換作成する import java.util.HashMap; public class HalfwidthConvertTest { private static HashMap String, String mapKatakanaToFullWidth = null; /** * @param args */ public static void main( String[] args ) { // 半角カタカナから全角カタカナ変換マップの作成 // 参考URL // http //pgcafe.moo.jp/JAVA/string/main_1.htm HalfwidthConvertTest.mapKatakanaToFullWidth = new HashMap String, String (); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ア", "ア" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "イ", "イ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ウ", "ウ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "エ", "エ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "オ", "オ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "カ", "カ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "キ", "キ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ク", "ク" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ケ", "ケ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "コ", "コ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "サ", "サ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "シ", "シ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ス", "ス" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "セ", "セ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ソ", "ソ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "タ", "タ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "チ", "チ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ツ", "ツ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "テ", "テ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ト", "ト" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ナ", "ナ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ニ", "ニ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ヌ", "ヌ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ネ", "ネ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ノ", "ノ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ハ", "ハ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ヒ", "ヒ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "フ", "フ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ヘ", "ヘ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ホ", "ホ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "マ", "マ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ミ", "ミ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ム", "ム" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "メ", "メ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "モ", "モ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ヤ", "ヤ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ユ", "ユ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ヨ", "ヨ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ワ", "ワ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ヲ", "ヲ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ン", "ン" ); // 小書き文字 HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ァ", "ァ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ィ", "ィ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ゥ", "ゥ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ェ", "ェ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ォ", "ォ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ャ", "ャ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ョ", "ョ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ュ", "ュ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ッ", "ッ" ); // 濁音のカタカナ HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ガ", "ガ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ギ", "ギ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "グ", "グ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ゲ", "ゲ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ゴ", "ゴ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ザ", "ザ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ジ", "ジ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ズ", "ズ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ゼ", "ゼ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ゾ", "ゾ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ダ", "ダ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ヂ", "ヂ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ヅ", "ヅ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "デ", "デ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ド", "ド" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "バ", "バ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ビ", "ビ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ブ", "ブ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ベ", "ベ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ボ", "ボ" ); // 半濁音のカタカナ HalfwidthConvertTest.mapKatakanaToFullWidth.put( "パ", "パ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ピ", "ピ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "プ", "プ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ペ", "ペ" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "ポ", "ポ" ); // 記号 HalfwidthConvertTest.mapKatakanaToFullWidth.put( "「", "「" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "」", "」" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "、", "、" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "。", "。" ); HalfwidthConvertTest.mapKatakanaToFullWidth.put( "・", "・" ); String strTarget = " !\"#$% ()*+,-./0123456789 ; = ?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; executeTest( strTarget ); strTarget = "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨワヲンァィゥェォャョュッガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ「」、。・"; executeTest( strTarget ); } private static void executeTest( String strBeforeString ) { System.out.println( "変換前 " + strBeforeString ); String afterString = convertToFullWidth( strBeforeString ); System.out.println( "変換後 " + afterString ); } // 参考URL // Java:全角数字を半角数字へ変換する方法 // http //write-remember.com/program/java/changenumfulltohalf/ // 全角半角変換(英数字の場合) // http //ameblo.jp/archive-redo-blog/entry-10376390355.html // 半角文字のみ、全角文字に変換する。 // それ以外の文字は変更しない。 private static String convertToFullWidth( String strTarget ) { StringBuffer sb = new StringBuffer(); int intTargetWordCount = strTarget.length(); for ( int i = 0; i intTargetWordCount; i++ ) { int intTarget = ( int )strTarget.charAt( i ); char charTarget = strTarget.charAt( i ); // " "(0x0020 半角空白 SPACE)の場合は、" "(0x3000 全角空白 IDEOGRAPHIC SPACE)に置き変える。 if( intTarget == ) { sb.append( ); continue; } // 半角英数字かどうかのチェック // "!"(0x21 感嘆符 EXCLAMATION MARK)から"~"(0x7E チルダ TILDE)の間の文字の場合は、 // 全角文字に変換する。 else if( (intTarget = ! ) (intTarget = 0x7E) ) { charTarget = ( char )( intTarget + 0xFEE0 ); intTarget = intTarget + 0xFEE0; sb.append( charTarget ); continue; } else { String strCovertTarget = String.valueOf( charTarget ); // 半角句読点、半角カタカナ、半角濁点、半角半濁点かどうかのチェック // // "。"(0xFF61 半角句点 HALFWIDTH IDEOGRAPHIC FULL STOP)から // "゚"(0xFF9F 半角半濁点 HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK) // の間の文字かどうかで判別できる。 // これらの文字は、"Halfwidth and Fullwidth Forms" ブロックに文字が配置されている。 if( intTarget = 。 intTarget = ゚ ) { // 最終文字から1文字前までの文字かどうかのチェック。 // (最終文字の場合は、次の文字は存在しない) if( i = (intTargetWordCount - 2) ) { // 次の文字が濁音("゙")か半濁音("゚")の場合は、次の文字とあわせて // 1文字と考える。 char charNextTarget = strTarget.charAt( i + 1 ); if( charNextTarget == ゙ || charNextTarget == ゚ ) { // 半角カタカナ + 濁音("゙")か半濁音("゚") で 2文字なので、 // 新しいchar配列を作成し、String文字列に変換する char[] charTestTarget = new char[2]; charTestTarget[0] = charTarget; charTestTarget[1] = charNextTarget; strCovertTarget = String.valueOf( charTestTarget ); // 濁音("゙")か半濁音("゚")のみの全角文字は存在しないので、 // 濁音("゙")か半濁音("゚")の次の文字に進めるための準備。 i++; } } if( mapKatakanaToFullWidth.containsKey(strCovertTarget) ) { // 半角カタカナに対応する全角カタカナの文字を取得する strCovertTarget = mapKatakanaToFullWidth.get( strCovertTarget ); } // 返却用文字列に追加する。 sb.append( strCovertTarget ); } } } return sb.toString(); } } // Unicode Normalization Forms // http //www.unicode.org/reports/tr15/ 入力されたIPアドレス(IpV4)を0埋めされた IPアドレス表記に変換する package hello.com; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Helloworld { public static void main(String[] args) { paddingIPV4(); } public static void paddingIPV4() { // IPアドレス(IPV4)の正規表現 String IPV4Pattern = "((1?\\d\\d?|2[0-4]\\d|25[0-5])\\.){3}(1?\\d\\d?|2[0-4]\\d|25[0-5])"; Pattern pattern = Pattern.compile(IPV4Pattern); Scanner scanner = new Scanner(System.in); String inputString; while (true) { System.out.print("サーバーのIPアドレス(IPv4)を入力してください "); inputString = scanner.nextLine(); Matcher matcher = pattern.matcher(inputString); boolean isMatch = matcher.matches(); if (isMatch) { break; } else { System.out.print("入力形式に誤りがあります"); } } scanner.close(); // 入力したIPアドレスを "."文字で分割 String[] ipV4_Parts = inputString.split("\\."); // いったん、3桁の文字列(3桁に満たない場合は半角空白で)整形する String oneSegment = String.format("%3s", ipV4_Parts[0]); String twoSegment = String.format("%3s", ipV4_Parts[1]); String threeSegment = String.format("%3s", ipV4_Parts[2]); String fourSegment = String.format("%3s", ipV4_Parts[3]); // 半角空白文字を 0 に変換 oneSegment = oneSegment.replace(" ", "0"); twoSegment = twoSegment.replace(" ", "0"); threeSegment = threeSegment.replace(" ", "0"); fourSegment = fourSegment.replace(" ", "0"); // 0埋めした文字列を再連結 String paddingIpV4 = oneSegment + "." + twoSegment + "." + threeSegment + "." + fourSegment; System.out.println("0埋めした IPV4アドレス " + paddingIpV4); // 参考資料 // - 【Java】文字列のパディング // https //qiita.com/kikkutonton/items/400dcfc343864028800e } } // Java:ゼロ埋め、半角スペース埋めする方法 // http //write-remember.com/program/java/format/
https://w.atwiki.jp/fumimemo/pages/26.html
Jarファイル
https://w.atwiki.jp/memojava/pages/12.html
目次 目次 インストール 環境 Struts1.3.8 iBATIS + ABATOR Spring2 + Spring IDE プロジェクト準備 jarファイルの準備 フォルダ構成 使用テーブル 手順 ABATORによるDAO自動生成 beanのカスタマイズとテーブル内部結合用のsql作成 IDEで定義ファイル作成 画面と各種定義ファイルの作成。 ログイン処理インターフェイスとログイン処理実装クラスの作成 Actionクラスを作成 参考URL インストール 環境 Java 5.0 Tomcat 6.0 Oracle10g XE Eclipse 3.4(日本語化済) Struts1.3.8 http //struts.apache.org/download.cgiからStruts 1.3.8をダウンロード。 解凍して、webapps配下のstruts-blank-1.3.8.warを$CATALINA_HOME\webapps配下に設置。 Tomcatを起動し、ブラウザでhttp //localhost 8081/struts-blank-1.3.8/を開く。 成功すると、$CATALINA_HOME\webapps配下にstruts-blank-1.3.8フォルダが出現。 これを元にEclipseでTomcatプロジェクトを作成する。 iBATIS + ABATOR http //ibatis.apache.org/からiBATIS Java 2.3.4をダウンロード。 解凍して、lib配下のibatis-2.3.4.726.jarを上のStrutsで作ったプロジェクトのlib配下にコピー。 Eclipseを起動し、ヘルプ→ソフトウェア更新→更新可能なソフトウェア→サイトの追加。 ロケーションにhttp //ibatis.apache.org/tools/abator/を入力。 Abator Code Generator for iBATISを選択しインストール。 Spring2 + Spring IDE http //sourceforge.net/project/showfiles.php?group_id=73357からspringframework-2をダウンロード。 解凍して、dist配下のspring.jarを上のStrutsで作ったプロジェクトのlib配下にコピー。 Eclipseを起動し、ヘルプ→ソフトウェア更新→更新可能なソフトウェア→サイトの追加。 ロケーションにhttp //dist.springframework.org/release/IDEを入力。 Spring IDE Update Siteを選択しインストール。 この際GEF(Graphical Editing Framework)とWTS(Web Standard Tools)が一緒にインストールされるはず。 Eclipse3.3以下だと先にGEFとWTSをインストールする必要がある。面倒くさい。 プロジェクト準備 jarファイルの準備 struts-blank-1.3.8を元に作成したプロジェクトに、以下のjarファイルを用意。 struts-blankに最初から入ってたjar antlr-2.7.2.jar commons-beanutils-1.7.0.jar commons-chain-1.1.jar commons-digester-1.8.jar commons-logging-1.0.4.jar commons-validator-1.3.1.jar oro-2.0.8.jar struts-core-1.3.8.jar struts-taglib-1.3.8.jar struts-tiles-1.3.8.jar iBATISから ibatis-2.3.4.726.jar Springから(場所がバラバラなのでフォルダ内検索で。) spring.jar spring-webmvc-struts.jar commons-dbcp.jar commons-logging.jar log4j-1.2.15.jar Oracleドライバ(各自用意) ojdbc14.jar 全部使うかは謎。 common-loggingが2個あるのは多分どちらかが不要なのか? フォルダ構成 Exam(プロジェクト名) ├src(ソースフォルダ) │ └example │ ├action │ ├bean │ ├biz │ ├dao │ └sqlMap(iBATIS用) ├pages(JSP置き場) └WEB-INF(各種定義ファイル) 使用テーブル EMP EMPNO(CHAR) EMPNAME(VARCHAR2) DEPTNO(CHAR) DEPT DEPTNO(CHAR) DEPTNAME(VARCHAR2) 従業員番号を入力すると、従業員名と部署名が返ってくる簡単なものを作ってみる。 手順 ABATORによるDAO自動生成 Eclipseのパッケージエクスプローラ上でプロジェクト名を右クリック→新規→その他。 Abator for iBATIS Wisardsの中のAbator for iBATIS Configuration Fileを選択し次へ。 ロケーションを/WEB-INF/配下にして終了すると、abatorConfig.xmlが作成される。???の部分を以下のように書き加える。 ?xml version="1.0" encoding="UTF-8" ? !DOCTYPE abatorConfiguration PUBLIC "-//Apache Software Foundation//DTD Abator for iBATIS Configuration 1.0//EN" "http //ibatis.apache.org/dtd/abator-config_1_0.dtd" abatorConfiguration abatorContext jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver" connectionURL="jdbc oracle thin @localhost 1521 xe" userId="userID" password="pass" classPathEntry location="ojdbc14.jarのフルパス" / /jdbcConnection javaModelGenerator targetPackage="example.bean" targetProject="Exam" / sqlMapGenerator targetPackage="example.sqlMap" targetProject="Exam" / daoGenerator targetPackage="example.dao" targetProject="Exam" type="GENERIC-CI" / table tableName="EMP" columnOverride column="EMPNO" property="empNo" javaType="String" jdbcType="CHAR" / columnOverride column="EMPNAME" property="empName" javaType="String" jdbcType="VARCHAR2" / columnOverride column="DEPTNO" property="deptNo" javaType="String" jdbcType="CHAR" / /table table tableName="DEPT" columnOverride column="DEPTNO" property="deptNo" javaType="String" jdbcType="CHAR" / columnOverride column="DEPTNAME" property="deptName" javaType="String" jdbcType="VARCHAR2" / /table /abatorContext /abatorConfiguration 保存したら、abatorConfig.xmlを右クリック→Generate iBATIS Artifactsを選択。src/example配下にファイルが自動生成される。 example ├bean │ ├Dept.java │ ├DeptExcample.java │ ├Emp.java │ └EmpExample.java ├dao │ ├DeptDAO.java │ ├DeptDAOImpl.java │ ├EmpDAO.java │ └EmpDAOImpl.java └sqlMap ├Dept_SqlMap.xml └Emp_SqlMap.xml beanのカスタマイズとテーブル内部結合用のsql作成 Emp.javaでDEPTNAMEも扱えるようにする。 Emp.javaにprivate String deptNameを作成し、getter/setterを作る。 他にもやり方はあるがこれが一番単純なので。 EMPとDEPTを内部結合した結果を取得できるようにする。 Emp_SqlMap.xmlを開き、resultMapにDEPTNAMEを追加、新規sql文を作成する。 resultMap id="abatorgenerated_EmpResult" class="example.bean.Emp" result column="EMPNO" property="empNo" jdbcType="CHAR" / result column="EMPNAME" property="empName" jdbcType="VARCHAR2" / result column="DEPTNO" property="deptNo" jdbcType="CHAR" / result column="DEPTNAME" property="deptName" jdbcType="VARCHAR2"/ //追加するカラム /resultMap sql id="abatorgenerated_Example_Where_Clause" : /sql select id="getEmp" resultClass="example.bean.Emp" //新しく追加するsql文 SELECT EMP.EMPNO, EMP.EMPNAME, DEPT.DEPTNAME AS DEPTNAME FROM EMP, DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO AND EMP.EMPNO = #VALUES# //#VALUES#は後で引数を受け取る部分 /select : sqlMapConfig.xml(sqlMap定義ファイル)をsrc/example/sqlMap配下に作成 ?xml version="1.0" encoding="UTF-8" ? !DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http //ibatis.apache.org/dtd/sql-map-config-2.dtd" sqlMapConfig settings useStatementNamespaces="true" / transactionManager type="JDBC" dataSource type="SIMPLE" property name="JDBC.Driver" value="oracle.jdbc.driver.OracleDriver" / property name="JDBC.ConnectionURL" value="jdbc oracle thin @localhost 1521 xe" / property name="JDBC.Username" value="userID" / property name="JDBC.Password" value="pass" / /dataSource /transactionManager sqlMap resource="example/sqlMap/EMP_SqlMap.xml" / sqlMap resource="example/sqlMap/DEPT_SqlMap.xml" / /sqlMapConfig dao.xml(DAO定義ファイル)をsrc/sqlMap配下に作成 ?xml version="1.0" encoding="UTF-8"? !DOCTYPE daoConfig PUBLIC "-//iBATIS.com//DTD DAO Configuration 2.0//EN" "http //www.ibatis.com/dtd/dao-2.dtd" daoConfig context transactionManager type="SQLMAP" property name="SqlMapConfigResource" value="sqlMapConfig.xml" / /transactionManager dao interface="example.dao.EmpDAO" implementation="example.dao.EmpDAOImpl" / dao interface="example.dao.DeptDAO" implementation="example.dao.DeptDAOImpl" / /context /daoConfig AppSqlConfig.java(SqlMapClientを一度だけ作成し取得するためのクラス)をexample/sqlMap配下に作成。 import java.io.Reader; import com.ibatis.common.resources.Resources; import com.ibatis.sqlmap.client.SqlMapClient; import com.ibatis.sqlmap.client.SqlMapClientBuilder; public class AppSqlConfig { private static SqlMapClient sqlMap; static { try { String resource = "jp/co/los/Sample001/sqlMap/sqlMapConfig.xml"; Reader reader = Resources.getResourceAsReader(resource); sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader); } catch (Exception e) { e.printStackTrace(); } } public static SqlMapClient getSqlMapInstance() { return sqlMap; } } IDEで定義ファイル作成 パッケージエクスプローラ上でプロジェクト名を右クリック→Spring Tools→Add Spring Project Natureを選択。 パッケージエクスプローラのプロジェクトのアイコンの文字がJからSに変わる。 パッケージエクスプローラ上でプロジェクト名を右クリック→新規→その他→Spring→Spring Bean Definitionを選択し次へ。 親フォルダをWEB-INFにし、名前(ここではapplicationContextとする)を入力し次へ。 beansのすぐ下のcontextにもチェックを入れて終了。 WEB-INF配下にxmlファイルが作成されるので、以下のように書き加える。 ?xml version="1.0" encoding="UTF-8"? beans xmlns="http //www.springframework.org/schema/beans" xmlns xsi="http //www.w3.org/2001/XMLSchema-instance" xmlns context="http //www.springframework.org/schema/context" xsi schemaLocation="http //www.springframework.org/schema/beans http //www.springframework.org/schema/beans/spring-beans.xsd http //www.springframework.org/schema/context http //www.springframework.org/schema/context/spring-context.xsd" context component-scan base-package="example"/ //書き加える部分。base-packageはsrc配下のexampleを入力。 /beans 画面と各種定義ファイルの作成。 ログイン画面(login.jsp)の作成 %@page pageEncoding="Windows-31J" contentType="text/html; charset=Windows-31J" % %@ taglib uri="http //struts.apache.org/tags-html" prefix="html" % head meta http-equiv="Content-Type" content="text/html; charset=Windows-31J"/ title ログイン画面 /title /head body html form action="/login" div ログインID: input type="text" name="empNo" html submit value="送信"/ /div /html form /body /html ログイン成功時画面(success.jsp)の作成 %@page pageEncoding="Windows-31J" contentType="text/html; charset=Windows-31J" % %@ taglib uri="http //struts.apache.org/tags-bean" prefix="bean" % %@ taglib uri="http //struts.apache.org/tags-html" prefix="html" % html head meta http-equiv="Content-Type" content="text/html; charset=Windows-31J"/ title テスト /title /head body div h1 Hello, bean write name="empNo" scope="session"/ bean write name="empName" scope="session"/ さん ( bean write name="deptName" scope="session"/ ) /h1 //従業員No 従業員名さん(部署名)という風に表示させる。 /div /body /html web.xmlの修正 ?xml version="1.0" encoding="ISO-8859-1"? !DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http //java.sun.com/dtd/web-app_2_3.dtd" web-app display-name Sample Application /display-name session-config session-timeout 30 /session-timeout /session-config servlet servlet-name example /servlet-name servlet-class org.apache.struts.action.ActionServlet /servlet-class init-param param-name spring.autowire /param-name //今回はSpringのAutowire機能を使う。 param-value byName /param-value /init-param load-on-startup 2 /load-on-startup /servlet servlet-mapping servlet-name example /servlet-name url-pattern *.do /url-pattern /servlet-mapping /web-app struts-config.xmlの修正 ?xml version="1.0" encoding="UTF-8" ? !DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http //struts.apache.org/dtds/struts-config_1_3.dtd" struts-config form-beans form-bean name="loginForm" type="org.apache.struts.action.DynaActionForm" form-property name="empNo" type="java.lang.String" / form-property name="empName" type="java.lang.String" / form-property name="deptName" type="java.lang.String" / /form-bean /form-beans action-mappings action path="/home" forward="/pages/login.jsp" / action path="/login" type="example.action.LoginAction" name="loginForm" forward name="success" path="/pages/success.jsp" / forward name="failure" path="/pages/login.jsp" / //ログインに失敗したときはログイン画面に戻る。 /action /action-mappings controller processorClass="org.springframework.web.struts.AutowiringRequestProcessor"/ plug-in className="org.springframework.web.struts.ContextLoaderPlugIn" set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/ /plug-in /struts-config ログイン処理インターフェイスとログイン処理実装クラスの作成 LoginService.java(インターフェイス)をsrc/example/biz配下に作成。 package example.biz; import example.bean.Emp; public interface LoginService { public Emp execute(String empNo); } LoginServiceImpl.java(実装クラス)をsrc/example/biz配下に作成。 package example.biz; import org.springframework.stereotype.Service; import example.sqlMap.AppSqlConfig; import com.ibatis.sqlmap.client.SqlMapClient; import example.bean.Emp; @Service("loginService") //アノテーションを利用したBean定義 public class LoginServiceImpl implements LoginService { public Emp execute(String empNo) { SqlMapClient sqlMap = AppSqlConfig.getSqlMapInstance(); Emp emp = new Emp(); try { emp = (Emp)sqlMap.queryForObject("EMP.getEmp",empNo); //(1) } catch (Exception e) { e.printStackTrace(); } return emp; } } (1)…EMP_sqlMap.xmlで設定したSQL文を呼び出す。2つ目の引数は#VALUES#に入る。 Actionクラスを作成 package example.action; import org.apache.struts.action.Action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.DynaActionForm; import org.springframework.beans.factory.annotation.Autowired; import example.bean.Emp; import example.biz.LoginService; public class LoginAction extends Action { @Autowired //……(1) private LoginService loginService = null; @Override public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res ) throws Exception { HttpSession session = req.getSession(); DynaActionForm dynaForm = (DynaActionForm)form; String empNo = dynaForm.getString("empNo"); Emp emp = loginService.execute(empNo); // 該当する従業員番号があればログイン成功とする。 if (emp != null) { session.setAttribute("empNo", emp.getEmpNo()); session.setAttribute("empName", emp.getEmpName()); session.setAttribute("deptName", emp.getDeptName()); return mapping.findForward("success"); } return mapping.findForward("failure"); } } (1)byNameでのオートワイヤリングなので,LoginServiceImplで指定している@Serviceの引数とLoginActionクラスの@Autowiredが指定してあるフィールドloginService の名称をあわせることでDIされる。 参考URL http //codezine.jp/article/detail/1289 http //www.thinkit.co.jp/free/article/0606/13/2/ http //www.atmarkit.co.jp/fjava/rensai4/spring2_01/spring2_01_1.html http //itpro.nikkeibp.co.jp/article/COLUMN/20080929/315624/?ST=develop P=1