2008年1月30日水曜日

Tomcat5.5でアクセスログを作成する

Tomcatでアクセスログを作成するにはServer.xmlかコンテキスト名.xmlに以下を記述するだけで良いです。

directory="logs/AccessLog"
prefix="tomcat_accs_"
suffix=".log" />

それぞれの属性についてはhttp://www.javaroad.jp/opensource/js_tomcat6.htmを参照してください。

Server.xml(CATALINA_HOME\conf)はTomcatにあるすべてのWEbアプリケーションにアクセスしたログを記録します。記述する際にはタグの間に上記のタグを追加するだけです。
それに対してコンテキスト名.xml(CATALINA_HOME\conf\Catalina\localhost)は特定のWebアプリケーションに対するログのみを記録するのに使用します。通常、コンテキスト名とWebアプリケーション名(XXXX.warなどのXXXX)は同じになっています。
記述する際にはタグの間に上記のタグを追加します。

2008年1月23日水曜日

IE7でJavascriptを実行しようとするとエラーになる問題

IE7でJavascriptを含んだHTMLを実行しようとすると以下のエラーになった。

「文字が正しくありません」
「オブジェクトを指定してください」

色々調べてみるとMSのサポートサイトを参照しろとあった。
http://support.microsoft.com/kb/934366/ja

しかしなぜか直らない。
どうもエンコーディングの問題らしいのだが。
結局以下のようにして問題は解決しました。
HTMLとあるがこれは元々はXMLにXSLをあてて作成したものなのです。その際にエンコーディングの設定をしてhtmlに出力するという記述を加えたところみごとに成功!

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="utf-8" method="html" indent="yes" />

もちろん、XSL、JSともにUTF-8で保存してあります。

前にもJavascriptがIE7で実行できないという問題があったが、この時はJSファイルをUTF-8保存したら実行できるようになった。どうもIE7はエンコーディングに対して注意を払う必要があるらしい。

2008年1月22日火曜日

Java-Com Bridgeを使う

以下のようなVBScriptがあります。

===========================================================
'日本語から英語への翻訳の場合に、全角の英数字、記号を半角に変換するスクリプトです
Dim objWord
Set objWord = CreateObject("Word.Application")
'objWord.Visible = TrueobjWord.Documents.Open(WScript.Arguments.Item(0))
' 検索条件の指定 objWord.Selection.Find.ClearFormatting
objWord.Selection.Find.Text = "[0-9A-Za-z!-?「」[] .,]"
objWord.Selection.Find.Forward = True
objWord.Selection.Find.Wrap = 1
objWord.Selection.Find.Format = False
objWord.Selection.Find.MatchCase = False
objWord.Selection.Find.MatchWholeWord = False
objWord.Selection.Find.MatchByte = False
objWord.Selection.Find.MatchAllWordForms = False
objWord.Selection.Find.MatchSoundsLike = False
objWord.Selection.Find.MatchFuzzy = False
objWord.Selection.Find.MatchWildcards = True

Do While objWord.Selection.Find.Execute
objWord.Selection.Range.CharacterWidth = 6
objWord.Selection.MoveRight
Loop

objWord.Selection.WholeStory
objWord.Selection.Font.Name = "MS Pゴシック"
objWord.ActiveDocument.Save
objWord.Documents.Close
objWord.Quitset objWord = nothing

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

これをJacob.jar(http://www.land-of-kain.de/docs/jacob/)を使用してJavaで実行しようとすると以下のようになります。

===============================================================
import com.jacob.com.*;
import com.jacob.activeX.*;

中略

String openUrl = "D:\Test\sample.doc";

ActiveXComponent oWord = new ActiveXComponent("Word.Application");

try{
Object oDocuments = oWord.getProperty("Documents").toDispatch();
Object oDocument = Dispatch.call(oDocuments, "Open", openUrl).toDispatch();
Object oSelection = oWord.getProperty("Selection").toDispatch();

//ここから半角処理
Object oFind = oWord.call(oSelection, "Find").toDispatch();
Dispatch.call(oFind, "ClearFormatting");
Dispatch.put(oFind, "Text", "[0-9A-Za-z!-?「」[] .,]");
Dispatch.put(oFind, "Forward", true);
Dispatch.put(oFind, "Wrap", 1);
Dispatch.put(oFind, "Format", false);
Dispatch.put(oFind, "MatchCase", false);
Dispatch.put(oFind, "MatchWholeWord", false);
Dispatch.put(oFind, "MatchByte", false);
Dispatch.put(oFind, "MatchAllWordForms", false);
Dispatch.put(oFind, "MatchSoundsLike", false);
Dispatch.put(oFind, "MatchFuzzy", false);
Dispatch.put(oFind, "MatchWildcards", true);

while (Dispatch.call(oFind, "Execute").toBoolean()){
Dispatch oRange = Dispatch.call(oSelection, "Range").toDispatch();
Dispatch.put(oRange, "CharacterWidth", 6);
Dispatch.call(oSelection, "MOveRight");
}

Object oWholeStory = oWord.call(oSelection, "WholeStory");
Object oFont = Dispatch.get(oSelection, "Font").toDispatch();
Dispatch.put(oFont, "Name", "MS Pゴシック");
Object oActiveDocument = oWord.getProperty("ActiveDocument").toDispatch();
Dispatch.call(oActiveDocument, "Save");

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

使い方
MS Wordを操作するのであれば以下の2行は必ず必要です。

ActiveXComponent oWord = new ActiveXComponent("Word.Application");
Object oDocuments = oWord.getProperty("Documents").toDispatch();

次に例えばVBでobjWord.Selection.Range.CharacterWidth = 6 とある記述をJavaで書くには、まずRangeオブジェクトを作成、そこからCharacterWidthプロパティに6を入れるといった記述をする。
RangeはSelectionオブジェクトのメソッドなのでまずはSelectionオブジェクトを作成する。
Selectionオブジェクトの上はMS WordのActiveXComponentなので既にで作成されている。

ということで手順は
1. でSelectionオブジェクトの作成をする。
2. でRangeオブジェクトを作成する。
3. でCharacterWidthプロパティに値をセットする。

となる。
メソッドやプロパティに値をセットする時は必ずそれを実行するためのオブジェクトを作成する必要があります。

メソッドの実行方法
Dispatch.call(オブジェクト名, メソッド名);

プロパティの設定方法;
Dispatch.put(オブジェクト名, プロパティ名,プロパティ 値);

2008年1月15日火曜日

ASP.NETのWEB Serviceを公開する。

ASP.NETの作成手順

1. Visual Studio2005の[File] →[New Web Site]で「ASP .Net Web Service」を選択する。
2. service.vbにコードを書く
3. service.asmxを開き、2で記述したclass名をこのファイルにも記述する。
4. [Build] → [Buid Web Site]でコンパイルする。
5. コンパイルしてできあがったファイルをIISのディレクトリにコピーする。コピーしたファイルは以下のものです:

Service.asmx
web.config
App_Code\Service.vb

これをIISの既定のWebサイトの直下にコピー

IISがASP.NETを実行できるようにする

1. コマンドプロンプトで以下を実行する。
  C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis -i
  * バージョンは環境によって異なる。このバージョンを調べるにはIISマネージャを開き、「既定のWebサイト」のプロパティを開き、ASP.NETタブを開き、バージョンが何になっているかを確認する。
2. IISマネージャを開き、Webサービス拡張を開く。
3.ASP.NET v2.0.50727 を「許可」にする。
4. サーバーから「http://localhost/service.asmx実行し、開けるかどうかを確認する。
5. 開けたら今度は外部からの接続を試してみる

2008年1月14日月曜日

Googleアカウントとの紐付け

https://www.google.com/accounts/AddNonGmailAlternate
で追加のメール アドレスを Google アカウントに関連付けることができます。

はじめてのブログ


自分はブログというか日記というものを今まで書いたことがない。なぜこの歳になって書こうかと思ったかというと最近物忘れがひどいのです。なのでStop the 物忘れということでブログのタイトルもForget me notとしました。
あまり面白いことも書くつもりもありませんが何か役に立つことも書くかもしれません。

自己紹介

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