著者: | 佐藤裕介 (nuts@cclub.cc.tut.ac.jp) |
---|---|
バージョン: | 2005/04/28 00:30:00 +0900 (JST) |
古川正寿著「速習サーバーサイド Java」(ソフトバンク、2004)は、 JSP や サーブレットについて「これまで Java なんかちょっとしか触ったことがない よ」という私にも分かりやすいように書かれた、なかなか良い本です。本に書 かれたソースコードを実際に打ち込んで、動作を確認する、という、昔ながら の学習法を採っています。読み終わると、ちょっとしたウェブアプリケーショ ンを作ってみようかな、という気になってきます。また、2004 年 8 月の時点 で最新の正式版となっていた Tomcat 5.0 系列を画面の例に使っていたあたり もポイント高し、でした。
ところが、この本には誤植が多く、私自身そのために本の途中で何度も詰まり ました。そこで、私が発見した「これって変じゃないの?」というポイントを まとめてみました。この本で JSP やサーブレットの勉強をしよう、と思って いる方の手助けになれば幸いです。
以下の環境で「変じゃないの?」という感じがしました。
p.3 Table 1-1 "Enterprise Java Beans 2.0 (EJB 2.0)" の行
ビジネスロック(データベースアクセス処理など)を……
ビジネスロジック(データベースアクセス処理など)を……
p.11 1-3-1 [JSP の基本機能] 1 行目
…… HTML などのメークアップ言語を
…… HTML などのマークアップ言語を
p.14 1-3-2 コード例 強調部分
日本語が化けていますが、これは意図したものなのでしょうか?
p.14 まとめの (2)
(2) HTML などのメークアップ言語中に……
(2) HTML などのマークアップ言語中に……
p.52 2-4-1 [work] のタイトル
[work]
[work ディレクトリ]
p.52 2-4-1 [work] 2 行目
す。JSP を Java のコードに返還し、……
す。JSP を Java のコードに変換し、……
p.94 [6] Tomcat の起動、Web アプリケーションの配備 [7]
・[アプリケーション]テーブルの[パス]に「/logtet」が追加され……
・[アプリケーション]テーブルの[パス]に「/logtest」が追加され……
p.95 [7] ログファイルの作成 [4]~[5]
[4] [Service] アイコンの下にある [Host] アイコンを展開します。 ・logtest のデフォルトのプロパティ情報が表示されます。 [5] ……
[4] [Service] アイコンの下にある [Host] アイコンを展開します。 [5] [Host] アイコンの下にある [Context (/logtest)] アイコンを選択 します。 ・logtest のデフォルトのプロパティ情報が表示されます。 [6] ……
p.104 List 3-16 ディプロイメントディスクリプタ 2 行目から
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.…… ... version="2.4">
上記の内容では動かなかった、はず。動作したはずのディプロイメント ディスクリプタでは次のようにしてある。
<?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>
TODO: 表示されるエラーの内容を確認すること。
p.120 List 3-23 disptest.jsp 4 行目
<title></title>
<title>DispTest</title>
p.133 [1] getParameter() メソッド コード例
HTML コンテンツ例の左側にある網かけと、コード例の左にある網かけが 繋がっています。途中で切れているべきでは?
p.135 List 3-28 req.jsp 3 行目
<head><title>ReqJspa</title></head>
<head><title>ReqJsp</title></head>
p.157 [1] getContextPath() メソッド 概要 3 行目
キストのサーブレットの場合には空字列を返す。
キストのサーブレットの場合には空文字列を返す。
p.223 [1] doFilter() メソッド 最後の行
……、testfilter のサービスメソッドが処理される。
……、aservlet のサービスメソッドが処理される。
p.225 Table 4-1 <dispatcher> タグの属性の値
デフォルトではどの値に相当する処理が行われるのか記述されていない。 TODO: デフォルトではどれが実行されるのか検証すること。
p.266 List 5-17 buttons.jsp
このコードでは、include された buttons.jsp の部分が文字化けしてしま うはず。次の行を buttons.jsp の先頭に付け加える。
<%@ page pageEncoding="Shift_JIS"%>
p.279 タグアクションの定義 5-6 行目
タグの例が次のように示されている。
<jsp:include page="ButtonsJSP.jsp"> </jsp:include>
が、たぶんこれは冗長で、次のように書いた方がラク。 TODO: 上と下で本当に違いがないか調べること。
<jsp:include page="ButtonsJSP.jsp" />
p.284 <jsp:include> タグの注意点
TODO: 本当に文字化けをするか確かめること。
p.292-p.343
TODO: まだ読んでいないので読むこと。
p.365 Fig. 6-6 画像で表示されている文字列
ドライバがロードしました。
ドライバをロードしました。
p.362 [1] getConnection() メソッド 1 コード例
コード例が getConnection() メソッド 2 のものと同じ。
p.364 List 6-5 ディプロイメントディスクリプタ 12 行目
useUnicode=true&characterEncoding=Shift_JIS (エラーメッセージを確認)
useUnicode=true&characterEncoding=Shift_JIS
p.370 [1] createStatement() メソッド コード例 7 行目
String sql = SELECT * FROM CUSTOMER WHERE CUSTNO = 1250";
String sql = "SELECT * FROM CUSTOMER WHERE CUSTNO = 1250";
p.395 10 Tomcat の起動、Web アプリケーションの配備
p.355 からビルド XML ファイル (dbtest.xml) に変更が加えられていない が、このままでは作成した JSP ファイルが配備されない。dbtest.xml の
<classes dir="classes" />
の下に、次の行を追加する。
<fileset dir="." includes="**/*.jsp" />
p.403 Table 6-2 Administration Tool の設定項目
誤
項目名
概要
例
データソース URL
...
//localhost/test?characterEncoding=Shift_JIS
正
項目名
概要
例
データソース URL
...
jdbc:mysql://localhost/test?characterEncoding=Shift_JIS
p.405 List 6-21 DBConnect.java および List 6-22 DBTestServlet.java
DBConnect クラスでは引数を持ったコンストラクタが既に定義されている ため、デフォルトコンストラクタの自動生成は行われない。そのため、 List 6-22 DBTestServlet.java の "db = new DBConnect();" の行でコン パイルエラーが出る。
DBConnect クラスの、引数を持たないコンストラクタを明示的に定義する 必要がある。DBConnect クラスに次のメソッドを追加する。
public DBConnect() {}
p.407 List 6-23 ビルド XML
このビルド XML だと、前のバージョンの DBTest が配備されていないサー バに配備を行おうとすると(上書き配備にならない場合)、web.xml がコピー されないため上手く動作しないのではないか。 TODO: 実際に実行して確認すること。
p.408 [6] Tomcat の起動、データソースの設定 テーブルの内容
[5] のテーブル
項目名 |
値 |
---|---|
JNDI 名 |
jdbc/test |
[8] のテーブル
項目 |
値 |
---|---|
グローバル |
jdbc/testdb |
[5] のテーブル
項目名 |
値 |
---|---|
JNDI 名 |
jdbc/testdb |
[8] のテーブル
項目 |
値 |
---|---|
グローバル |
jdbc/testdb |
もしくは(確かめること)、
[5] のテーブル
項目名 |
値 |
---|---|
JNDI 名 |
jdbc/test |
[8] のテーブル
項目 |
値 |
---|---|
グローバル |
jdbc/test |
p.409 7 Web アプリケーションの配備
説明がビルド XML (dbtest.xml) に archive ディレクティブがあるときの ものになっている。既に dbtest.xml は p.407 で .war ファイルを作るや り方から、$CATALINA_HOME 以下に直接ファイルをコピーするやり方へ切り 替わっているので、本当の配備の手順は次。
なお、本に書いてある通りに実行すると、アプリケーションの配備が行われ ないばかりか、データベース等の設定が全て初期化されてしまうはず。 TODO: 設定が初期化されるかどうか、つまりエラーによる被害の度合を確認 する。
p.419 List 6-26 CustUpdate.jsp 39 行目
... <%= customer.getCountry() %>">
... <%= customer.getZip() %>">
p.419 List 6-26 CustUpdate.jsp 43 行目
... <%= customer.getCustno() %></td>
... <%= customer.getEnt() %></td>
p.421 List 6-29 DBTestServlet クラスの doGet() メソッド
変更前のコードが List 6-17 で、太字部分が変更前との差分を示すとい うことであれば、このメソッドの内容全体が太字になっていなければおか しいはず。
p.422 List 6-31 DBTestServlet クラスの updateCustomer() メソッド
ソースコードの一部が太字になっていますが、このメソッド全体を追加す ることになるはず。