2012年3月2日金曜日

やり直し JAVAサーブレット(基礎からのサーブレット/JSP [改訂版] )その3

(p56) 練習問題

現在時刻を返してくるサーブレットを作成させる問題。
なにやら ”java . util . Date()” なるクラスを使うようだ。
いきなり ”PrintWriter out = response . getWriter()” など
を使えば実現できるとの ヒント が出てくるが、
PrintWriter とか もやもやした状態で なんだか気持ちが悪い。
ここまでいつもそんな心境でホントに技術を習得できるのか心配だった。

とりあえず、
①エディターに HelloServlet を読み込み、それを編集後、
名前をつけて classes フォルダ 内 foo フォルダ に保存。
②ディレクトリ WEB-INF へ移動して、 >compile foo/NowServlet . java
エラーが1件( ”;”のつけ忘れ)でたが、難なく
classes フォルダ 内 foo フォルダ に NowServlet . class が生成された。
③web.xml にコードを追加し、
④( Tomcat を再起動することなく )ブラウザに  ~/NowServlet と入力
⑤無事、ブラウザに現在時刻が表示された。

今回の練習問題では、
コンパイルの際に1件のエラーは出たものの、エラーメッセージが理解できた。
また、 ほとんど直感で回答できた。
もやもやしっぱなしではあったが、それなりに実力はついているようで、
ちょっぴり安心した。


(p59) HTMLを出力するサーブレット

ブラウザに ”こんにちは” と表示するだけのサーブレット。
ポイントは、日本語を表示させる為の約束事を確認すること。
doGet()メソッド内、最初の段階で response インスタンスが持つ
setContentType()メソッドで response インスタンス自身に
情報をセットしている。 

詳細はまだもやもやしているが、先へ進むことにしよう。

※一般的な Web アプリケーションでは ” text/html ” とセットするのとの事。
※tomcatでは デフォルト文字エンコーディングが ISO-8859-1 に設定されて
いる為 setContentType()で 日本語の文字円コーディングを設定しなけ
ればブラウザに日本語が表示されない。
※setContentType()で指定した文字円コーディングは PrintWriter からの
出力に利用される。
※PrintWriter オブジェクトを取得する前に、setContentType() を実行しなけ
ればならない。 


(p65) プレーンテキストを表示するサーブレット

”(text/plain; charset=Windows-31J”) と
”(text/html; charset="indows-31J”)  の違いを確認する。

html は<br>が改行を意味するので、ここでは文字列が連続されて表示する。


(p69) 練習問題

P51で出てきた OracleServlet とほぼ同じ技術。違いは日本語を出力するかどうか。
※ setContentType() メソッドを使用する。



(p73) web.xmlの基本

XML(eXtensible Markup Language) とは、文書やデータの構造をあらわす為の
マークアップ言語。 これは HTML のようなタグで 文字を埋め込んでいく方式の
言語を言うらしい。また、eXtesible(拡張)が示すとおりユーザーが自由にタグを
拡張することができるらしい。タグを拡張とは? ???

教訓1 もやもやしてても取り敢えず先へ進む!


XMLの宣言
先頭の1行は <? ~ ?> で括る。これを宣言と言い、省略できるが書いたほうが良い。
ヴァージョンやエンコーディング、スタンドアロン文書(?)かどうかを記述できる。



ルート要素
単一のルート要素(?) さっぱりわからない。


要素と属性
XMLの基本単位は要素。
”文字列” の”文字列”は テキスト要素となる。


要素に付加する付属的な情報を属性と言う。 属性はタグの中に
< ○○ key=value > の形式で記述する。


大文字・小文字
区別される。


開始タグと閉じタグ
HTMLと同じ。<book> ~  </book> とする。
ちなみにテキストに出てる <book/> は誤植であろう。


XMLのコメント
コメントを記述したいときは ”<!--” 、 ”-->” で括る。
< ! -- コメント --> とする。

< ! --
コメント
コメント
コメント
--> 

と言う書き方でも良い。


スキーマ
XMLは複数のプログラムの間でやり取りされるデータである為、
文法チェックを行う仕組みを取り入れている。※省略可
XMLの構造を定義したものをスキーマと言い、これを用いて
文法チェックを行う。
最も基本的なスキーマをDTD(Document Type Definition) と言い、
さらに複雑な定義を行うため、XMLスキーマ、RELAX NG などが利用
できるらしい。API2.4以降XMLスキーマが利用されているらしい。

スキーマの定義(dtd)は下記のようなもの。
<!ELEMENT books (book *)>
(!ELEMENT book (title)>
<!ATTLIST book
isbn CDATA #REQUIRED
>

整形式(Well-Formed)と妥当(Valid)
XMLの基本的な文法(開始タグに対する閉じタグがある)を満たしたXMLは
”整形式のXML” と言い、スキーマが用意されている場合でそのスキーマ(文法)
を満たしているXMLを ”妥当なXML” という。

web . xml では、先頭に宣言があり、次にXMLスキーマを記述し、
その後に<servlet>、<servlet-name>、<servlet-mapping>、<url-pattern>などが
続く。
ここまで何度となく記述していた web.xml は宣言、XMLスキーマなどを省略していた。

<web-app> ~ </web-app> の中に記述していましたね。

HTMLでも、しっかり宣言を入れておいたほうが良いとの話を耳にした事があるが、
※省略可  XMLが少し見えてきた感じがする!!


(p82) invokerサーブレットの設定
今回小生が使用している Tomcat は tomcat7 である。
conf フォルダの中に web . xml はあるのだが、” invoker ” の記述がない。
ググッてみたら、tomcat7 からは invoker サーブレットはなくなっているらしい。
人類みんなごくつぶし さんのブログに詳しく載ってました。

ここの記述は少々複雑でいまいち整理できていないが、
invoker と言う名前で servlet-name を定義して、
servlet-class としては、 何かの サーブレット . class
定義 (コンテナ内にあるの?) し、
pattern/servlet/* として、
ブラウザからフルパスでクラスを指定できるようにしている。

この結果、いちいち作成したサーブレットを web . xml に登録しなくても
良いようになる。

基本、サーブレットは web . xml に登録しないと実行できない。
invoker サーブレットは Tomcat 独自の機能。
invoker サーブレットは セキュリティ上の問題がある。




情報処理 再チャレンジ ブログ ホーム へ

0 件のコメント:

コメントを投稿