サーバーサイドJava入門 応用編 研修コースに参加してみた
研修コース参加レポートの第4回は↓です。
サーバーサイドJava入門 応用編
前回までは画面ポチポチしてコードが自動生成されて、オブジェクト指向サイコー、という感がありましたが、今回はWeb開発全般でその恩恵に預かるためには、面倒な手続きも書かねばならないことがわかり、なかなかJavaのWeb開発も難しいと感じました。特にJavaBeansとDAO。。。
- 前回の記事
とはいえ、プログラミング (1) から受講し、JavaでWebアプリを作るまで、何をどの順番で学ぶのか、とても見通しが良くなりました!
300ページぐらいの本にして軽く3冊以上はある、はるか長い道を、上から眺められた気分です!
では、どんな内容だったのか、レポートします!
もくじ
MVC
前回サーブレットからJSPを返すところまでをやりましたが、今回は最終的にDBにアクセスして、レスポンスをサーブレットとJSPで返す、までをやります。
これでJavaでWebアプリケーションを開発するのに、必要な技術をすべて学んだことになります。
まずWebアプリケーションを作るとき、よく使われるデザインパターンとして、 MVC を紹介してもらいました。
- Model は DBにアクセスして通常のJavaプログラムで処理を書く役割
- View は JSP がやり、クライアントに画面を表示する役割
- Controller は Servlet がやり、ModelやJSPのデータの受け渡す役割
それぞれ役割を決めて開発できるようになっているとのお話で、新人研修では、だいたいModelを担うのが一番プログラミングが出来る人が担うそうです。
また、あくまで↑はJavaでのWeb開発でのMVCの捉え方なので、これは言語やツール、個人の趣向などによって変わるそうです。
フォワードとリダイレクト
このあたりから複雑になってきます。。
前回の最後に、JSPとサーブレットの実行主体は同じであることを学び、実際にサーブレットを使わずJSP単体でレスポンスを返せました。
ということは、サーブレット実行中はJavaのコードが動いているため、そこからJSP(見かけ上は、JavaのコードではなくHTMLファイル)を直接呼び出せません。
つまり、サーブレットがレスポンスを返せません。。。(ナント!!)
そこで、 フォワード と リダイレクト という機能を使うとのことでした。
- フォワードを使う場合、1つのページで処理があるときに使う // レスポンスを返す
- リダイレクトを使う場合、例えば、商品カゴページから購入ページに切り替えるときに使う
- ブラウザがカチカチっと音がして、URLが変わってるときはこれを使っている
このフォワードとリダイレクトをどのように実現しているのかソースコードを眺めて、実際動かしてみました。
chromeではカチカチといいませんでした。。
(ちなみに、フォワードで使っていた RequestDispatcher
はオブジェク指向の委譲だーと、過去のコースを思い出していました)
理解度チェック問題
今回のコースはソースコードも長く、仕組みの話も多かったので、穴あきクイズにも取り組みました。
難しかった仕組みを再整理できたので、とてもよかったです。
JDBCとDAOパターン
JDBC
いよいよDBアクセスです。
DBアクセスはModelがやりますが、Modelと言っても、2つに分かれて、 ロジックモデル とデータベースアクセスだけを行う データモデル の2つに分かます。
- Model
- ロジックモデル
- データモデル
- Controller
- View
このデータモデルを実現するクラスライブラリが JDBC です。
JDBCを使えば、予め用意されたDBアクセス用のクラスに任せて、プログラマはロジックモデルに集中できます。
ここも役割分担、分業なんですね。
DAOパターン
今回のサンプルプログラムではIDと名前だけがある従業員表、 EMPLOYEE
というテーブルを用意していただきました。
講座だと、この辺は自分でDDL、DMLを書いてテーブルを作らなくてよいので、学びたいことに集中できますね。
さて、 DAOパターン です。ダオ、略は Data Access Object です。
これもデザインパターンの1つで、DBにあるテーブルごとにクラスを作って、テーブルの定義、データの取得、格納だけを行う役割をもたせて( JavaBeans と呼ばれます)、DAOクラスにテーブルを操作する役割を持たせます。
…… 聞いていると、どっちかだけ書けばよい気がして、矢沢さんに質問すると、他にも理由はありますが、この辺はJavaがまだモダンではないところなんですねぇ、ということでした。
がんばれ、Java!!
ということで、用意されたサンプルコードを解説してもらいました。
ここでは気付いたことや説明されたことを書きます。
テーブルごとに JavaBeans を用意して、 テーブル情報とデータ取得と格納する処理だけ を書く
Employee.java
で保存する- データの属性や、あくまで決まりきったことを書くので、
java.io.Serializable
という宣言をする - データの取得や格納には
get
set
というメソッドを使うgetName()
名前を取得setName()
名前を格納
テーブルごとに DAOクラス を用意して、 テーブル操作 を書く
EmployeeDAO.java
で保存するSELECT NUMBER, NAME FROM EMPLOYEE WHERE NAME LIKE ?
のようなSQLを書いたりする- SQLで取得した配列をコレクションにいれる、といった処理を書く
- JDBCをめっちゃ使う
スコープ
Modelからデータを取得したところで、サーブレット->JSPへのデータの受け渡しのお話です。
先にフォワードとリダイレクトで、サーブレットやJSPが交互に実行されます。
このため、Javaではその実行している間、データを一時的に格納する場所を用意していて、それが スコープ とのことでした。
そのデータを格納する場所が、 JavaBeans でした。ちゃんと役割がある!!
このスコープの中でもよく使うのが、リクエストスコープとセッションスコープのデータの流れを説明してもらい、実際サンプルコードを動かして、確認してみました。
- リクエストスコープ
- セッションスコープ
スコープにいつまでデータが保管されているのか、これもご紹介していただき、1つのリクエストスコープはリクエストからレスポンスが返るまで、セッションスコープはブラウザが閉じられるまで(プログラムが終了するまで) ということでした。
よく耳にする、セッションが切れる、とはそういうことかーと、一人合点しました。
EL
いよいよ最後です。長い。。複雑。。。。
最後は、DAO->スコープ(JavaBeans) と渡ってきたデータをJSPに表示するとき、今のままではJavaのソースコードがむき出しになっていて、デザイナーが書けない、という状態です。
それを隠す仕組みが EL です。イーエル、Expression Language の略です。
- before EL
<% emp.get(Name) %>
- after EL
${emp.name}
ELとセットで使われるのがJSTLで、デザイナーには直感的なタグ <>
</>
で表現できます。
- ELとJSTLを使ったJSPのサンプル
最後に、ELとJSTLを使っていないJSP、使ったJSP、どちらもサンプルプログラムを実行して結果を確かめました。
これでJavaでWebアプリケーションを開発するのに必要な技術を、すべて学びました!!
Webアプリを作ろう!!
まとめとして、実際にWebアプリケーションを作ります!
と言っても、一から書く時間は無いので、予め用意されたソースコードに空欄を設けて、そこに書いていく形式です。
ソースコードを読んで理解していないと出来ないので、とても理解に繋がりました!!
- 空欄のプログラム例
この空欄を埋める演習に取り組んで、このコースは修了しました!
まとめ
この研修コースでは、JavaBeans・DAOパターンを使って、DBにアクセスしてレスポンスを得ること、JSPからJavaのコードを隠して使う方法を学び、最後にWebアプリケーションを作ってみました。
用意された部品によって、とってもラクに開発できるようになったとはいえ、Webアプリケーションという複雑な仕組みを作るには、フォワード、リダイレクト、スコープのような、やはり複雑な技術も必要で、JavaBeansのような約束事も必要なことがわかりました。
世の中、甘くは無い。
最後に、プログラミング<1>から、このサーバーサイドJava入門 応用編 に参加すると、ショートカットしながらJavaでWebアプリケーション開発上で必要な技術を眺められるので、自身で一から学ぶより、とてもスムーズに習得できると思います!
SEカレッジが気になった方はこちらからお気軽にお問合わせ下さい!
SEカレッジの詳細をご覧になりたい方はこちら!!
SEプラスにしかないコンテンツや、研修サービスの運営情報を発信しています。