SQLの窓

2009年09月28日


Java : iniファイルの読み取り

文字列処理のサンプルです。
Tomcat6.0 のサンプルに同梱しました( webapp\sample_basic\local_func.jsp )
実際は、セクションの処理やコメント行の処理が必要です( その他、同名エントリの処理等 )


// *********************************************************
// PHP.INI のエントリの値( 1 )
// ※ StringTokenizer
// コメントを考慮していません( ; )
// 行解析の前に;を含む右側の文字列を取り去る必要があります
// *********************************************************
public String getPhpIni_1( String Entry ) {

	String ret = "";

	try {
		// 生のバイトのストリーム
		FileInputStream fis = new FileInputStream("c:\\php\\php.ini");
		// SHIFT_JIS として読み込む為の準備
		InputStreamReader isr = new InputStreamReader(fis, "SJIS");
		// 行単位で読み込む為の準備
		BufferedReader br = new BufferedReader(isr);

		String line_buffer = "";
		// BufferedReader は、readLine が null を返すと読み込み終了
		String str = "";
		while ( null != (line_buffer = br.readLine() ) ) {
			StringTokenizer st = new StringTokenizer(line_buffer,"=",false);
			//トークンの出力
			while(st.hasMoreTokens()) {
				str = st.nextToken();
				str = str.trim();
				if(str.equalsIgnoreCase( Entry )){
					ret = st.nextToken();
					ret = ret.trim();
				}
			}
		}

		// 閉じる
		br.close();
		isr.close();
		fis.close();
	}
	catch( Exception e ) {
		ret = e.getMessage();
	}

	return ret;

}
// *********************************************************
// PHP.INI のエントリの値( 2 )
// ※ split
// コメントを考慮していません( ; )
// 行解析の前に;を含む右側の文字列を取り去る必要があります
// *********************************************************
public String getPhpIni_2( String Entry ) {

	String ret = "";

	try {
		// 生のバイトのストリーム
		FileInputStream fis = new FileInputStream("c:\\php\\php.ini");
		// SHIFT_JIS として読み込む為の準備
		InputStreamReader isr = new InputStreamReader(fis, "SJIS");
		// 行単位で読み込む為の準備
		BufferedReader br = new BufferedReader(isr);

		String line_buffer = "";
		// BufferedReader は、readLine が null を返すと読み込み終了
		String str = "";
		while ( null != (line_buffer = br.readLine() ) ) {
			String[] result = line_buffer.split("=");
			str = (String)result[0];
			str = str.trim();
			if(str.equalsIgnoreCase( Entry )){
				ret = (String)result[1];
				ret = ret.trim();
			}
		}

		// 閉じる
		br.close();
		isr.close();
		fis.close();
	}
	catch( Exception e ) {
		ret = e.getMessage();
	}

	return ret;

}



タグ:java Tomcat
posted by lightbox at 2009-09-28 17:47 | java : テキストファイル | このブログの読者になる | 更新情報をチェックする

Flex3 : PHPセッションによるログイン処理


Flex3 : PHPセッションによるログイン処理


ブラウザから呼ばれる PHP も swf から呼ばれる PHP も同じセッションで
処理されます。swf 内でログイン処理してもいいですが、All Flex3 という
わけにもいかないはずですから、連携する場合もあると思います。

Flex3_login



posted by lightbox at 2009-09-28 15:04 | Flex | このブログの読者になる | 更新情報をチェックする

2009年09月27日


IE拡張 : リンク下の情報を取得

IE拡張メニューです。
ページ上で右クリックして表示されるポップアップメニューから
起動されるアプリケーションです。

▼一例▼
Ieex_menu
リンクのURL

ブラウザでダウンロード

画像、テキストリンク兼用です。

通常は、リンクされている部分の URL を取得します
<a href="url">タイトル</a>
<a href="url"><img src="url"></a>
※ 画像にリンクが無い場合は、画像の URL を取得
<img src="url">

SHIFT キーを押しながらだとリンクの HTML を全て取得します
<a href="url"><b>タイトル</b></a>

CTRL キーを押しながらだと現在のA要素のHTMLを全て取得します
<a href="url"><b>タイトル</b></a>
リンクのテキスト

ブラウザでダウンロード

テキストリンク専用です。

通常は、リンクされている部分のテキストを取得します
<a href="url"><b>タイトル</b></a>

SHIFT キーを押しながらだと URL を取得します
<a href="url">タイトル</a>

CTRL キーを押しながらだと現在のA要素のHTMLを全て取得します
<a href="url"><b>タイトル</b></a>
アンインストールは、IE拡張メニュー/メンテナンス を使用して下さい




posted by lightbox at 2009-09-27 21:17 | IE拡張メニュー | このブログの読者になる | 更新情報をチェックする

Java : WEB 上の XML を JTable に表示

スクロールさせる為に、データを重複させています
Jtable1

Eclipse での配置例です
Jtable2

LboxTable は、こちらにあります
public class Main extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JPanel jPanel = null;
	private LboxTable lboxTable = null;
	/**
	 * This method initializes jPanel	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel() {
		if (jPanel == null) {
			jPanel = new JPanel();
			jPanel.setLayout(new BoxLayout(getJPanel(), BoxLayout.X_AXIS));
			jPanel.setBounds(new Rectangle(11, 67, 497, 220));
			jPanel.add(getLboxTable(), null);
		}
		return jPanel;
	}

	/**
	 * This method initializes lboxTable	
	 * 	
	 * @return lightbox.LboxTable	
	 */
	private JScrollPane getLboxTable() {
		if (lboxTable == null) {
			lboxTable = new LboxTable();

			lboxTable.addMouseListener(new java.awt.event.MouseAdapter() {
				public void mouseClicked(java.awt.event.MouseEvent e) {
					// ダブルクリックの処理
					if ( e.getClickCount() == 2 ) {
						int row = lboxTable.convertRowIndexToModel(lboxTable.rowAtPoint(e.getPoint()));
						int col = lboxTable.convertColumnIndexToModel(lboxTable.columnAtPoint(e.getPoint()));
						System.out.println(row+"/"+col);
					}
				}
			});
			lboxTable.AddColumn("COLUMN_1");
			lboxTable.AddColumn("COLUMN_2");

			lboxTable.SetColumnTitle("COLUMN_1", "タイトル");
			lboxTable.SetColumnTitle("COLUMN_2", "URL");

			lboxTable.SetColumnWidth("COLUMN_1", 150);
			lboxTable.SetColumnWidth("COLUMN_2", 320);
			
			try {
				// ターゲット
				URL url = new URL("http://winofsql.jp/exlink.xml");
				// 接続オブジェクト
				HttpURLConnection http = (HttpURLConnection)url.openConnection();
				// GET メソッド
				http.setRequestMethod("GET");
				// 接続
				http.connect();

				// XML 取得の準備
				DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
				DocumentBuilder builder = dbfactory.newDocumentBuilder();
				// InputStream から Documentオブジェクトを取得
				Document doc = builder.parse(http.getInputStream());

				// ここから先は一般的な DOM の処理
				// ルート要素
				Element root = doc.getDocumentElement();
				// System.out.println(root.getNodeName());
				
				// <row> 〜 </row>
				// getElementsByTagName が一番直感的で確実
				NodeList nl1 = root.getElementsByTagName("row");
				// 一つ目のノード
				Node nd1 = nl1.item(0);
				// System.out.println(nd1.getNodeName());
				
				// <fld3>名称</fld3>
				// Node を Element にキャストして getElementsByTagName を使う
				NodeList nl2 = ((Element)nd1).getElementsByTagName("fld3");
				NodeList nl3 = ((Element)nd1).getElementsByTagName("fld2");
				// 最初の row ブロックの fld3 の 列挙
				for( int i = 0; i < nl2.getLength(); i++ ) {

					// <fld3>
					// System.out.println((nl2.item(i)).getNodeName());
					// 要素に挟まれた値は、実際はテキストノードの中にあります
					int nRow = lboxTable.AddRow();
					lboxTable.SetColumnText(nRow, "COLUMN_1", (nl2.item(i)).getFirstChild().getNodeValue());
					lboxTable.SetColumnText(nRow, "COLUMN_2", (nl3.item(i)).getFirstChild().getNodeValue());

					nRow = lboxTable.AddRow();
					lboxTable.SetColumnText(nRow, "COLUMN_1", (nl2.item(i)).getFirstChild().getNodeValue());
					lboxTable.SetColumnText(nRow, "COLUMN_2", (nl3.item(i)).getFirstChild().getNodeValue());

				}

				// 接続解除
				http.disconnect();
			}
			catch (Exception e) {
			}
			
		}
		return lboxTable.root;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				Main thisClass = new Main();
				thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				thisClass.setVisible(true);
			}
		});
	}

	/**
	 * This is the default constructor
	 */
	public Main() {
		super();
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(531, 339);
		this.setContentPane(getJContentPane());
		this.setTitle("JFrame");
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getJPanel(), null);
		}
		return jContentPane;
	}

}  //  @jve:decl-index=0:visual-constraint="10,10"



posted by lightbox at 2009-09-27 02:05 | java : Swing | このブログの読者になる | 更新情報をチェックする

Java : WEB 上の XML データの内容を取得する

要点

DOM の部分はどの言語でもほとんど同じです。

Java では、Node を継承して Element があり、Element のほうに getElementsByTagName があるという事を知っておれば良いです。
( Node も Element もインターフェイスです )

また、Java だけではありませんが、<要素>〜</要素> の間のテキストは nodeValue では無く、暗黙のテキストノードがあって、そのノードの nodeValue になります
import java.net.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;

public class Main {

	public static void main(String[] args) {

		try {
			// ターゲット
			URL url = new URL("http://winofsql.jp/exlink.xml");
			// 接続オブジェクト
			HttpURLConnection http = (HttpURLConnection)url.openConnection();
			// GET メソッド
			http.setRequestMethod("GET");
			// 接続
			http.connect();

			// XML 取得の準備
			DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = dbfactory.newDocumentBuilder();
			// InputStream から Documentオブジェクトを取得
			Document doc = builder.parse(http.getInputStream());

			// ここから先は一般的な DOM の処理
			// ルート要素
			Element root = doc.getDocumentElement();
			// System.out.println(root.getNodeName());
			
			// <row> 〜 </row>
			// getElementsByTagName が一番直感的で確実
			NodeList nl1 = root.getElementsByTagName("row");
			// 一つ目のノード
			Node nd1 = nl1.item(0);
			// System.out.println(nd1.getNodeName());
			
			// <fld3>名称</fld3>
			// Node を Element にキャストして getElementsByTagName を使う
			NodeList nl2 = ((Element)nd1).getElementsByTagName("fld3");
			// 最初の row ブロックの fld3 の 列挙
			for( int i = 0; i < nl2.getLength(); i++ ) {

				// <fld3>
				// System.out.println((nl2.item(i)).getNodeName());
				// 要素に挟まれた値は、実際はテキストノードの中にあります
				System.out.println((nl2.item(i)).getFirstChild().getNodeValue());

			}

			// 接続解除
			http.disconnect();
		}
		catch (Exception e) {
		}
	}
}


関連する記事

VBS : XMLファイルのテキストノードの値の更新



タグ:java xml
posted by lightbox at 2009-09-27 00:03 | java : 通信関連 | このブログの読者になる | 更新情報をチェックする

2009年09月26日


Java : WEB上のテキストファイルを取得する

概要

テキストファイルの入出力はこちらを参照して下さい。
InputStream の扱いはテキストファイルを基本に考えれば良いと思います。
WEB 上のデータも結局 InputStream で取得しています。
import java.net.*;
import java.io.*;
import java.util.*;

public class Main {

	public static void main(String[] args) {

		try {
			// ターゲット
			URL url = new URL("http://winofsql.jp/exlink.xml");
			// 接続オブジェクト
			HttpURLConnection http = (HttpURLConnection)url.openConnection();
			// GET メソッド 
			http.setRequestMethod("GET");
			// 接続 
			http.connect();
			 
			// EUC-JP でリーダーを作成
			InputStreamReader isr = new InputStreamReader(http.getInputStream(), "EUC-JP");   
			// 行単位で読み込む為の準備   
			BufferedReader br = new BufferedReader(isr);   
			String line_buffer;   
			// BufferedReader は、readLine が null を返すと読み込み終了   
			while ( null != (line_buffer = br.readLine() ) ) {   
				// コマンドプロンプトに表示   
				System.out.println(line_buffer);   
			}
 
			// 各々受け持ちクラスを閉じる   
			br.close();
			isr.close();
			http.disconnect();
		}
		catch( Exception e ) {
			
		}
	}
}




posted by lightbox at 2009-09-26 21:44 | java : 通信関連 | このブログの読者になる | 更新情報をチェックする

Java : Windows の環境変数の列挙( 含ソート )

Java は SDK だけでは、何をするにも回りくどい感があります。
また、実際の実装時には考慮しなければならない専門知識が多いと思います。

ですが、Java ができたなら、VB.NET,C#,ActionScript,JavaScript,PHP は楽勝でしょう
import java.util.*;

public class Main {

	public static void main(String[] args) {

		// 環境変数取り出し
		Map<String, String> myData = System.getenv();
		
		// 列挙の準備
		Set myKeyset = myData.keySet();
		Iterator myIterator = myKeyset.iterator();

		// 列挙
		String strKey = null;
		String strValue = null;
		while( myIterator.hasNext() ) {
			// キーの取り出し
			strKey = (String)myIterator.next();
			// 値の取り出し
			strValue = (String)myData.get(strKey);
			System.out.println( strKey + " : " + strValue );
		}

		System.out.println( "-----------------------------------" );

		// ソートして列挙
		int i = 0;

		Object[] myKeyArray = myKeyset.toArray();
		Arrays.sort(myKeyArray);
		for( i = 0 ; i < myKeyArray.length; i++ ) {
			// キーの取り出し
			strKey = (String)myKeyArray[i];
			// 値の取り出し
			strValue = (String)myData.get(strKey);
			System.out.println( strKey + " : " + strValue );
		}

	}

}



タグ:java
posted by lightbox at 2009-09-26 20:50 | Java | このブログの読者になる | 更新情報をチェックする

Java : クラスメソッドとインスタンスメソッド

概要
クラスメソッドは static で定義され、実行時に常に全ての情報を渡す
他言語における一般的な「関数」にあたります。

インスタンスメソッドは、実行単位毎にメモリ上に存在して、
各々固有の情報を持ちます。それは、コンストラクタでインスタンス作成時
に渡される場合もありますが、後からメソッドでデータを引き渡す場合も
あります。

それらは、内部で保持される為、その値を使うメソッドを実行する場合、
呼び出すたびに値を引き渡す必要はありません


Main.java
import lightbox.*;

public class Main {

	public static void main(String[] args) {

		System.out.println(Test.getDateSystem());
		
		Test lb = new Test();
		System.out.println(lb.getDateString());

	}

}



Test.java
package lightbox;

import java.text.DateFormat;
import java.util.Date;

public class Test {

	private Date myDate = null;
	
	// *****************************************************
	// コンストラクタ 
	// *****************************************************
	public Test() {
		myDate = new Date();
	}

	// *****************************************************
	// 日付文字列 ( インスタンス ) 
	// インスタンス作成時の日付
	// *****************************************************
	public String getDateString( ) {

		String strDate = null;

		strDate = DateFormat.getDateInstance().format(myDate);

		return strDate;

	}

	// *****************************************************
	// 日付文字列 ( クラス ) :
	// 呼び出した時の日付
	// *****************************************************
	public static String getDateSystem( ) {

		Date myDate = null;
		String strDate = null;

		myDate = new Date();
		strDate = DateFormat.getDateInstance().format(myDate);

		return strDate;

	}

}



タグ:java
posted by lightbox at 2009-09-26 19:57 | Java | このブログの読者になる | 更新情報をチェックする

2009年09月23日


Flex3 : DataGrid をユーザコントロール化したサンプルパッケージ


ブラウザでダウンロード

DataGrid のサンプルではありますが、こういう使い方は初心者向けではありません。( ソースコードは同梱しています )
今回の目的は、FlashVars の取得と右クリックで表示されるポップアップメニューの扱いがメインです。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application
	xmlns:mx="http://www.adobe.com/2006/mxml"
	xmlns:my="winofsql.Controls.*"
	initialize="initData();"
>

<mx:Style source="Style.css" />
<mx:Style>
LboxGrid {
	color: black;
}
</mx:Style>

<mx:Script>
<![CDATA[

	import mx.controls.*;
	import mx.events.*; 
	import mx.formatters.*;
	import flash.external.*;
	import flash.events.*;
	import mx.collections.*;

	// **************************
	// アプリケーションの初期化
	// **************************
	public function initData():void {

		// パラメータをプロパティとして持つ Object を取得
		var param:Object = mx.core.Application.application.parameters;

		// LboxGrid 初期化
		grid.Reset();

		// ヘッダタイトルを表示
		grid.ShowHeader();

		// 高さを設定
		grid.width = 500;
		grid.height = 350;

		// 列を追加
		grid.AddColumn("KEY");
		grid.SetColumnWidth( 0, 200 );
		grid.AddColumn("VALUE", 300 );
		grid.AddColumn("TEXT");

		// LboxGrid に全てセット
		var i:int = 0;
		for (var key:* in param) { 
			grid.AddRow( key, param[key] );
		}

		// 行を選択しない
		grid.Unselect();

		// ダブルクリックを可能にする
		grid.doubleClickEnabled  = true;
		grid.addEventListener( MouseEvent.DOUBLE_CLICK, function( e:MouseEvent ):void {

			firebug( e.stageX - (grid.localToGlobal(new Point(grid.x,0))).x + 9 );

			var nIdx:int = grid.selectedIndex;
			Alert.show( grid.GetColumnText( nIdx, "COL1" ));
			grid.SetColumnText( nIdx, "COL1", "" );

		});

		// 右クリックメニュー
		var cMenu:ContextMenu = new ContextMenu();
		// 必要最低限の adobe メニューのみ表示
		cMenu.hideBuiltInItems();

		var cMenuItem:ContextMenuItem =
			new ContextMenuItem("SQLの窓");
		cMenuItem.addEventListener(
			ContextMenuEvent.MENU_ITEM_SELECT,
			function (event:ContextMenuEvent):void {
				var req:URLRequest = new URLRequest(
					"http://winofsql.jp/"
				);
				navigateToURL(req, "_blank");
			}
		);
		cMenu.customItems.push(cMenuItem);

		this.contextMenu = cMenu;

	}

	// **************************
	// ログ表示
	// **************************
	public function firebug(data:Object):void {
	
		var fmt:DateFormatter = new DateFormatter();
	
		fmt.formatString = "YYYY/MM/DD HH:NN:SS";
		var logdt:String = fmt.format( new Date );
	
		ExternalInterface.call(
			"console.log", logdt,
			data+""
		);
	
	}

]]>
</mx:Script>

<mx:Panel
	horizontalAlign="center"
	paddingLeft="10"
	paddingRight="10"
>
	<my:LboxGrid id="grid"/>

</mx:Panel>
</mx:Application>




posted by lightbox at 2009-09-23 23:32 | Flex | このブログの読者になる | 更新情報をチェックする

2009年09月22日


TOMCAT6 をインストールしてサンプルアプリケーションも自動登録する


Tomcat 6.x のインストールと初期設定
TOMCAT は、インストールしてしまえば、ただの Java の WEB アプリなのですが、
インストールするまでが面倒だったりします。

そこで、テキストエディタで JSP を書いてブラウザで表示するという目的の作業までの
インストール作業を最短距離にしてしまおうというわけです。

Tomcat_2

最も注意すべき問題は、ディレクトリのセキュリティなので、
VBS : バッチ処理でディレクトリ(ファイル)の権限を追加したり削除したりする方法
または、GUI で、アプリケーションディレクトリに対して、Users または
Everyone を追加登録してフルコントロール権限を与えて下さい
( 権限が無いとアプリケーションディレクトリの配置でエラーになります )

posted by lightbox at 2009-09-22 19:37 | java : JSP | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します


Windows
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
PHP正規表現チェッカー
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり