- 1. Javaの演算子、new
- 2. コレクションとは
- 3. クラスの継承とは
- 4. GWTでwebアプリを開発すると長く使える
- 5. HttpServletRequestのヘッダをMapに変換
- 6. 2024年でGWTを利用する意味
- 7. Javaの配列
- 8. JSP・サーブレット 備忘録
- 9. VSCode×DevContainerでDockerコンテナ内にJava開発環境を作る
- 10. JDBC 備忘録
- 11. カプセル化、アクセス修飾子
- 12. SpringBootでJWT生成と検証
- 13. Javaのスコープ
- 14. 【Java初心者】Google Tinkを使ったMAC(メッセージ認証コード)
- 15. 【Java】カプセル化についての理解を深める
- 16. 「スッキリわかるJava入門 第3版 スッキリわかるシリーズ」を読んだので内容をまとめる
- 17. Manipulating DataFrame Using SMILE
- 18. Gradleを用いたJava開発記事まとめ
- 19. Javaの条件分岐
- 20. DIコンテナを自作する
Javaの演算子、new
# new演算子とは
new演算子とは、配列の宣言、インスタンスの生成等で用いられる演算子です。Javaでは、変数名と変数の型宣言だけでは変数を使用できない場合があります。
オブジェクト指向のJavaはコードの再利用が出来るようになっている為です。new演算子はクラスなどの枠組みからコードで使用する実体を呼び出す為に必要となります。
その為、クラスを扱う際に、宣言した変数がクラスなのか、インスタンスなのかを書き手が把握していないとエラーが発生してしまいます。
コレクションとは
## コレクション
* コレクションは、主に要素数が決まっていない場合に使う
(配列は予め要素数が決まっている場合に使う。)
* 配列とは異なり、要素数を自由に増減させられる
* コレクションには種類がある| 種類 | 特徴 |
|:-:|:-:|
| List | 要素が順序付けられて保持される |
| Map | キーと値を紐づけて要素が保持される |
| Set | 要素が重複しない、要素が順序付けられていない |##### ジェネリクス
「クラス名<型指定>」の書式でクラスの型を指定することをジェネリクスという。##### ArrayListコレクションについて
Listの派生。要素が順序付けられて保持されるArrayListの要素の追加と取得
“`java
// 宣言
<リストの型> 変数 = new ArrayList<リストの型>();// コレクションに要素を追加
変数.add(引数);//要素を取得
変数.get(取得したい要素の番号);
//要素の取得と表示
System.out.println(変数.get(要素の番号));
クラスの継承とは
## 継承
* クラスが持っているメンバ(フィールドやメソッド)を別のクラスに引き継がせる。
* 継承元のクラスをスーパークラス(または親クラス)、引き継いだクラスをサブクラス(または子クラス)
(継承を使用しない例と使用する例のコードも記載されていてわかりやすかった[参照元URL](https://medium-company.com/java-%E7%B6%99%E6%89%BF/#google_vignette))“`Java
// 継承の書き方子クラス extend 親クラス
“`##### 実例
作成クラス3つ。1. Keisyo_Human1.java:人を表す親クラス
1. Keisyo_Takada1.java:親クラスを継承する子クラス
1. Keisyo_Main1.java:実行クラス` Keisyo_Human1.java`
“`Java
public class Keisyo_Human1 {// フィールドの宣言
double weight; // 体重
double height; // 身長// BMI計
GWTでwebアプリを開発すると長く使える
# 実はワイGWTを2007年ごろからずっと使っている
おいおい、簡便してくれよ、いつの話だよ・・
いいかい学生さん、いつでも・・とんかつを・・とんかつを食える・・
いいや、ずっと昔からでも、互換性が担保されているんだよ# GWTは最初からSPA(Single Page Application)
webアプリが面倒な、原因の一つが、ページ遷移の制御
だから、MVCフレームワークとかいう、くそわかりづらい物が生まれた# フロントとバックは同じJava言語だけで書ける
あのさ、フロントはJavaScriptにして、バックはPHPとかそんな分ける必要なんてない# フロントとバックの通信はJavaだけでできる
jsonとかXMLとかそんなものは覚える必要がない# 結論
だから、GWTを使ってwebアプリを開発すると、長く使えます
HttpServletRequestのヘッダをMapに変換
“`java
import javax.servlet.http.HttpServletRequest;
import java.util.Collections;
import java.util.HashMap
import java.util.Map;
import java.util.stream.Collectors;public class Utils {
public static Map
getHeaderMap(HttpServletRequest request) { return new HashMap
() {{
Collections.list(request.getHeaderNames())
.stream()
.forEach(key -> {
put(key, request.getHeader(key));
});
2024年でGWTを利用する意味
Webアプリ開発と言えば、フロントとバックで言語を分ける事が一般的のようですが、
GWTというツールを使えば、一つの言語だけで、Webアプリが開発可能です。しかもSPA(Single Page Application)としてページ遷移することなく、アプリを動作させることができます。
通信も、Javaだけで行うことができ、JsonやXMLなどを意識する必要がありません。
その為、開発も柔軟で速く行う事が可能です。
https://www.gwtproject.org/
Javaの配列
# 配列とは
配列は1種類のデータ型を複数個管理する際に使用されます。Javaでは配列の要素を0から表記するので、配列の一番目の要素は
配列名[0]となります。宣言の際には、要素の型と配列の変数名の他に、newが必要です。
~~~:配列宣言の例
要素の型[] 配列変数名 = new 要素の型[要素数];
~~~
JSP・サーブレット 備忘録
## formタグ
action属性
送信先のプログラムのURLパターンを指定します。(『 / 』は不要)method属性
起動するリクエストメソッドを指定します。「get」と書けばdoGetメソッド、「post」と書けばdoPostメソッドが起動されます。
method属性を書かない場合は自動でdoGetメソッドが起動されます。“`jsp:jsp
VSCode×DevContainerでDockerコンテナ内にJava開発環境を作る
## 書いた背景
– 最近実務でJavaを使い始めた。
– Javaに関する開発等はEclipceで行う風潮があるが、Eclipceが使いやすいと思わない。少なくともプライベートではVSCodeで書きたい。
– EclipceのAll-in-OneにはJava実行環境等が含まれていたが、VSCodeではそれがないためローカルマシンに実行環境をインストールする必要がある。が、それをやりたくない。
– VSCode × DockerでJavaの開発環境を作ろう。それを手軽に実現してくれるのがDevContainerというプラグインらしい。## 前提
– VSCodeのDevContainerにはそれ専用のDockerイメージがそれなりに用意されているので、手元にDockerfileを用意しなくてもすぐ始められるため、今回はその方法で進める。
– Dev Container向けに用意されているDockerイメージはLTS版が中心でJava21まで対応されている。
– ビルドツールにはgradleを使用し、バージョンは8.4.4
– 書いた人はJavaど素人なので、正直gradleの
JDBC 備忘録
### DAO
データベースにアクセスする機能をまとめたデータベースアクセス
専用のクラスのことをDAO(Data Access Object)と言います。DAOはテーブル単位で定義することが一般的です。
現場によっても違ってくるので必ずチームメンバーに確認しましょう)### DTO
クラスやメソッド間で複数のデータをまとめて受け渡す際に使用されるクラスをDTO (Data Transfer Object)と言います。基本的にDTOはそのクラスブロック内にフィールドとgetter/setterのみしか持ちません。DTOは主にテーブルの1レコード分のデータを格納する目的で定義されます。そのため、1つのテーブルにつき1つDTOを定義することが一般的です。
“`java:Java
//ResultSetオブジェクトから1レコード分のデータをDTOに格納
if(rs.next()){
dto = new Sample4_02_1_Common_DTO();
dto.setId ( rs.getInt( “id” ) )
カプセル化、アクセス修飾子
## カプセル化とは
カプセル化とは、クラス内のフィールドやメソッドに対するアクセスを制限するJavaの仕組み。
例えば、個人情報を扱うクラスがあり、このフィールドが外部から書き変えれたり情報を保護できないプログラムは危険。
カプセル化はこのような外部からのアクセスからオブジェクトを守る役目がある。## アクセス修飾子
カプセル化では、アクセス修飾子のprivateとpublicを使いアクセス制限を行うため、下記の設定を覚えておく。
| アクセス修飾子 | 機能 |
|:-:|:-:|
| private | 自分のクラス内でのみアクセス可能 |
| アクセス修飾子なし(package private) | 同じパッケージ内であればアクセス可能 |
| protected | 継承した子クラス及び自分と同じパッケージからアクセスできる |
| public | 自分のクラス以外からでもアクセス可能 |“`Java
package text.section_16;public class Capsule_Tanaka1 {
// id フィールド
SpringBootでJWT生成と検証
今回、JWTを用いた認証について学習したので、あわせてブログにまとめてみました。
本記事では、ログイン認証後のユーザーの各要求に対して、ログインユーザーと作業者が同一であるかをチェックするためにJWTを用いた処理を紹介します。
# **JWT(ジョット)**
JWTとは、Json Web Tokenの略で、関係者間で情報を安全に送信するためのJsonオブジェクトです。
ディジタル署名されているため、検証及び信頼ができるトークンとなっています。
様々なアルゴリズムを使用した公開/秘密鍵のペアを使用して署名することができます。
# **用途**
– **認証**
ユーザーログイン成功時にトークンを生成します。
(シングルサインオンやセッション認証で使用)
– **情報交換**
公開鍵/秘密鍵のペアを用いて、コンテンツの改ざん等がされていないことを検証できます。# **JWTの構造**
JWTは、ヘッダ、ペイロード、サインで構成されており、それぞれ以下の情報を保持しています。
`xxxxxxx(ヘッダ).yyyyyyy(ペイロード).zzzzzzz(サイン)`
– *
Javaのスコープ
# スコープとは
{ }で囲まれた部分をブロックと呼びます。
Javaでは、他言語と同様にブロック内で宣言した変数は、ブロックの外側では利用できません。この時の変数が利用可能な範囲をスコープと呼びます。
スコープの外で変数を呼び出そうとすると該当の変数を見つけられずエラーが発生します。
【Java初心者】Google Tinkを使ったMAC(メッセージ認証コード)
# Macとは
Googleのサイトによると
https://cloud.google.com/kms/docs/mac-signatures?hl=ja“`
MAC 署名は、データの整合性と信頼性の検証に利用される暗号出力です。
“`
とあります。そして
“`
MAC 署名には主に 2 つの目的があります。
* 署名されたデータの整合性を検証します。
* メッセージの信頼性を確認する。
“`
と説明されています。また、こちらのサイトでは
https://e-words.jp/w/%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E8%AA%8D%E8%A8%BC%E3%82%B3%E3%83%BC%E3%83%89.html
“`
メッセージ認証コード(MAC)とは、相手から届いたメッセージが途中で
改竄やすり替えに合っていないか検証するための短い符号。
送信者と受信者が共有する秘密のデータ(鍵)とメッセージ本体から生成する。
“`
となっています。ただ今回のサンプルでは、PGPのように「はじめて見る相手のメッセ
【Java】カプセル化についての理解を深める
オブジェクト指向の基本原則である「カプセル化」についての理解を”なんとなく”ではなく”しっかり”理解するためのシンプルな備忘録。ここではJavaを用いて説明する。
## カプセル化の基本理解
ざっくり言うと **「①関係性のあるデータをまとめて、②外部から隠すこと」** である。
これによって、ソフトウェアの更新の際にどこをいじればいいのかが明確になり、不用意な更新を防ぐことができる。### ①関係性のあるデータをまとめる
関係するフィールドやメソッドをひとまとめにすることで、関係性のないデータをクラスから取り除くことができる。これにより、このクラスはこの役割を果たすんだな、とクラスの目的が明確になる。では、”ひとまとめにする”とはどういうことなのか?
例えば、クラスAとクラスBがあったとする。クラスAのメソッドがBのフィールドにアクセスできる場合は、ひとまとめにされていないと言える。AのメソッドからBのフィールドにアクセスできるのであれば、AのメソッドはBにあるべきだからだ。### ②外部から隠す(データ隠蔽)
値の書き換えを防ぐにはアクセス制限をかける必要がある。
「スッキリわかるJava入門 第3版 スッキリわかるシリーズ」を読んだので内容をまとめる
Manipulating DataFrame Using SMILE
# Motivation
To understand how to’s for handling DataFrame in SMILE
# Environment
Jupyter Lab & IJava & temrin jdk 11 (have to use > 9)
# Usage of IJava and maven
First, should do load repositories and dependencies
For example,
“`
%mavenRepo scijava-public https://maven.scijava.org/content/repositories/public/
%maven net.imagej:ij:1.54h
%maven com.github.haifengl:smile-core:3.0.2
%maven com.github.haifengl:smile-plot:3.0.2
“`
(Here, ImageJ was loaded, but you do not need, just example…)
Gradleを用いたJava開発記事まとめ
GradleとKotlinを利用したJavaアプリのソースコードの例をいくつか見つけました。以下のリンクを参考にしてみてください。
Gradle x JavaをKotlinに浮気させる #Java: GradleとKotlinでSpring Bootアプリケーションを作成する方法を紹介しています。
なんとなく使わないGradle: Gradleの基礎とモダンなプラクティスについて解説しています。
GradleとIntelliJで始めるKotlin (プロジェクト作成編) #Kotlin: GradleとIntelliJでKotlinプロジェクトを作成する手順を説明しています。
これらの記事は、GradleとKotlinの組み合わせに関する有益な情報を提供してくれると思います。もし、もっと具体的なソースコードを見たい場合は、GitHubでキーワードを検索してみてください。GradleとKotlinを利用したJavaアプリのソースコードをGitHubから検索すると、以下のような結果が得られます。
– [gradle/gradle](^3^): Gradleは、JavaやKotlinな
Javaの条件分岐
Javaも、他言語と同様にifによる条件分岐が可能です。
条件分岐を表現する時、Javaではboolean型というデータ型を用いた方法があります。# boolean型
boolean型はtrueとfalseのみを扱う事が出来るデータ型です。
使用するビット数も2ビットと少なく、条件文の分岐フラグの管理で使用されます。
DIコンテナを自作する
# DIとは?
– Dependency Injection – 依存性注入のこと
– クラス間の依存関係を外部から注入することで、開発者側でコンストラクタによるインスタンス生成が不要になる
– `new Hoge()`をせずともHogeクラスのインスタンスを利用できる
– Spring Bootだと以下3パターンがある
– コンストラクタインジェクション
– フィールドインジェクション
– セッターインジェクション
– ベストプラクティスはコンストラクタインジェクション# DIコンテナとは?
– DIを実施するコンテナのこと
– プロジェクト内のクラス間の依存関係を全て把握し、よしなにDIしてくれて、かつその処理を開発者の見えないところでひっそりやってくれる
– 汚れ仕事を全て引き受けてくれる黒子みたいな存在# 作ったもの
https://github.com/tttol/MicroDI自分がDIコンテナのことを理解するために作ったものなので、**作業記録みたいなものと思ってもらえれば。**
実際のアプリ開発で利用できるクオリティには程遠い