Apcoordinator ユーザーズガイド
|
目次
|
C.2 Webアプリケーション
■ujiall.tld以外のタグライブラリディスクリプタを使用したアプリケーションの修正
INTERSTAGE WEBCOORDINATOR が提供していた以下のタグライブラリディスクリプタを使用したアプリケーションの場合、Webアプリケーション環境定義ファイル(web.xml)の修正と、タグライブラリファイルujiall.tldのコピーが必要です。
- compo.tld
- script.tld
- uomf.tld
- uji.tld
修正は以下のように行います。
- web.xmlのtaglib-locationタグで上記のファイル名が指定されている場合、それを"ujiall.tld"に書き換えます。例えば、次のように書き換えます。
修正前
<taglib>
<taglib-uri>uji-model</taglib-uri>
<taglib-location>/WEB-INF/uomf.tld</taglib-location>
</taglib>
|
修正後
<taglib>
<taglib-uri>uji-model</taglib-uri>
<taglib-location>/WEB-INF/ujiall.tld</taglib-location>
</taglib>
|
- Apcoordinatorのタグライブラリファイルujiall.tldを、WebアプリケーションのWEB-INFフォルダにコピーします。
なお、修正のないソースの再コンパイルは必要ありません。
■UJIタグの新機能を使用する場合の修正
以前のバージョンのApcoordinatorや、INTERSTAGE WEBCOORDINATORで動作するアプリケーションにおいて、UJIタグの新機能を利用する場合は、タグライブラリファイルujiall.tldを新しいものに置き換える必要があります。
Apcoordinatorのタグライブラリファイルujiall.tldを、WebアプリケーションのWEB-INFフォルダに上書きコピーしてください。
このとき、修正のないソースの再コンパイルは必要ありません。
■uji:controlSectionタグを使用している場合の修正
uji:controlSectionタグは推奨されません。
Apcoordinator V5.0L10との互換性のために残されています。
以下の製品が提供するアプリケーションサーバを利用する場合には、旧バージョンのサーブレット実行環境(Tomcat3.1ベースのサーブレット実行環境)でのみ利用することができます。
- Interstage Application Framework Suite
- Interstage Application Server
二重処理を防止するには、uji:formタグのpostOnceアトリビュート、または、HttpControlStateProfileクラスによる二重処理防止機能を使用してください。二重処理防止機能については、高度なセション管理を参照してください。
なお、以下の条件の場合、uji:controlSectionタグを使用した場合と使用しない場合とで、エラーページ表示時の動作に違いがあります。
- 制御ページでuji:includeタグを2個以上使用している場合で、
- 2個目以降のuji:includeタグ実行中に例外が発生した場合。
この場合、エラーページが以下のように表示されます。
- uji:controlSectionタグを使用しない場合、正常に終了したuji:includeタグでインクルードしたJSPは表示され、その後にエラーページの内容が追加されます。uji:includeによる出力は実行するたびにブラウザに送信されるため、このような結果となります。
- uji:controlSectionタグを使用している場合、正常に終了したuji:includeタグでインクルードしたJSPは表示されず、エラーページのみが表示されます。二重処理防止を実現するためにuji:includeの出力を一旦メモリにため込みすぐにはブラウザに送信しない仕組であるため、このような結果となります。
なお、JSPは画面表示を行う手段であるため、例外を発生させるような要因は事前にビジネスクラスで検出し、JSP内では例外が発生しないようにJSP、データBean、ビジネスクラスを作成することを推奨します。
■uji:switchタグの動作の違い
J2EE仕様への適合向上と性能向上の目的で、UJIタグの評価方法に変更が加えられました。これにより、INTERSTAGE WEBCOORDINATOR と Apcoordinatorとで以下の場合にuji:switchタグの動作に違いがあります。
- uji:switchタグにbeanアトリビュートを指定し、かつ、
- uji:caseタグのコンテントでUJIタグを使用し、かつ、
- 2のUJIタグでbeanアトリビュートを指定している場合。
上記の場合、uji:caseタグのコンテントにあるUJIタグの評価タイミングに違いがあります。
INTERSTAGE WEBCOORDINATORの場合、uji:caseの条件が評価され、条件が成立した場合にuji:caseのコンテントのUJIタグが評価されます。Apcoordinatorの場合、uji:caseのコンテントにUJIタグが出現した時点で評価されます。
この違いにより発生する影響について説明します。以下の例を参照してください。
<uji:switch bean="body" property="fullMode">
<uji:case cls="true">
<uji:comboBox bean="body" property="teamList" />
...
</uji:case>
<uji:case>
...
</uji:case>
</uji:case>
|
プロパティfullModeの値がfalseの場合、cls="true"を指定したuji:caseの条件は成立しません。この場合でも、Apcoordinatorの場合はuji:caseのコンテントにあるuji:comboBoxタグが評価されます。ここで、"body"データBeanのtermListプロパティの値がnullの場合、uji:comboBoxが使用する項目クラスが取得できないため例外が発生します。一方、INTERSTAGE WEBCOORDINATORの場合はuji:comboBoxが評価されないため例外は発生しません。
上記条件に該当する場合、アプリケーションを次のどちらかの方法で修正することにより、Apcoordinatorでも動作します。
- uji:switchタグのbeanアトリビュートと、uji:caseタグのコンテントにあるUJIタグのbeanアトリビュートが同じ場合には、uji:caseタグのコンテントにあるUJIタグのbeanアトリビュートを省略します。
- uji:caseタグのコンテントで使用する項目クラスがnullにならないように、データBeanに事前に項目クラスを設定しておきます。
■uji:includeタグ、uji:useBeanタグで参照するデータBeanのスコープの違い
サブウィンドウ機能およびフレーム機能対応のため、uji:includeタグ、uji:useBeanタグで使用するデータBeanのスコープが、INTERSTAGE WEBCOORDINATOR V3.0L20と比べて変更になっています。
- INTERSTAGE WEBCOORDINATOR V3.0L20の場合、データBeanをリクエストスコープから検索します。現在処理中のリクエストでsetResponseメソッドにより設定されたデータBeanだけが参照されます。
- Apcoordinatorの場合、データBeanをセションスコープから検索します。現在処理中のリクエストの処理中に実行されたsetResponseBeanメソッドだけでなく、それ以前のリクエストのsetResponseBeanメソッドによって設定されたデータBeanが参照される場合があります。
uji:includeタグ、uji:useBeanタグの動作をINTERSTAGE WEBCOORDINATOR V3.0L20と同じにするには、初期化パラメタuji.includeSessionScopeBeanにfalseを指定してください。初期化パラメタはWebアプリケーション環境定義ファイルに記述します。以下は記述例です。
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<context-param>
<param-name>factory</param-name>
<param-value>sample2.Sample2Factory</param-value>
</context-param>
<context-param>
<param-name>uji.includeSessionScopeBean</param-name>
<param-value>false</param-value>
</context-param>
<taglib>
<taglib-uri>uji-taglib</taglib-uri>
<taglib-location>/WEB-INF/ujiall.tld</taglib-location>
</taglib>
</web-app>
|
■uji.methodリクエストパラメタのデフォルトでの使用可否状態の変更
Apcoordinator V5.0L10、または、INTERSTAGE WEBCOORDINATORで作成したアプリケーションで、isUjiMethodAvailableメソッドをデフォルトのまま使用し、uji.methodリクエストパラメタを使用している場合は、アプリケーションの修正が必要です。
ユーザ定義のアプリケーションクラスを作成し、isUjiMethodAvailableメソッドをオーバライドしてtrueを返却するようにしてください。アプリケーションクラスについては、アプリケーションクラスを参照してください。
■HttpServletRequestから取得されるリクエストパラメタの文字エンコーディング変換の有無の違い
送信データの文字エンコーディング変換をApcoordinatorまたはINTERSTAGE WEBCOORDINATORで処理している場合、
Apcoordinator V5.0L10、または、INTERSTAGE WEBCOORDINATORでは、
javax.servlet.http.HttpServletRequestからリクエストパラメタを取得すると、Apcoordinator または INTERSTAGE WEBCOORDINATORによって文字エンコーディングの変換が実施済みの文字列が得られます。
Apcoordinator V5.0L10またはINTERSTAGE WEBCOORDINATORで作成したアプリケーションで以下の処理を行っている場合には、アプリケーションを修正して、com.fujitsu.uji.util.Parametersクラスからリクエストパラメタを取得してください。
- javax.servlet.http.HttpServletRequestインタフェースから直接リクエストパラメタを取得し、かつ
- 取得した文字列が、ApcoordinatorまたはINTERSTAGE WEBCOORDINATORによって文字エンコーディングの変換が実施済みであることを想定している場合。
Parametersクラスからは、Apcoordinatorによって文字エンコーディングの変換が行われた文字列が取得されます。
以下は、ビジネスクラスのメソッドおいて、Parametersクラスからリクエストパラメタ"userName"の値を取得する例です。
import com.fujitsu.uji.GenericHandler;
import com.fujitsu.uji.DispatchContext;
import com.fujitsu.uji.http.HttpDispatchContext;
import com.fujitsu.uji.util.Parameters;
public class SampleHandler extends GenericHandler {
public void someMethod(DispatchContext context, BodyBean dataBean) {
Parameters parameters = ((HttpDispatchContext)context).getParameters();
String value = parameters.getSingleValue("userName");
...
}
}
|
■アップロード可能なファイルサイズのデフォルトの上限値の変更
セキュリティ強化のため、アップロード可能なファイルサイズのデフォルトの上限値を16Mバイトに設定しています。
Apcoordinator V5.0L10 および INTERSTAGE WEBCOORDINATORでは、デフォルトではサイズの制限はありません。
Apcoordinator V5.0L10またはINTERSTAGE WEBCOORDINATORで作成したアプリケーションで以下に該当する場合は、アプリケーションを修正して、ファイルサイズの上限値を変更する必要があります。
- アプリケーションクラスでgetMimeTransferSizeLimitメソッドをオーバライドせず、かつ、
- 16Mバイト以上のファイルがアップロードされることを想定している場合。
修正は、アプリケーションクラスにgetMimeTransferSizeLimitメソッドをオーバーライドして、アップロード可能なファイルサイズの上限値を返却するようにしてください。上限値の単位はバイトです。
以下は、getMimeTransferSizeLimitメソッドの記述例です。
import com.fujitsu.uji.ApplicationProfile;
public class SampleApplication extends ApplicationProfile {
public long getMimeTransferSizeLimit() {
// ファイルサイズの上限値を32Mバイトに指定します。
return 32*1024*1024;
}
}
|
なお、getMimeTransferSizeLimitメソッドで0を返すことによってサイズの制限を無くすことができますが、セキュリティの観点から上限値を設定することを推奨します。
■UJIタグが生成するHTMLの変更
Apcoordinatorのバージョンアップに伴う機能追加や最適化のために、
UJIタグリファレンスに記載の仕様の範囲内で、UJIタグが生成するHTMLパターンが変更されています。
変更内容には、HTMLタグの追加・削除、リクエストパラメタの変更が含まれます。
HTML比較による自動テストツールを利用する場合などは、差異となります。
Apcoordinatorを新しいバージョンに置き換えた場合でもアプリケーションが正常に動作するようにするため、UJIタグリファレンスに記載されている場合を除き、UJIタグが生成するHTMLを仮定した処理は作成しないでください。
■uji:tableViewタグおよびuji:treeViewタグのアトリビュートの修正
uji:tableViewタグおよびuji:treeViewタグの以下の問題を修正しました。
- JSPファイル1個の中でuji:tableViewタグまたはuji:treeViewタグを2個以上使用し、2個目以降のタグでアトリビュートの値を省略した場合にデフォルト値が適用されず、以前実行されたタグのアトリビュートで指定した値が適用される場合があります。
この問題が発生するのは、uji:tableViewタグとuji:treeViewタグの以下のアトリビュートで";"で区切った値を指定し、区切られた値の一部を省略した場合です。
columnWidth
columnInputWidth
columnInputHeight
indentIcon
indentIconUseImage
header
headerInsets
headerBackground
headerForeground
headerFontStyle
headerFontWeight
headerFontSize
headerTextDecoration
headerAlignmentHorizontal
headerAlignmentVertical
headerRuleWidth
headerRuleColor
headerRuleType
headerNoWrap
headerUseImage
dataInsets
dataBackground
dataForeground
dataFontStyle
dataFontWeight
dataFontSize
dataTextDecoration
dataAlignmentHorizontal
dataAlignmentVertical
dataRuleWidth
dataRuleColor
dataRuleType
dataNoWrap
dataUseImage
dataStripeBackground
dataEmpty
dataEditable
dataCellType
- JSPファイル1個の中でuji:tableViewタグまたはuji:treeViewタグを2個以上使用し、そのタグでmultiRowアトリビュートを使用した場合に、2個目以降のタグでは以前実行されたタグのmultiRowアトリビュートの値が使用される場合があります。
これらの問題は以下の製品で発生します。
本製品では修正済みであるため、以下の製品で問題が発生していたアプリケーションを本製品に移行するとタグの動作が変わります。
- Windows版
- Interstage Apcoordinator Web/Standard/Enterprise Edition V5.0L20以前
- Interstage Application Server Standard/Enterprise Edition V6.0L10
- Interstage Application Server Plus V6.0L10A 以前
- Interstage Application Framework Suite Web Edition V6.0L10A 以前
- Interstage Apworks Modelers-J Edition V6.0L10
- Interstage Application Server Plus Developer V6.0L10 以前
- Solaris OE版
- Interstage Apcoordinator Web/Standard/Enterprise Edition 5.1 以前
- Interstage Application Server Standard/Enterprise Edition 6.0
- Interstage Application Server Plus 6.0 以前
- Interstage Application Framework Suite Web Edition 6.0
- Linux版
- Interstage Apcoordinator Web/Standard/Enterprise Edition V5.0L20以前
- Interstage Application Server Standard/Enterprise Edition V6.0L10
- Interstage Application Server Plus V6.0L11 以前
- Interstage Application Framework Suite Web Edition V6.0L11 以前
移行前と同じ動作とするには、以下のようにJSPを修正してください。
- アトリビュートの値を";"で区切って指定する場合は、区切られた値を省略せずに明示的に記述してください。
- multiRowアトリビュートについては、
以前実行されたタグのmultiRowアトリビュートの値が使用されることを前提とせずに、
連結指定を記述してください。
各アトリビュートの指定方法の詳細は、UJIタグリファレンスのuji:tableViewタグ、uji:treeViewタグの解説を参照してください。
All Rights Reserved, Copyright © 富士通株式会社 2000-2005