- 1. 【Java】Mapのキーと値のペアを拡張for文を使って取得する
- 2. RhinoでJavaの中からJavaScriptを利用する 2021年版
- 3. Dockerを用いて掲示板を作った1
- 4. Eclipseインストール
- 5. 読書メモー「オブジェクト指向でなぜ作るのか」
- 6. リファクタリングの初歩知識・Java
- 7. getPackageManagerでインストールアプリ一覧が表示されない(SDK30・Android11)
- 8. VSCodeでJavaの開発環境を構築!
- 9. Spring Boot + Java + GitHub認証ログイン
- 10. 2分探索法の練習
- 11. 線形探索法の練習
- 12. Eclipse + Codewind で、コンテナ化された Java Web アプリを開発してみる
- 13. WSWSL2 Docker VSCodeでJava開発環境を構築
- 14. ThymeleafでTimestamp型をフォーマットする
- 15. 【Java】全角⇔半角の変換
- 16. リダイレクト先に値を渡す(メッセージ表示)
- 17. [.net、Java連携]C#.netで.jarを実行するンジャー
- 18. パスワード変更機能
- 19. 特定の maven task を実行したときだけ ClassLoader で目的のクラスがスキャンできない
- 20. javaの基礎の基礎②~if文とswitch文~
【Java】Mapのキーと値のペアを拡張for文を使って取得する
#はじめに
Map のキーと値のペアを`Map.entrySet`を使って取得する方法です。
Map のキーと値を取得する方法は他にも`keySet`や`values`があります。
これらはキー・値のどちらかを取得するだけですが、`entrySet`を使うとキーと値のペアを取得することが出来ます。#entry.Set の使い方
###Mapに値を設定
“`java
Mapanimal = new HashMap<>();
animal.put(“monkey”, “猿”);
animal.put(“dog”, “犬”);
animal.put(“cat”, “猫”);
“`###Mapのキーと値のペアを取得
以下の処理ではentrySetメソッドを使用してキーと値のペアを取得し、getKeyメソッドでキーを、getValueメソッドで値を取得しています。
“`java
for (Map.EntryanimalNameInJapanese : animal.entrySe
RhinoでJavaの中からJavaScriptを利用する 2021年版
JavaVM で JavaScript エンジンを動かして、DSLとして JavaScript を利用したいようなケースは結構あったはずだが、JavaVM に標準で搭載されているJavaScriptエンジン Nashorn はすでに Java11 で[非推奨](http://openjdk.java.net/jeps/335)となっていて、プロダクションで使っている勢にとっては不安の種となっている。
Nashorn 非推奨の理由は、最新の ECMAScript 仕様に追随しきれないというもの。
確かにモダンなESを使いたいモチベーションはあるが、それが足枷となってJVMそのものの進化のスピードが律速されてしまうのであれば、非推奨としてJVM本体の進化のペースとは切り離すという判断は合理的。
ではどうしたらいいのか。Alt JVM として開発されている他言語対応JVM GraalVM を使うというのが第一の選択肢である。GraalVM に関しては色々なところで触れられているのでここでは触れない。
実運用上は VM を変更して運用することはないとはいえ、Javaのプログラムが特定の
Dockerを用いて掲示板を作った1
# これは何
DockerとWebアプリ作成の勉強のため,[この本](https://www.amazon.co.jp/Web%E3%82%B5%E3%83%BC%E3%83%90%E3%82%92%E4%BD%9C%E3%82%8A%E3%81%AA%E3%81%8C%E3%82%89%E5%AD%A6%E3%81%B6-%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E3%81%AEWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA%E5%85%A5%E9%96%80-%E5%89%8D%E6%A9%8B%E5%92%8C%E5%BC%A5-ebook/dp/B01GNXNIWE)の第3章をDockerコンテナの上で実装してみた際のメモ.
## ファイル構成
“`sh
$ tree .
.
├── Dockerfile
└── testbbs
└── WEB-INF
├── classes
Eclipseインストール
IBMが Java で開発した、オープン・ソースの統合開発環境(IDE)である
『Eclipse』をインストールしていきます。## 『7-zip』をインストールする。
https://sevenzip.osdn.jp/## 『Pleiades All in One』をダウンロードする。
[Pleiades All in One ダウンロード](https://mergedoc.osdn.jp/)
① 左上の『Eclipse 2020』をクリック。
②『Windows 64bit-Full Edition-Java』をダウンロードする。
![2021-01-10_22h18_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565881/eb5d7b15-02f8-ff56-1ce0-cd87513ad095.png)## ダウンロードしたファイルを、7-zipを使用して解凍
◆ Windows環境では『7-Zip』という解凍ソフトで解凍してください。
それ以外
読書メモー「オブジェクト指向でなぜ作るのか」
## はじめに
技術書等を読んで得た知識をまとめた、自分用の読書メモです。なので、自分の所感多めでまとめていきます。
#### 今回は[「オブジェクト指向でなぜつくるのか(著 平澤章)」](https://www.amazon.co.jp/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%81%A7%E3%81%AA%E3%81%9C%E3%81%A4%E3%81%8F%E3%82%8B%E3%81%AE%E3%81%8B-%E7%AC%AC2%E7%89%88-%E5%B9%B3%E6%BE%A4-%E7%AB%A0-ebook/dp/B00ISP0QB2/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=35LBK7KM96SAZ&dchild=1&keywords=%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90
リファクタリングの初歩知識・Java
# はじめに
リファクタリングに必要と思われる基本的なことを随時追加していく
基本的には、以下の書籍を参考にした* 結城浩 著『[Java言語で学ぶリファクタリング入門](https://www.amazon.co.jp/exec/obidos/ASIN/4797337990/hyuki-22/)』ソフトバンククリエイティブ(株)刊
# 意識しておくべき原則
– DRY原則
– Don’t Repeat Your Self
– 繰り返し(重複)を避けること
– KISSの原則
– Keep it simple, stupid
– 設計の簡潔性は大切、不必要な複雑性は避けるべき
– YAGNI原則
– You ain’t gonna need it
– 機能は実際に必要となるまでは追加しないのがよい# 前提知識
– OOP(オブジェクト指向プログラミング)の基礎的な理解
– クラスとインスタンスの関係
– アクセス修飾子
– 継承(抽象クラスとインタフェース)
– オーバーライド、オーバーロード
–
getPackageManagerでインストールアプリ一覧が表示されない(SDK30・Android11)
これまでgetPackageManager()#getInstalledPackages()を用いれば簡単に端末内のインストールアプリ情報を取得することができました。
しかし、Android 11(SDK30)からは単に下記のようなコードを記載するだけではシステムアプリ情報しか取得できなくなりました。**例)デバイス内のインストールアプリをLog出力する**
“`MainActivity.java
PackageManager pm = getApplicationContext().getPackageManager();
ListappInfoList = pm.getInstalledPackages(0);
for(int i =0;i
VSCodeでJavaの開発環境を構築!
Visual Studio Code (VSCode) で Javaの開発環境を構築してみました。
### 開発環境
OS : Windows10
VSCode : Version 1.52.1### 手順
– [JDK] インストール
– [Java Extension Pack] インストール
– [Java.home] で [JDK] へパスを通す## JDK (Java SE Development Kit) をインストール!
[JDK15ダウンロードページ](https://www.oracle.com/java/technologies/javase-jdk15-downloads.html) へアクセス
Windows x64 に合わせて**【jdk-15.0.1_windows-x64_bin.exe】**をダウンロードします。
その後、画面の指示に従いデフォルト設定でインストール。
![2021-01-10_21h15_42.png](https://qiita-image-store.s3.ap-northeast-1.amazona
Spring Boot + Java + GitHub認証ログイン
OAuth2を使ったSSOに苦戦したので、備忘録として残しておきます。
1. GitHubで「OAuth Apps」のクライアントIDとクライアントシークレットを生成する。
1. GitHubを開く
2. 右上のプロフィール画像を押下し、「Settings」を押下
3. サイドバーの「Developer Settings」を押下
4. サイドバーの「OAuth Apps」を押下
5. [New Auth App]ボタンを押下
6. 「Application name」に任意でアプリケーションの名前を入力
7. 「Homepage URL」に作成中のアプリのトップページのURLを入力、ローカル環境で作成中なら「http://localhost:8080」
8. 「Authorization callback URL」に「http://localhost:8080/login/oauth2/code/github」を入力
9. 上記の手順で作成が完了したらクライアントIDとクライアントシークレットを控えておく2.
2分探索法の練習
#やったこと概要
基本情報処理技術者試験のアルゴリズムを自己流で練習として書いてみました。##他のアルゴリズムでも使う用の共通部品
線形探索法などの練習でも流用できるように作ったクラス。###探索結果をプリントするクラス。
“`java:MessagePrinter.java
/**
* 探索結果のメッセージをプリントするクラス
*
* @author hatena
*
*/
import java.util.List;public class MessagePrinter {
public void printFoundMessages(int targetNumber, List
targetList) {
System.out.println(“リストの中に探索対象の数” + targetNumber + “が存在しました。”);
System.out.println(“探索対象リストは” + targetList + “でした。”);
System.out.println(“探
線形探索法の練習
#やったこと概要
基本情報処理技術者試験のアルゴリズムを自己流で練習として書いてみました。##他のアルゴリズムでも使う用の共通部品
2分探索法などの練習でも流用できるように作ったクラス。###探索結果をプリントするクラス。
“`java:MessagePrinter.java
/**
* 探索結果のメッセージをプリントするクラス
*
* @author hatena
*
*/
import java.util.List;public class MessagePrinter {
public void printFoundMessages(int targetNumber, List
targetList) {
System.out.println(“リストの中に探索対象の数” + targetNumber + “が存在しました。”);
System.out.println(“探索対象リストは” + targetList + “でした。”);
System.out.println(“探
Eclipse + Codewind で、コンテナ化された Java Web アプリを開発してみる
2020年8月頃に、IBM のクラウドネイティブアプリ/コンテナ向け開発環境「Accelerators for Teams(Appsody Stacks)」を紹介いたしました。
※ Accelerators for Teams を、以下 「AfT」 と略します。・[「Appsody Stacks」を30分 x 3回で理解できるかやってみる(1回目)](https://qiita.com/masa03/items/7fc548466094cdb8d9a8)
・[「Appsody Stacks」を試してみる(2回目:パイプラインで自動化)](https://qiita.com/masa03/items/3506343797b48beaf634)
・[「Appsody Stacks」を試してみる(3回目:GitHubとパイプラインの連携)](https://qiita.com/masa03/items/6f98c6090b673898447c)前回は、Appsody Stacks の CLI環境である appsody CLI の利用方法を紹介しましたが、プログラミング では VSCo
WSWSL2 Docker VSCodeでJava開発環境を構築
# WSL2 Docker VSCodeでJava開発環境を構築
WSL2とDockerとVSCodeで開発環境を作るのがホットな話題だったので試してみたのですが、
作ったものの開発環境の動作が重すぎてドはまりしました。
オチとしては開発ソースを軽量Linuxのフォルダ内でなくWindowsフォルダにおいていたのが原因でした。
自分への戒めのため手順を残しておきます。## WSL2のインストール
### Linux 用 Windows サブシステムを有効にする
管理者として PowerShell を開き、以下を実行します。
~~~powershell
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
~~~### 仮想マシンの機能を有効にする
管理者として PowerShell を開き、以下を実行します。~~~powershell
dism.exe /online /enable-feature /featurename:
ThymeleafでTimestamp型をフォーマットする
“`java
@GetMapping(value = “”)
public String init(Model m) {
LocalDateTime ldt = LocalDateTime.now();
Timestamp ts = Timestamp.valueOf(ldt);
m.addAttribute(“ts”, ts); // ts = 2021-01-09 17:38:27.918333
return “index”;
}
“`“`html
“`
【Java】全角⇔半角の変換
・参考
[TERASOLUNA Server Framework for Java 7.6文字列処理](http://terasolunaorg.github.io/guideline/5.6.1.RELEASE/ja/ArchitectureInDetail/GeneralFuncDetail/StringProcessing.html?highlight=%E6%96%87%E5%AD%97%E5%88%97%E5%87%A6%E7%90%86#stringprocessinghowtousefullhalfconverter)# ライブラリの追加
https://mvnrepository.com/artifact/org.terasoluna.gfw/terasoluna-gfw-string“`xml:maven
org.terasoluna.gf
リダイレクト先に値を渡す(メッセージ表示)
リダイレクト先でメッセージを表示させたかったが少し手こずったので学習記録用記事
###リダイレクトで遷移先に値を渡す
値を渡す側のコントローラー?
“`Controller.java
@RequestMapping(value=”/create”, method=RequestMethod.POST)
public String create(RedirectAttributes redirectAttributes){redirectAttributes.addFlashAttribute(“message”,”リダイレクト先に表示したいメッセージ”)
return “redirect:/index”
}
“`値を受け取る側のコントローラー?
“`Controller.java
@GetMapping(“/index”)
public String getIndex(@ModelAttribute(“message”) String message,Model model){
model.addAttribute(“messag
[.net、Java連携]C#.netで.jarを実行するンジャー
どうしてもJavaを使わないとできない処理をC#.netから起動する必要が出た場合、
その実装に困りますよね…
そこで参上!C#.netで.jarを実行するンジャー!!(ここまで茶番)
# Java側のプログラム
java側のプログラムはmainメソッド(関数)を入れます。
main関数のコマンドライン引数”args”でC#から値を受け取ります。
下記サンプルプログラムでは、1つの引数でメッセージ:msgを受け取り、それを表示しています。“`java:Sample.java
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
if (args.length <= 0) { System.out.println("出力メッセージなし"); } else { System.out.println("出力メッセージ:" + args[0]); } // Enterキー入力待ち // 参考:https://stackoverflow.com/questions/261844
パスワード変更機能
Springでパスワード変更機能の実装
学習の記録用として記載##DBのパスワードと入力されたパスワードの照合
・パスワードはハッシュ化されたものが登録されている状態
※DBにハッシュ化(暗号化)してパスワードを保存⬇️
“`java:Service.java
@Autowired
PasswordEncoder;public Entity save(Entity user, String rawPassword){
String encodedPassword = passwordEncoder.encode(password);
user.setPassword(encodedPassword);
return Repository.save(user);
}
“`####PasswordEncoderとは
Spring Securityが提供するクラスで、DBなどにログインパスワードを保存するときの暗号化に関わるクラス
・パスワードを暗号化(ハッシュ化)をする
・認証時に入力のパスワードと、保存した暗号化パスワードが一致するかを確認
特定の maven task を実行したときだけ ClassLoader で目的のクラスがスキャンできない
# TL;DR
– `maven-surefire-plugin` というのが、 classpath 内のたくさんの jar ファイルを `surefirebooter~~~.jar` というものにまとめてしまう
– `ClasspathHelper.forClassLoader()` の後に `ClasspathHelper.forManifest()` を挟むことで内部の URL 一覧を取得できる# 詳細
実行時に特定の interface を持つサブクラスをスキャンするために、次のようなコードを書いてました。“`java
ListclassLoadersList = new LinkedList<>();
classLoadersList.add(ClasspathHelper.contextClassLoader());
classLoadersList.add(ClasspathHelper.staticClassLoader());Reflections reflections = new Refle
javaの基礎の基礎②~if文とswitch文~
・if文
①if文を使うと「もしも・・・ならば」という文章をプログラムで表現することができます。
「もしも降水確率が50%以上なら、傘を持っていく」をプログラムで書いてみましょう。
(if文を説明するためのプログラムの断片です)if (p >= 50) {
System.out.println(“傘を持っていきます”);
}これは「変数pの値を調べ、その値がもしも50以上なら、”傘を持って行きます”と画面に表示する」という動作をします。
上のプログラムは次のような構造をしています。
if (条件式) {
条件が成り立つときの処理
}条件式の値は、「条件を満たすときtrue(トゥルー)」、「満たさないときはfalse(フォルス)」になります。
条件式の値は、必ずこのどちらかになります。
()でくくられた条件式の後には{}でくくられた処理がやってきます。これは条件が満たされたときに行う処理の範囲を示します。
if文は、()の中の条件が満たされるかどうかを調べ、もし満たされるなら{}の中を実行し、満たされなければ{}の中を実行しません。