アフィリエイト広告を利用しています


スキル無しのシステムインストラクターから、システムエンジニアへの転身日記。
◇◆◇ 2013年取得資格
LPICレベル1
LPICレベル2
LPICレベル3 Core
LPICレベル3 Speciality 302
LPICレベル3 Speciality 303
LPICレベル3 Speciality 304

Cisco CCENT
Cisco CCNA

Java SE 7 Silver
Java SE 7 GOLD

OSS-DB Silver

◇◆◇ 2014年取得資格
HTML5 Professional レベル1

広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog

JavaEEの前に復習をしてみる その12 継承を使ってみる。

こんばんは。Javaやりたい!と会社でことあるごとに呟いているshadeです。

ちょっと、サーブレットやJSPを触っていましたが、また本来のJavaに戻ってきました。
タイトルの意味がなくなってきましたが、ゆるく生暖かく見守ってください。
さて、Java SE Goldホルダーの私ですが、プログラミングスキルが低く、
半年も離れていたらすっかり忘れてしまいましたので、思い出しながら頑張ります。

今回は、継承です。
継承といえば、他のクラスの変数の値や、メソッドの処理をあたかも
自分が持っているかのように使える技術です。(そのほかにもたくさんありますが)
とりあえず、浅く思い出すために、またRPGワールドでやっていきます。

戦士さん…攻撃力が高いのが自慢です。
しかし、戦士である前に人間です。魔法使いさんも、勇者さんも人間です。
ここでは、戦士さんが、人間というクラスを継承する例を使ってみます。

まず、Humanというクラスを作ってみました。
メインメソッドを持っていないので、単体では実行はできません。
ただ、jobとattackpointの値を受け取って、コンソールに出力するだけのクラスです。

package test;

public class Human {
String job= "" ;
int attackPoint ;

public void attack(String job, int attackPoint){
System. out .println(job+"は持っている武器で" +attackPoint+ "のダメージを与えた" );
}

}

続いて、戦士を表すSolidierというクラスを作ってみました。
extends Human という記述で、人間クラスを継承しています。
Soldierクラスは、attackというメソッドを持っていませんが、
Humanクラスを継承することによって、attackというメソッドを呼び出すことができます。

package test;

public class Soldier extends Human {
private static String job= "戦士";
private static int attackPoint =10;

public static void main(String[]args){
Soldier sld = new Soldier();
sld.attack( job ,attackPoint );
}
}


結果は、以下の通り。

「戦士は持っている武器で10のダメージを与えた」

よって、魔法使いや勇者もHumanを継承することによって、attackメソッドを呼び出して攻撃ができます。

うっかり、以下のようなGoblinクラスを継承すると、

package test;

public class Goblin {
int attackPoint ;
public void attack(String job, int attackPoint){
System. out .println(job+"は噛みついて" +attackPoint+ "のダメージを与えた" );
}

}



「戦士は噛みついて10のダメージを与えた」
のように、継承した先のattackの内容に変わってしまいます。
人型の戦士ではなく、ゴブリン型の戦士になったので、もはや敵キャラになってしまいました。

継承という技術は便利で、これは初歩中の初歩です。
自分が作ったクラスを継承するのはもちろん、CoreAPIのような既存のクラスを継承して作業をすることもできます。
むしろ、実務ではそういう技術が必要なので、CoreAPIを普段から読んでおくことが必要なんです

WEBアプリケーションを作りましょう その7 データ入力とjsp同士の連携

よくよく考えたら、いきなり、DBの連携とかぶっ飛びすぎたような気もしますね。
DBから値を引っ張ったり、DBに値を与えたりするやり方は前回の記事で書きましたが、
では、なんでもデータベースを使わなければいけないのか。ということも、もちろんありません。
例えば、データ送信用のJSP、データを受け取って結果を返すJSP。
この二つでやり取りをすることも可能です。

その代り、HTMLのフォーム部品のタグを覚えなければいけません。
もう、開発環境の準備から、DB用意して、HTMLのタグまで覚えさせられて…
ウェブアプリケーションデベロッパーって大変ですね。ウェブアプリケーションデベロッパーって噛みそうですしね。
ウェブアプリケーションデヴェロッパァァアア!!

例えば、選択ボックスから一つ選び、その選んだ言葉に対して答えを変える。
といったJSP。

選択させて送信するためのJSPとして、submit.jsp。
選択した結果を受け取って、表示するJSPとしてanswer.jspを用意します。

submit.jsp

<%@ page contentType= "text/html;charset=UTF-8" %>

< html>
< head>
< meta charset= "UTF-8" />
< title> 送信フォーム  </ title>
</ head>
< body>
< form method= "POST" action = "answer.jsp">
あなたの血液型は?
< select name= "bloodtype" >
< option value= "a" >A型
< option value= "b" >B型
< option value= "o" >O型
< option value= "ab" >AB型
</ select>
< input type= "submit" value = "送信!" />
</ form>
</ body>
</ html>


answer.jsp

<%@ page contentType= "text/html;charset=UTF-8" %>

< html>
< head>
< meta charset= "UTF-8" />
< title> 結果フォーム  </ title>

< body>
<%
String bloodtype = request.getParameter( "bloodtype" );

if (bloodtype.equals("a" )){
out.println( "A型だと思いました" );
} else if (bloodtype.equals("b" )){
out.println( "あー、B型っぽい!" );
} else if (bloodtype.equals("b" )){
out.println( "うん、O型だね!" );
} else if (bloodtype.equals("b" )){
out.println( "ですよね。ABのオーラが出ています!" );
} else{
out.println( "・・・" );
}

%>
</ body>
</ form >
</ html>


submit.jspによってbloodtypeに値を持たせて、answer.jspに飛んだ後、
request.getParameterにて、bloodtypeの値を取得して、
その結果をif文で照合し、その結果をプリントするといったもの。

これも立派な動的処理になるかな。
このやり取りを、前回のJavaの記事を応用すれば、
データをデータベースに持たせることもできますね。

結果画面は、こんな感じです。

WCP_07.jpg

WCP_08.jpg

昔流行ったゲームブックみたいなプログラムならすぐ作れそうですね。
選択肢ごとに、変数に値を持たせて、最終的な数値でハッピーエンドになれるか。
みたいなものなら、あっさり作れると思います。
サーブレットの出番なし。jspのみで作れますね。

セミナー&勉強会情報

セミナー&勉強会情報

本日は、セミナー情報3本立てです。


【LPIC&OSS-DB&HTML5勉強会】
http://www.lpi.or.jp/news/event/page/seminar20140212/

2月12日(水)、19日(水)、3月1日(土)、5日(水)、8日(土)

私がOSS-DBを取得した時に利用した勉強会が、また開催されます。
しかも、今度は、LPIC&OSS-DB&HTML5
形式としては、教室に質問のできる先生が待機している自習形式。
黙々とやるもよし、事前に分からないことだけまとめて、がっつり質問!
ということもOKです。
ただし、先生といっても、ボランティアのチューターさんですので、
確実に答えられるとも限らないのだけは、理解していくと良いと思います。

ちなみに、私はLPICすべて持っていますが、チューターなんて、とってもできません。
がっつり、Linuxな方々には、劣るのですね。

私も参加したいですが、HTML5をまだ受けたいと思わないので、
今回は不参加かな。懇親会楽しいんですけどね。

【HTML5プロフェッショナル認定試験ポイント解説無料セミナー】
http://html5exam.jp/news/news140115_1.html
2014年2月22日(土)
セミナー開始 13:30〜(受付開始 13:15)

最近、セミナーがバンバン実施されてますね。
今回は、クリーク・アンド・リバー社主催です。
先日名刺交換させていただきましたが、最近、すごい力入れているみたいですね。
とっても興味はあります。これも参加したい!…のですが、
もう一個別のセミナーとまるかぶり…。
HTML5の学習って、いつでも始められるようなイメージがあるので、
だいぶ先延ばししちゃってますが、プログラマーとしても、
Webの画面設計において、HTMLとJavaScriptの連携は切っても切れませんからね。
そして、今、レスポンシブWebデザインにはまっているし。

次こそは参加できるかな…。


【2/4開催 OCJP Gold SE 7 無償試験対策ポイント解説セミナー】

http://www.oracle.com/jp/education/news-172121-ja.html?sc=JPOU13045624MPP011C004#20131225-1
2月4日(火)18:00〜20:00(受付開始 17:30 )

なぜ、平日のこの時間に…。ゴールドは理解浅いまま取得してしまったので、
もっていますが、理解のために参加したいのですが、日程が無理だわ・・・。

そして今なら、再受験可能チケット付きらしいです。
http://www.oracle.com/jp/education/campaign-1898205-ja.html#OCJP2

今は参考書も売っているし、セミナーまであって、再受験可能チケットもある。
なんて受験生にやさしい・・・。さきがけ受験はいいことないなw
なんて、いたせりつくせりなんでしょう。

Javaプログラマーになるために

たまには、技術系じゃなくてつぶやき系のブログも書いてみる。

まず、大事なことを。
コメントしたいのにできないという皆様。申し訳ありません。
原因がわかりませんが、私の仕業じゃないことは確かです。
本当に困る!コメント欲しい!!コメント返したい!交流したい!

さて、本題に・・・
Javaプログラマーになりたくて転職をした私ですが、インフラ三昧。
というのは、さんざん吐露しておりまして、Galaxylogたまに見てるよ!
というには常識レベルの知識ですが。。。

本格的にインフラに閉じ込められそうになったので、上訴しました。
そして、インフラ&開発を掛け持ち、開発スキルを手にして作業できるレベルになったら
インフラから抜いてもらうよう交渉しました。

そして、いろいろと遠回りしたな・・・と思うことを反省しています。
まず、Javaの資格の勉強は知識を固めるためでした。まぁ、これはいいね。
しかし、SilverとGold、両方とも実務レベルには程遠い。
そして、とるにとりますが、ウェブコンポーネントデベロッパーに関しても、
まず、最初からjspだServletだ・・・とプログラムを書き始めるわけではないということ。

まずは、基礎ができてるの?という話になると思いますが、
ここで言う基礎っていうのは、初めてのプログラミング的な本で言う、
for文、ループ文、if文とか、そういうレベルではなく、
オブジェクト指向の「カプセル化」「継承」「ポリモーフィズム(多態性)」も抑えつつ、
Java Core APIを読める、理解しているのかという話だと思います。

他人のコードを読む、コーディングの可動範囲を広めるには、APIを使いこなすということ。
これらを使わないでコーディングするということは、熊を倒すために腕立て伏せから始めて、
強靭な肉体を作り上げていくことと同じで、相当な時間がかかるのと、限界の壁との戦いです。
APIの理解を深めれば、基礎体力をつけたらあらゆる武器を持ち扱い、熊と戦うための
適した武器を使い戦うことができるでしょう。

というわけで、読むか・・・ Core API。毎日の読書にCoreAPI。
それくらいやらないと、なれないよね。。。

Webアプリケーションを作りましょう! その6 データベースとの連携

さて、データベースの環境も整いまして、
データベースのデータを引っ張り出してウェブページに表示したいと思います。

JSPを用意して、DBに接続するコードを書いて、そのあとに情報を引っ張り出す。
という風に一つに処理を書いてもいいのですが、
また新たなJSPを作るときに、また接続のためのコードを頭から書かなければいけません。

逆に、DBに接続するクラスを一つ用意して、
データベースに接続して情報を表示するだけのJSPを用意するようにすれば、
今後JSPをいくつ量産しても、そのDB接続用のクラスを使いまわせばいいので、
コードに無駄がありません。

それでは、最初に、DBに接続するためのクラスを用意します。

1.DBに接続するクラスを用意


Eclipse→新規→クラス→「ConnctorManager」(名前は適当)

package testWeb;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectorManager {
final static String DRIVER = "com.mysql.jdbc.Driver";
final static String URL ="jdbc:mysql://localhost/webapp";
final static String USER ="root";
final static String PASS ="pass";

public static Connection getConnection() throws SQLException{

try{
Class. forName(DRIVER);
} catch (ClassNotFoundException e){
e.printStackTrace();
throw new IllegalStateException("クラスのロードに失敗しました: "+e.getMessage());
}
Connection con = DriverManager. getConnection(URL,USER, PASS);
return con;

}
}


はい、残念なことにいろいろと解説しなければならないですね。

まず、import文で、下記3つを用意しています。
データベースに、url,user,passwordを持たせて接続するために必要とだけ思ってもらえれば。
import java.sql.Connection;
import java.sql.DriverManager; 
import java.sql.SQLException;

そして、try-catch これは例外処理で、tryで囲った部分を試して、
catchで指定したエラーが返ってきたら、catchで囲った内容を実施してね。
といったものです。あらかじめ発生する可能性のある例外処理を記載しておくのです。

なので、難しそうではありますが、ConnctorManagerのgetConnectionが呼ばれたら、
例外でなければ、DriverManager. getConnection( URL, USER, PASS );の値を呼び出したプログラムに
渡してね。といった内容。

つまり、DBの場所と、ユーザー名とパスワードを定義しているだけなんですね。

2.JSPからDBの内容を表示する

JSPを作成します。

accountinfo.jsp

<%@page contentType="text/plain; charset=UTF-8" %>
<%@page import= "testWeb.ConnectorManager,java.sql.*" %>>

<%
try{
Connection con = ConnectorManager.getConnection();
Statement smt = con.createStatement();
ResultSet rs = smt.executeQuery("select * from testaccount");
while(rs.next()){
out.println( "ID:" +rs.getString("USERID" ) +",NAME:"+rs.getString("USERNAME" )+",PASS:" +rs.getString("USERPASS"));
}
smt.close();
con.close();

}catch (SQLException e){
e.printStackTrace();
}
%>


JSPでもAPIのインポートは実施できます。
<%@ page import= "testWeb.ConnectorManager,java.sql.*" %>>行で、
ConnectorManagerクラスと、java.sql.*をインポートしました。

Statement … データベースにSQL文を送信するためのStatementオブジェクトを生成。
ResultSet … 指定されたSQLを実行

この2つの中身がどうやって動いているかまでは理解しなくても、
Connectionで接続して、Statementでオブジェクトを生成して、ResultsetでSQL文を実行。
といった順番で処理を行っているのはわかります。

そして、
while (rs.next()){
out.println( "ID:" +rs.getString("USERID" ) +",NAME:" +rs.getString("USERNAME" )+",PASS:" +rs.getString( "USERPASS"));
にて、テーブルの行一つ一つを最終行まで、ループさせて、そのつどテーブルの中身をプリントしています。

そして、http://localhost/testWeb/accountinfo.jspを実行すると、

このように、select * from testaccount が実行され、
その中身の1行1行がプリントされました。

WCP_06.jpg

このようにjsp(サーブレット)ではテーブルの中身を表示させることができます。
お分かりかと思いますが、
ResultSet rs = smt.executeQuery( "select * from testaccount");
この行のSQL文でINSERT INTOのような追加分を発行すれば、DBのデータを上書きすることができます。
こういったやり取りで、入力出力をDBとの連携させて行うことができ、
その結果をWEBに表示することで動的なページを生成しているわけです。

あとは、この応用で動的なページはどうにでも作れるかと思います。

いったん、Webアプリケーションを作ってみよう!は、休憩しましょうか。
1記事1記事にすごい時間がかかるww



<< 前へ     >>次へ

先頭に戻る

×

この広告は30日以上新しい記事の更新がないブログに表示されております。