プログラミングと日々思ったことなど

ブログ名通りです。仕事でプログラミングをはじめました。

ハッキングの本をはじめて読んだ【IOT】

セキュリティ関係も勉強したいなと思っていて、かつIOTにも興味があったので、この本を読みました。
この本の中で、ハッキングする方法として
①IOT機器とスマートフォン間の通信のみを解析する。
②基板から組み込まれたプログラムを抽出、解析してハッキングする。
この大きく2つの攻撃パターンがある。

①の方が難易度が低く、時間もコストもかからない手法です。
ですが以下のように書かれていました。(P35)

難易度が低く時間もコストもかからない手法は①になるでしょう。
しかし、①の手法はホワイトボックステストソースコードや仕様書などを用いてシステムに攻撃するアプローチ)とブラックボックステスト(実際の攻撃者による視点でシステムに攻撃するアプローチ)の概念から考えると、ブラックボックステストに分類される手法で、発見される脆弱性ホワイトボックステストに比べて成果はかなり低くなると予想できます。

①の方がセキュリティの穴が見つかりにくいのか。
そして②の方法については

基板に組み込まれたプログラムを抽出することで、例えばバイナリファイルとして電子錠の挙動を調べることができます。
ここで、もしスマートフォンなどの通信からは発見できない「管理者機能」のような隠れたモードを発見できれば大きな成果となります。
また、もしスマートフォンから送信する値に関連したプログラムロジックというものが明確になります。

②の方が大きい結果が出ると。
で、この本も②のハッキングテクニックの説明が書かれてある(まえがきにも書かれてあった)

色々な方法を読んだ上で、基板の部品の名前(UARTとか)とそれが何なのかも少しわかった。
ので、自宅にあったものを分解した。

会社の忘年会ビンゴで当たったもの。
余談ですが、これ結構面白かった。思った以上に会話ができる。

中身はこうなってました。

f:id:boa0203:20190101103313j:plain:w300

裏面


f:id:boa0203:20190101103951j:plain:w200

有識者によると
黄色丸→CS8571Eという部品。オーディオ関係
緑丸→抵抗

参考書に出てくる部品のような、通信機能を司るものは反対側の

f:id:boa0203:20190101104458j:plain:w200
ここにあると思うのですが、接着剤のようなもの(グルーというらしい)で貼っつけてあって確認することができませんでした。

そうして色々考えたのですが、ハッキングできるようになるにはもっと電子部品に関する知識を身につけた方が良いなという結論になりました。

そこで、以下のようなものを購入しました。

[asin:B07BHZNTSV:detail]

Raspberry Pi クックブック 第2版 (Make:PROJECTS)

Raspberry Pi クックブック 第2版 (Make:PROJECTS)

  • 作者:Simon Monk
  • 発売日: 2017/08/25
  • メディア: 単行本(ソフトカバー)

買ったものが届くのが楽しみです。

以下、個人的な感想
はじめて読むには難易度が高かったです。
しかし、具体的なテクニックを見ていると自分もここまでできるようになりたいと思えたので買ってよかったなと思いました。
以前TCPIPの参考書を読んだ時、1から丁寧に説明がなされていました。
それも良本でしたが、少し難しめのものを買ってみるのも悪くはないなと。
あと、用語も調べながら読めたので少しは覚えることができたのも収穫でした。

RDBについて【正規化、論理学】

この本を読み終わったので、忘れないうちにまとめます。
断定して書いているが、間違っていることもあると思う。
「'---」が付いている行は個人的に感じたこと。

リレーショナルモデルとは、現実世界のデータを「リレーション」と呼ばれる概念を用いて表現するデータモデルのこと。
→データをリレーショナルモデルという考え方を使ってデータを表現する。

'---オブジェクト指向もプログラミングの考え方の1つというイメージだった。
'---RDBはデータの捉え方とそのデータをまとめる方法。

このRDBで最も重要な概念が、リレーション。
SQLにおいてリレーションに相当するものは、テーブル。

リレーショナルモデルでは見出し(Heading)と本体(Body)のペアで構成されている。
この見出しは属性の集合で、本体は属性値の集合である組、タプル(tuple)の集合である。
→属性というのは、名前とデータ型のこと

リレーショナルモデルは集合論に基づいたものであり、論理学に基づいたデータモデルでもある。
論理学は命題(真か偽かを問うもの)を扱う学問。
ある命題の真偽が判明している時、もっと複雑な命題の真偽はどうなのか?がテーマ。
→論理学を何故理解する必要があるのかというと、リレーションは真の命題の集合であると言えるから。

'---JOINが古いクエリではWHEREを使って使用しているのは、これが関係しているのだとわかった。
'---CASEなどの分岐も、命題の結合子(∧とか)と同じ。真のものを抽出したい。
'---量化という言葉を初めて知った。
'---量化は、集団を対象にした真偽値を問うもの。

正規化について

→正規化は、リレーション(テーブル)を扱いやすくするための理論。
 正規化理論自体は、リレーショナルモデルそのものの一部ではない。

→理論:ある物事に関して、原理、法則を拠り所として筋道を立てて考えた認識の行動体系。
    また、「実践を伴わない理論は役に立たない」のように、実践に対応する純粋な論理的な知識の意でもある。
 論理:思考などを進めていく筋道そのもの。また、道理、事柄間の法則的なつながりをいうこともある。

'---理論、論理という言葉は参考書の中でよく出てくる。
'--- ≒ 考え方 という感じで理解していたけども、「筋道の立てられている考え方」と改める。


ここからより本を理解するため、架空のテーブルを作成する。

・これは架空の人格を持つ生き物のの人生をまとめた集合
・連動するアプリケーションがあり、そこで追加、更新、削除ができる

①基本情報テーブル
 種別(人間かそうでないか) 
 性別(男、女、その他)
 出身地
 居住地
 生年月日
 候:名前

②エピソードテーブル
名前 →2NFで候補キー追加
西暦 →2NFで候補キー追加
エピソードタイトル
出来事(その年にこの人物の身に起こったこと)

BCNFで変更
②-1
候:名前
候:西暦
候:エピソードタイトル

4NFでさらに変更
 ②-1_A
 候:名前
 候:西暦

 ②-1_B
 候:名前
 候:エピソードタイトル



②-2
候:エピソードタイトル
出来事(その年にこの人物の身に起こったこと)


③関係性テーブル
名前
所属組織番号

④組織マスタテーブル
 候:所属組織番号
 候:所属組織名

思いついたのはこのくらい

このテーブル構造で良いのか考える

第1正規形(1NF)

各テーブルに重複が出てこないか?
→同一名の生物が出てこないので、重複はでてこない(と思う)

ちなみにリレーショナルモデルには主キーという概念がない。
候補キー(単にキー)という概念はある。候補キーは、テーブルに含まれる組の値を一位に決められる属性の集合。
また候補キーは、複数の種類を持つこともある。
候補キーは主キーと意味的・機能的には違いはない。候補キーを主キーと呼ぶかは主観の問題。

'---①基本情報テーブルの候補キーはスーパーキー?

各カラムはさらに分解できないか(値のアトミック性)
→名前は名と姓に分解できるが、名前という集合で意味を成せるのでOK

NULLはでないか?
→所属組織番号を持っていない生物がいるかもしれないが、その生物関係性テーブルには登録しない。
 また所属組織番号が複数持つ生物が出てくる場合、関係性テーブルは複数登録を可能とする。

第2正規形(2NF)

2NFは候補キーの真部分集合から非キー属性(Non-prime Attribute)への関数従属性を取り除く作業。
→関数従属性とは、Aの値がわかれば、Bの値が求められるということ。
→真部分集合は、部分集合のうちもとの集合自身以外のものを指す。
'---タプル全体としてみれば重複していなくても、一部で重複していて異常が生じそうなものを複数のテーブルへ分解する。
'---真部分集合が解りづらい。候補キー全体としてではなく、ある候補キーから求められる非キー属性の値に異常が出てきそうと言った意味合いかな。{x,y}

②エピソードテーブルが怪しいのではないかと思ったので、考える。
f:id:boa0203:20180930073618p:plain

データを入れて重複が発生しないか見てみる
大丈夫そうだけども、違うところで問題が起きそうなので名前と西暦を候補キーにする

第3正規形(3NF)

推移関数従属性(Transitive Dependency)を取り除く作業。
'---非キー(候補キーでないもの)同士で関数従属性が発生しているものを考える作業。
架空のテーブル群にはなさそうだけども、以下の状態だったとき分解した方がいい。

③関係性テーブル
 名前
 所属組織番号
 所属組織名

'---所属組織番号がわかれば、所属組織名は求めることができるので分解できる。

ボイスコッド正規形(BCNF)
非キー属性から候補キーの真部分集合への関数従属性で分解した方が良いものが無いか考える。
非キーが候補キーになり得てしまわないか?
②エピソードテーブルのエピソードタイトルが候補キーになり得そう。

②エピソードテーブル
 名前 →2NFで候補キー追加
 西暦 →2NFで候補キー追加
 エピソードタイトル
 出来事(その年にこの人物の身に起こったこと)

②-1
 名前 →2NFで候補キー追加
 西暦 →2NFで候補キー追加
 エピソードタイトル →BCNFで候補キー追加

②-2
 候:エピソードタイトル
 出来事(その年にこの人物の身に起こったこと)

第4正規形、第5正規形は結合従属性を取り除く作業。
→結合従属性は、リレーションを分割して再度結合しても値が失われないもの。

第4正規形(4NF)、第5正規形(5NF)

多値従属性(MultiValued Dependency)による正規化とだが、本によるとMVDは特殊なパターンとのこと。
MVDは、テーブルRの項目A、B、Cが次の結合従属性を満たす場合かつその場合に限り、B及びCはAに多値移植するという。

{AB,AC}
'---テーブルに候補キーが3つあった場合、1つの項目によって他2つが求められる場合のことかな

4NFで取り除かれるのは上記のもので、第5正規形(5NF)で取り除かれるものは

{AB,BC,CA}

このようなもの。
'---4NFではAによってのみBとCが求められたが、5NFではA以外でも結合従属性がある時どうするかを考えるものみたい
'---本文を見ると、リレーションの条件はどうであったか、分解したリレーションがこれで良いのかも見ていた。

4NFについて見ると、②-1のテーブルがさらに分解できそう。 

 ②-1_A
 候:名前
 候:西暦

 ②-1_B
 候:名前
 候:エピソードタイトル

'---5NFで分解できそうなものは、架空のテーブルには存在しなかった。

第6正規形(6NF)
可能な限り無損失分解できるか考えるのが6NF。
6NFまで分解したリレーションは無駄な結合が多くなってしまうので、6NFを目指してリレーションの正規化を行うことはない。
'---①基本情報テーブルは6NFを使うと5つに分解できる。けれども確かにそこまでする必要はないかなと思う。
'---考えるとしたら、項目の多すぎるリレーションがあった場合、2つに分解するとか。

以上で正規化を終えた。

①基本情報テーブル
 種別(人間かそうでないか) 
 性別(男、女、その他)
 出身地
 居住地
 生年月日
 候:名前

②-1_A
 候:名前
 候:西暦

②-1_B
 候:名前
 候:エピソードタイトル

②-2
候:エピソードタイトル
出来事(その年にこの人物の身に起こったこと)


③関係性テーブル
名前
所属組織番号

④組織マスタテーブル
 候:所属組織番号
 候:所属組織名

以下、個人的な感想

本では他にも重複やNULLを排除する方法、リファクタリング等、DB設計において考える必要な要素について説明がなされている。
どれも重要な内容だが、中でも第二章と第十章が面白かった。
第十章で出てくるグラフ理論というのが、初めて知ったのでこれをさらに勉強したい。
本の中で、とても好きな文章があった(P129)のでそれだけ抜粋して終わりとする。

 ところで、ナチュラルキーという言葉は自然という名前からすると、いかにも、この宇宙に最初から存在しているような印象を受けます。
しかし、それは誤解です。
自然界に最初から宇宙の摂理として存在する、ラベルなどというものは存在しません。
物や概念の名称や番号などのラベルは、すべて人間が勝手につけたものです。歴史的経緯に差はあれど、全て人工物であるということは、認識しておいたほうがよいでしょう。
 そういう観点で見れば、ナチュラルキーもサロゲートキーも本質的な違いはありません。
 過去に他の誰かが割り当てたIDを用いるか、自分でIDを割り当てるかというだけの違いなのです。

用語メモ【TCP/IP】

shop.ohmsha.co.jp

この本を一度読み終え、二度目の読み直しをするので、読みながら用語や覚えておいた方が良いことをまとめていきます。

バッチ処理
 処理するプログラムやデータなどをまとめて一括で処理する方式。
 昔はパンチカードが使われていた・・・?

・Multi Vendor マルチベンダ
 ベンダは機器メーカーやソフトウェアメーカーを指す単語。
 単一のメーカーの機器・ソフトウェアでネットワークを構成するのがシングルベンダ。マルチベンダは、いろいろなメーカーの機器やソフトウェアの組み合わせ、ネットワークを構成させる場合を指す。

・いろいろなプロトコル
 IP,TCP,HTTP,IPX,SPX
 様々なプロトコルを体系的(→系統的。統一的。ひっくるめて?)にまとめたものを「ネットワークアーキテクチャ」ということもある。
 TCP/IPもIP,TCP,HTTPなどのプロトコルの集合体。

・パケット交換
 大きなデータをパケット(Packet:意味は小包→大きなデータを小包に小分けにして相手に届ける)と呼ばれる単位に分割して送信する方法。
 ネットワークを流れるパケットは、プロトコルが利用する「ヘッダ」とそのプロトコルの上位層が利用する「データ」から構成されている。
 それぞれのヘッダには、少なくとも2種類の情報が入っている。(→「宛先と送信元のアドレス」と「上位層のプロトコルが何かを示す情報」)

プロトコルの階層化
 ISOは通信プロトコルを設計するときの指標として、OSI参照モデルを提唱した。
 
 OSI参照モデル⭐︎p20
 通信に必要な機能を7つの階層に分け、機能を分割することで、複雑になりがちなネットワークプロトコルを単純化するためのモデル
 各階層は、下位層から特定のサービスを受け、上位層に特定のサービスを提供。

・ノード(Node)
 ネットワーク接続されている終端のコンピュータなどの機器を示す。

・不揮発性メモリ
 電源を切っても記憶したデータが消えない記憶装置。

・プレゼンテーション層
 「ネットワーク全体で統一された表現形式」から「コンピュータやソフトウェアに適した表現形式」に相互に変化する。

物理層
 データの0や1を電圧や光のパルス(→ ごく短時間だけ流れる電流や電波)に変換して、物理的な通信媒体に流し込む。直接接続された機器間でもアドレスが利用されることがある。
 これはMACアドレス物理アドレス、ハードウェアアドレスと呼ばれる。
 このアドレスは、同じ通信媒体に接続された機器を識別するためのアドレス。

 MACアドレス(Media Access Control)
 媒体アクセス制御。

通信方法の種類
ネットワークや通信は、データの配送方法によって分類できる。

・データの配送方法:コネクション型
 通信をする前にコネクションというロープを張る。(データの送信を開始する前に、送信ホストと受信ホストの間で回線を接続する→通信の前後にコネクションの確率と切断の処理を行うので、相手が通信不可能な場合には無駄なデータを送らなくて済む)
 ATM,フレームリレー,TCPなどのプロトコルがコネクション型

・データの配送方法:コネクションレス
 コネクションの確立や切断処理がない。送信したいときにいつでも送信できるが、通信相手がいるかどうかの確認は行われない。
 イーサネット,IP,UDPなどのプロトコルコネクションレス

・アドレス
 コンピュータ通信では、プロトコルの各層で異なるアドレスが使われている。
 MACアドレスIPアドレス、ポート番号、電子メールアドレス等。

・ネットワークインターフェースカード
 コンピュータをネットワークに接続するときに使う部品。NICと呼ばれる。

ゲートウェイ(Gateway)
 プロトコルの変換をする装置。変換し、中継も行う。
 www(world wide web)を使用するときに、ネットワークトラフィックの軽減やセキュリティを意図して代理サーバー(Proxy Server)を設定する場合がある。

bps(Bits Per Second)
 データ通信をするとき、2つの機器間を流れるデータの物理的な速さを伝達速度と呼び、伝達速度を表す単位がbps

スループット
 実際にホスト間(ホスト→ネットワークに接続されたコンピュータ)でやり取りされる電達速度のこと。単位はbps

・データリンク
 直接接続された機器間で通信するためのプロトコルやネットワークを指す言葉。

・リピーター
 OSI参照モデルの第1層の物理層でネットワークを延長する機器。(ケーブル上を流れてきた電気や光の信号を受信し、増幅や波形の整形などをしたのちに別の側へ再生させる)

・フレーム
 パケットとほぼ同じ意味で使われる。データリンク層ではフレームと表現するのが一般的。

・ブリッジ
 OSI参照モデルの第2層、データリンク層でネットワーク同士を接続する装置。物理アドレスMACアドレス)で処理を行う。

ルーター
 OSI参照モデルの第3層、ネットワーク層の処理を行う。ネットワークとネットワークを接続して、パケットを中継する装置のこと。ルーターはネットワークそうのアドレス(IPアドレス)で処理を行う。

・レイヤ4-7スイッチ
 OSI参照モデルトランスポート層からアプリケーション層の情報に基づいて配送処理を行う。

ロードバランサー
 複数のサーバーに負荷を分散させるレイヤ4-7スイッチの一種

・ネットワークについて
 インターネット接続サービスを利用するとき、スイッチや無線LANルーターで集約された通信は、アクセスに接続され、必要な場合はさらにエッジやバックボーンを経て通信相手に接続される。

TCP/IPという言葉が持つ意味
 TCPとIPという2つのプロトコルだけではなく、IPを利用したり、IPで通信したりするときに必要となる多くのプロトコル群の総称。
 具体的には、IP,ICMP,TCP,UDP,TELNET,FTP,HTTP等。
 TCP/IPプロトコルは、IETF(Internet Engineering Task Force)で議論され標準化される。標準化しようとするプロトコルは、RFC(Request For Comments)と呼ばれるドキュメントになり、インターネット上で公開される。
 参考⭐︎P69:Index of /rfc
 教えてもらったRFCに関する小ネタ
 鳥類キャリアによるIP - Wikipedia

 また、TCP/IPはもともとインターネットを通信するために開発されたプロトコルである。

TCP/IPOSI参照モデル
 TCP/IPで登場する様々なプロトコルも、OSI参照モデルに当てはめることができる。

デバイスドライバ
 OSとハードウェアの橋渡しをするソフトウェア

・ICMP(Internet Control Message Protocol)
 IPパケットの配送中に何らかの異常が発生してパケットを転送できなくなったときに、パケットの送信元に異常を知らせるために使われるプロトコル

ARP(Address Resolution Protocol)
 パケットの送り先の物理的なアドレス(MACアドレス)をIPアドレスから取得するプロトコル

・WWW(world wide web)
 インターネットで情報をやり取りする仕組み(アプリケーション)。
 webブラウザとサーバーの間の通信で使われるプロトコルがHTTP。送信に使われる主なデータフォーマットがHTML。
 WWWでは、HTTPがOSI参照モデルのアプリケーション層のプロトコル、HTMLがプレゼンテーション層のプロトコルと言える。

SMTP(Simple Mail Transfer Protocol)
 電子メールの配送で使われるプロトコル

SNMP(Simple Network Management Protocol)
 ネットワーク管理に利用されるプロトコルSNMPで管理されるルーターやブリッジ、ホストなどはエージェントと呼ばれ、ネットワーク機器を管理するプログラムをマネージャと呼ぶ。
 SNMPは、エージェントとマネージャの通信に使われるプロトコル

※今回は90ページまで。来週の休みで最後まで読む。

サンプルプログラムを作成【Java】

参考ページ
Spring Bootで簡単なWebアプリケーションを書いてみる - ももいろテクノロジー

このページをそのまま使わせてもらうと、このような画面が作れました。
f:id:boa0203:20171015154337p:plain

このページを作るにあたり、以下を理解することができました。

アノテーション
注釈・注意書きを追加する機能。一部のbeanを定義することもできる。
@Autowired
DIコンテナの中からクラスまたはインターフェースの派生クラスになっているbeanを検索して値を設定。
他にも、@Contollerや@GetMappingなど、色々なアノテーションがある。

DIコンテナについて
DI・DIコンテナ、ちゃんと理解出来てる・・? - Qiita

O/Rマッピング
オブジェクトとリレーショナルデータベースを対応付けすること→橋渡し。
データベース操作にかかわす煩雑な作業を軽減できる。

理解しているようで、理解していないような・・・ともかくこれでなんとか、来月中には完成できればいいな・・・。

技術とは全く関係ないですが
f:id:boa0203:20171015162608p:plain
コンソールに表示される、このアスキーアートのようなものが好きです。

正規表現について【メモ】

金曜日にこんな入力制限処理を作成しました。

//キー入力チェック(電話番号)
//テキストボックスのKeyPressイベントに処理を作成
private void textBox_KeyPress(object sender, KeyPressEventArgs e)
{
	try
	{
		//バックスペース、ハイフンは使用可能にする
		if(e.KeyChar == 0x08 || e.KeyChar == '-')
		{
			return;
		}

		//数字キー以外の入力をキャンセルする
		if(e.KeyChar < 0x30 || e.KeyChar > 0x39)
		{
			e.Handled = true;
		}
	}
	catch (Exception ex)
	{
		Console.Error.WriteLine(ex);
	}
}

上記に使用しているのは、正規表現です。

正規表現とは

文字列パターンマッチのための簡易言語。
正規表現は色々なプログラミング言語に共通で使える。
(C# .NET Perl Java)

上記の正規表現では、ASCIIの文字列を使用しています。

!ASCII コード
コンピュータは二進数で様々な処理を行うので、文字データも二進数で表される。
文字を表現する二進数のことを文字コードと呼ぶ。


//キー入力チェック(全角のみ)
// ^ $ [ ] - について
//これらの特殊文字を、正規表現ではメタ文字という(メタ文字は他にもある ? * とか)
// ^ と $ は行の先頭や最後のミニ存在する文字列を検索する
// が、[]の中で ^ を使用すると、以外の文字(否定)を表す
//[] は指定した文字のどれか、-はaからzまで、の”から”という意味
//¥ は後に続くものが何なのかをわかりやすくするために書いてある

private void textBox_KeyPress(object sender, KeyPressEventArgs e)
{
	try
	{
		
	if (Regex.IsMatch(e.KeyChar.ToString(),@"[^a-zA-z0-9¥uFF61-¥FF9F!-/:-@¥[-`{-˜]+$]"))
		{
			return;
		}
	}
	catch (Exception ex)
	{
		Console.Error.WriteLine(ex);
	}
}

Regex.IsMatchメソッドは、正規表現と一致する対象が指定した入力文字列内で見つかったかどうかを示します。

Javaを個人的にはじめて、反省に至るまで【Java】

前回の記事から、随分経ってしまいました。

6月ごろから友人と二人で、少しずつ開発をしています。
その経過を書いていきます。

開発環境

macOS Sierra
Java 8
Eclipse(Neon)


参考にしたぺージ

初心者でもほぼ無料でJavaを勉強できるコンテンツ10選 - paiza開発日誌

Angular 2 画面遷移

mobile:初心者のためのSpring Framework入門


1.eclipseでダウンロードから、データベース接続に至るまで。

まず、eclipseで動的プロジェクトを作成し、サイトを参考にしながらデータベース接続画面を作成してみました。
そして実行してみますが・・・
f:id:boa0203:20170916180808p:plain

できない。
リソースが無いと言われてしまったので、何かが足りないのだと思い試行錯誤しました。
ですが原因がわからなかったので、経験者に質問。
助言と参考画面をもらいました。

助言
・contextかserverファイルの書き方が間違っているのでは。
JSPTOMCAT をビルドすると、変なファイルが作られるときもあるので、キャッシュのクリアをした方が良いかもしれない。
Tomcatapache連携する。
JSONでパラメータを与えて非同期にする。

!context.xml
アプリケーションの配置場所や呼び出し方などの情報を設定するファイル。

!server.xml
Tomcatサーバの動作を定義する設定するファイル。

参考画像を元に、自分のDB接続設定のコードを確認したところ書き方の違いを発見。
書き直したところ、接続ができました。

2.画面にデータベースから取得したデータを表示するまで。

接続はできたので、今度は取得したデータの表示に取り掛かりました。
1で取ってこれた接続設定と、servletを使用してデータを表示したかったのですが、データの表示がうまくいきませんでした。
このservletの書き方が理解できず、時間を費やしてしまい焦りだし、結局サンプルのjspに直書きするものでなんとか表示させました。

f:id:boa0203:20170916235837p:plain


Servlet
サーバー上で動く部品のようなもの。Java言語で記述される。
MVCではControlにあたる。

JSP
HTML上に直接記述できるJava言語。
MVCではViewにあたる。

servletjspの違い
servletは常にコンパイルが必要だが、jspサーブレットエンジンがjspファイルを自動的に変換してくれる。
なので、jspservletに変換される。

MVCについて
Model、View、Control と役割分担をしてプログラムを作成する方法。
役割の内容
Control ・・・ DB関連
View ・・・ 画面表示
Model ・・・ 処理結果をViewに返す(ModelとViewの仲介、制御)

JavaでのModelはJavaBeansになる。JavaBeans自体は、直接クライアントから呼び出されることはない。(仲介、制御なので)

3.表示したデータから1つのデータを選択して、それを別のページに持って行くまで。
次に1つのデータを選択して、次のページに表示する処理を作ろうと考えました。
が、何をすれば良いのかわからず、経験者にお聞きしました。

<%@page contentType="text/html"%> 

<%@page import="java.sql.*"%>

<%!

// サーブレットのinitメソッドに相当

public void jspInit() {

    try {

        // JDBCドライバをロード

        Class.forName("com.mysql.jdbc.Driver");

    } catch (Exception e) {

        e.printStackTrace();

    }

}

%>

<html> 

<body> 


<%=session.getAttribute("mysql")%> 

<%= request.getParameter("eid")%>

</body> 

</html> 


そしてメソッドを使用して、次画面に持って来ることができました。

・・・ここから、jspservletやプロジェクトの中身などについて調べて行ったり来たりしますが・・・理解が追いつかなくなりました。

4.フレームワークを使用する

理解が追いつかなくなってきたので、経験者が教えてくれたフレームワークを使用しようと試みます。

使ってみたのは、Angular 2です。

f:id:boa0203:20170917012222p:plain

参考ページそのままの画面を表示できました。
ですが、このAngular 2の使用はやめることにしました。
コンポーネント指向、開発言語(TypeScript)の理解が必要だからです。
JavaScriptコードもままならないのに、無謀でした。

このAngular 2を少しだけ動かし、Java自体をもう一度やり直そうと反省しました。

5.現在

反省して今度はSpringフレームワークを調べつつ、画面を作っています。
・・・この記事は戒めです・・・。

別クラスから、メソッドを操作する【VB.NET】

タイトル通りです。
どうすれば良いのか、思いつかなかったので先輩に教えてもらいました。

Private Sub frmTest_FormClosing(sender As System.Object, _
				e As System.Windows.Forms.FormClosingEventArgs) _
				Handles MyBase.FormClosing

	'呼び出したい画面
	Dim frm As frmTest = CType(Me.Owner,frmTest)

	'comboboxクリア
	frm.cmbテスト.DataSouce = Nothing
	'combobox設定
	frm.cmbテスト設定(frm.cmbテスト,"")
	'combobox選択名設定
	frm.cmbテスト.Text = Me.strTestNm

End Sub

frm.cmbテスト設定()が、メソッド名です。
呼び出したいメソッドは、スコープをPublicにします。
・・・これが思いつかなくて時間がかかりました。