2008年3月6日木曜日

JSP - Pageディレクティブ MIMEタイプ

MIMEタイプとは、送信するデータの含まれているデータの種類(テキスト、画像、オーディオなど)を指定するためのものです。データを受け取るクライアントはこのMIMEタイプを見てどのように表示させればよいか判断するので、適切に指定する必要があります。










HTMLtext/html
PLAINテキストtext/plain
CSStext/css
JPEG画像image/jpeg
GIF画像image/gif
Excel形式のデータapplication/vnd.ms-excel
PowerPoint形式のデータapplication/vnd.ms-powerpoint
その他のデータapplication/octec-stream


例:
<%@ page contentType="text/html; charset=UTF-8"%>








Javaでfor eachループを使用する


for-eachと組み合わせて使用することができるコレクションクラスは、java.lang.Iterableインターフェイスを実装しているコレクションクラスに対して使用することができます。

Iteratableインターフェイスを実装しているクラスは以下のとおりです:








ArrayBlockingQueueArrayListAttributeList
BeanContextServicesSupportBeanContextSupportConcurrentLinkedQueue
CopyOnWriteArrayListCopyOnWriteArraySetDelayQueue
EnumSetHashSetJobStateReasons
LinkedHashSetLinkedListPriorityBlockingQueue
PriorityQueueRoleListRoleUnresolvedList
StackSynchronousQueueTreeSet
VectorLinkedBlockingQueue



構文:

for (データ型 ループ内で使用する変数名 : 集合を保持する参照変数名){
    //  繰り返して実行したい処理




例:

ArrayList list = new ArrayList();
list.add("スペード");


for (String value : list){

System.out.println(value);

}

2008年2月12日火曜日

VMWare WorkStationでドメインを構築する

VMWareでドメインの設定をするには以下の手順で行います。

VMWareでチームを作成する


1. [ファイル]→[新規]→[チーム]を選択。
2. チーム名を入れ、そのチームに仮想マシンを追加する。既存のイメージを追加すること可能だし、新規のイメージを作り、それを追加することもできる。
3. チームにLAN セグメントを一つ追加する。
4. 以下のような設定になる。






今回の場合、3台のマシンをドメインに入れました。



ActiveDirectoryサーバーの構築



1. 追加した3つのイメージのどれか(WindowsServer2003)を開き、[スタート]→[管理ツール]→[サーバーの構成ウィザード]を開きます。

2. ドメインコントローラ (ActiveDirectory)を線楽し、[次へ]をクリックします。

7. ActiveDirectoryのインストールウィザードが立ち上がるので「新しいドメインのドメインコントローラ」を選択し、[次へ]をクリックします。

3. 「新しいフォレストのドメイン」を選択し、[次へ]をクリックします。

4. 適当なDNS名を入れます。例)testdomain.co.jp

5. NetBIOS名もそのままで[次へ]をクリックします。

6. ログを適当な場所に保存します(デフォルトのままでもオッケーです)。

7. DNS登録の診断で失敗の画面が出ますがそのまま無視して[次へ]で進みます。このエラーはDNSサーバを設定していないために起こるものですがこのまま続行すれば最終的にはDNSサーバの設定もできます。
8. 「Windows2000またはWindows Server2003 OSとのみ互換性があるアクセス許可」を選択し、[次へ]をクリックします。

9. パスワードを入力します。

10. これでActiveDirectoryの設定は完了です。



ネットワークの設定をする



1. ActiveDirectoryサーバーになっているサーバのIPを固定で割り振ります。ここではActiveDirectoryサーバのIPを192.168.0.100とします。


2. 次に他のVMWareチームに追加したマシンを選び、上記と同じように設定します。違うのはIPアドレスのみです。例えば二台目のマシンは192.168.0.101、三台目は192.168.0.102などと設定します。デフォルトゲートウェイ、優先DNSサーバーは192.168.0.100のままです。

3. すべてのマシンのネットワーク設定が終わったらPingで確認してみます。ADサーバ以外のマシンからPing 192.168.0.100と打ってみてレスポンスが返ってくるか確かめてみます。もし返ってこない場合にはファイアウォールが原因の場合があります。ファイアウォールの設定を無効にして再度試してください。

4. Pingの応答があればあとはドメインに各マシンを追加するのみです。ドメインへの追加はマイコンピュータのプロパティから行ってください。

2008年2月8日金曜日

HOSTSファイルでIPアドレスとホスト名を紐付ける

HOSTSファイルとは、TCP/IPプロトコルで通信を行なう場合に、通信を可能にするための名前解決のファイルです。
ファイルは以下にあります。

C:\WINDOWS\system32\drivers\etc\hosts
これをテキストエディタで開き、「127.0.0.1 localhost」の下に紐付けたいIPアドレスとホスト名を入れます。IPアドレスとホスト名の間にはタブを入れます。

例:
127.0.0.1 localhost
172.16.16.26 hostname


上記を設定することでローカルマシンから http://172.16.16.26/ と打っても、http://hostname/ と打っても同じになります。

2008年2月7日木曜日

プロセスのログを記録する。

最近Tomcatが急に落ちるといった現象がある。急に落ちるのでTomcatのログには残らない。ワトソンのログにもイベントビューアにも記録されない。困った。。。。そこでプロセスのログをカスタマイズすることにした。方法は以下の通りです。

1. コンピュータの管理 -> パフォーマンスログと警告 -> カウンタログ で「新しいログの設定」を選択。

2. 「新しいログの設定」画面で適当に名前を入力。

3. 以下のような画面が出るので[カウンタの追加]をクリック



















4. 例えば今回はJVMのプロセスのログを取りたいとしたら以下のようにパフォーマンスオブジェクトで「Process」を選択し、Javaのインスタンスを選択する。そして記録したいカウンタをそれぞれ選択し、[追加]していく。
















5. 追加し終えたら[閉じる]を押し、次に[ログファイル]タブを開く。ログファイルを種類を選び、[構成]ボタンをクリックする。ここでログファイルの保存先とサイズの指定ができるので設定する。


6. 次に[スケジュール]タブを開き設定する。私の場合は手動設定にし、5で設定したログファイルのサイズがいっぱいになったときは新しいログファイルを開始するといった設定にした。



これで設定完了です。ログファイルを開くと[全般]タブで指定した間隔ごとのログが記録されているのが分ります。
こんな感じに↓
==================================================================
(PDH-CSV 4.0) ()(-540)    % Processor   TimePage File Bytes Peak  Thread Count
02/07/2008 17:52:21.009   0 3.22E+08            52
02/07/2008 17:52:36.009 0 3.22E+08 52
==================================================================

2008年2月5日火曜日

Java-Com Bridgeを使う(PowerPoint編)

例えば以下のようなSubプロシージャがある

===========================================================
Private Sub RemoveTextInShape(thisShape As Shape)
If thisShape.HasTextFrame = msoTrue Then
thisShape.TextFrame.TextRange.Text = RemoveInText(InjectCharacters(thisShape.TextFrame.TextRange.Text))
End If

If thisShape.HasTable = msoTrue Then
Dim thisRows As Rows
Set thisRows = thisShape.Table.Rows
Dim thisRow As Row
For Each thisRow In thisRows
Dim thisCells As CellRange
Set thisCells = thisRow.Cells
Dim thisCell As Cell
For Each thisCell In thisCells
RemoveTextInShape thisCell.Shape
Next
Next
End If
End Sub

===========================================================

これをJava-Com Bridgeを使用してJava流に書き直すと以下のようになる

===========================================================

public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
String openUrl = "C:\\java_test\\sample.ppt";

oPPT = new ActiveXComponent("PowerPoint.Application");

try{

oPPT.setProperty("Visible", new Variant(true));
Object oPresentations = oPPT.getProperty("Presentations").toDispatch();
Object oPresentation = Dispatch.call(oPresentations, "Open", openUrl).toDispatch();
Object oActivePresentation = oPPT.getProperty("ActivePresentation").toDispatch();
Object oSlides = oPPT.call(oActivePresentation, "Slides").toDispatch();
int totalSlides = oPPT.call(oSlides, "Count").toInt();

//Slideの配列を作成する
ArrayList<Object> thisSlides = new ArrayList<Object>();
for (int i = 1; i < totalSlides + 1; i++){

Object slideObj = oPPT.call(oActivePresentation, "Slides", new Variant(i)).toDispatch();
thisSlides.add(slideObj);
}

System.out.println("スライドの総数は " + thisSlides.size());
for(int i = 0; i < thisSlides.size(); i++){

System.out.println("Slide ID: " + oPPT.call(thisSlides.get(i), "SlideID").toInt());
Object oShape = oPPT.call(thisSlides.get(i), "Shapes").toDispatch();
int totalShapes = oPPT.call(oShape, "Count").toInt();
//System.out.println("totalShapesは " + totalShapes);

//個々のshapeに対して実行する。
for (int n = 1; n < totalShapes + 1; n++){
Object shapeObj = oPPT.call(thisSlides.get(i), "Shapes", new Variant(n)).toDispatch();
removeTextInshape(shapeObj);
}

}
Dispatch.call(oPresentation, "Save");

} catch (ComFailException e){
System.err.println(e.getMessage() + e.getHResult());
} finally {
Dispatch.call(oPPT, "Quit");
ComThread.Release();
}

}

private static ActiveXComponent oPPT;

===========================================================

要は Object slideObj = oPPT.call(oActivePresentation, "Slides", new Variant(i)).toDispatch(); をスライドの数だけループし、いちいちSlides配列を作成する必要がある。とっても面倒くさい。。

XSLでクォーテーション内に文字を入れたい時

例えばXMLで以下のような記述があったとします。
<link>
<url path="http://www.google.co.jp" name="Googleのホーム"></url>
<url path="http://www.yahoo.co.jp" name="Yahooのホーム"></url>
</link>

これにXSLを当てて動的に以下のようにしたい時
<a href="http://www.google.co.jp">Googleのホーム</a>
<a href="http://www.yahoo.co.jp">Yahooのホーム</a>

普通にやると以下のように書きます。
<xsl:template match="url">
 <a href="<xsl:value-of select="@path" />">="<xsl:value-of select="@name" /></a>
</xsl:template>

しかし、、、これでブラウズすると「文字 '< ' は、属性値内に使用できません。」とエラーになってしまいます。どうするか。。。で最終的のこんな具合に

<xsl:template match="link/url">
 <a>
<xsl:attribute name="href"><xsl:value-of select="@path" /></xsl:attribute>
<xsl:value-of select="@name" />
</a>
</xsl:template>

<xsl:attribute name>を使うと属性が作成できるようです。

自己紹介

最近気胸になりました。でタバコやめました。