Javaの基本を教えてくれるサイト集

# ろーどおぶざSpring
|アノテーション|使うところ|参考サイト|
|:--|:--|:--|
|＠ControllerAdvice|コントローラーの、オブジェクトバインディングや、エラーハンドリングに特化したアドバイスを作成する|[&#x30A2;&#x30C9;&#x30D0;&#x30A4;&#x30B9;&#x306E;&#x4F5C;&#x6210;3 - &#xFF20;ControllerAdvice &#xB7; &#x72EC;&#x7FD2;Spring](https://yo1000.gitbooks.io/self-study-spring/content/chapter10.html)|
|@Component|コンポーネントスキャンの対象にする。@Controller、@Service、@Ripositoryいずれでもない場合に使う。||
|@ModelAttribute|パラメータや返却オブジェクトをModelに格納してくれる||
|@PathVariable|URL内のパス変数の値を取得してくれる||
|@GetMapping|@RequestMapping(method = RequestMethod.GET) のショートカット|[GetMapping (Spring Framework 5.3.3 API) - Javadoc](https://spring.pleiades.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/annotation/GetMapping.html)|

- [EclipseでMavenのプロジェクトにSpringを設定する - ponsuke_tarou’s blog](http://ponsuke-tarou.hatenablog.com/entry/2018/03/01/223627)
- [SpringプロジェクトにSpring MVCを設定する。 - ponsuke_tarou’s blog](http://ponsuke-tarou.hatenablog.com/entry/2018/06/18/143331)
- [Java - [thymeleaf]spanタグ等で囲まないとテキストが表示できない？(2558)｜teratail](https://teratail.com/questions/2558)
- 画面からControllerに到達できない理由
    - 可能性1 : @RequestMappingに書いてあるパスと大文字小文字が違う
    - 可能性2 : @RequestMappingの`params`に必須パラメータ以外を設定している && リクエストで必須パラメータしか設定していない
        - [4.3. アプリケーション層の実装 &mdash; TERASOLUNA Global Framework Development Guideline 1.0.0.publicreview documentation](https://terasolunaorg.github.io/guideline/public_review/ImplementationAtEachLayer/ApplicationLayer.html#controller-mapping-params-label)
- [APPLICATION FAILED TO START - Qiita](https://qiita.com/ponsuke0531/items/5ce8e8ac855ac9a5a191)























# はじめてのGradle
- [EclipseにGradleプロジェクトをインポートする - Qiita](https://qiita.com/ponsuke0531/items/eabf0960faa1e954ac68)
- [The STS Gradle plugin is under minimal maintenance and may be discontinued in the future. - Qiita](https://qiita.com/ponsuke0531/items/40fca718c70843ab3ad6)
- [Could not create an instance of Tooling API implementation using the specified Gradle distribution - Qiita](https://qiita.com/ponsuke0531/items/4158786e2f1b55357c05)






















# ふわっとリフレクション
- [Java：クラスの全フィールドの名前と値の一覧を出力する方法](http://did2memo.net/2013/09/10/java-reflection-how-to-display-all-java-field/#getfields-getdeclaredfields)
- [Class (Java Platform SE 7 )](https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html)
- [リフレクション ～ オブジェクトに関連する Class オブジェクトの取得 - Java 入門](http://java.keicode.com/lang/reflection-get-class-object.php)
- [JavaでPropertyDescriptorを使ってBeanのプロパティに簡単にアクセスする](http://npnl.hatenablog.jp/entry/2012/04/29/014121)
- [オブジェクトのクラスを動的に判定するには (instanceof) | 型とクラス | プログラミング言語の比較 | hydroculのメモ](https://hydrocul.github.io/wiki/programming_languages_diff/class/instance-of.html)


# Thymeleaf
![image.png](https://qiita-image-store.s3.amazonaws.com/0/159761/992022e2-fafb-7366-1236-349d01d2244f.png)

- [Thymeleaf](http://www.thymeleaf.org/)
- [Thymeleafでjava.util.Map&lt;String,Object&gt;の内容を繰り返し表示する - Qiita](https://qiita.com/alpha_pz/items/d6009a61bd03e2d0769c)
- [ThymeleafでJavaScriptのちょっとした注意点をメモ - Mitsuyuki.Shiiba](http://bufferings.hatenablog.com/entry/2013/11/23/101731)




# あのてーしょん
- [ちょっと特殊なJavaのアノテーション - Qiita](https://qiita.com/kashira2339/items/6450714e42c37b441514)
- [InvalidDefinitionException: No serializer found for class - Qiita](https://qiita.com/ponsuke0531/items/609927eb7b2e48d44b31)


|Jacksonのアノテーション|意味|参考サイト|
|:--|:--|:--|
|@JsonProperty("{JSONでのキー名}")|プロパティとJSONでのキー名が違っても紐づける|[FasterXML/jackson-annotations: Core annotations (annotations that only depend on jackson-core) for Jackson data processor](https://github.com/FasterXML/jackson-annotations)|
|@JsonInclude(JsonInclude.Include.NON_NULL)|値がnullだったらJsonにキー名も含めて出力しない||
|@JsonPropertyOrder({"キー名1","キー名2"...})|出力順序を指定する||
|@JsonIgnore|Jsonとして出力しない|[Jackson が変換・出力対象とするもの - Qiita](https://qiita.com/mdstoy/items/f0c7aef834810bfacb40)|
|@JsonAnyGetter|Map型のプロパティをフラットに並べる|[Java : Jackson : ちょっと特殊なケースにおけるJSONシリアライズ／デシリアライズ&#124;TECHSCORE BLOG](https://www.techscore.com/blog/2016/12/18/java-jackson-serialize-deserialize/)|
|@JsonAnySetter|存在しないプロパティをMapに設定できる|[jacksonで正体不明のJSONを読み込む - Qiita](https://qiita.com/kivatek/items/5e2bee93419ec9bda289)|






































# テストしたい
**Mockito**

- [Mockito事始め - 俄](http://niwaka.hateblo.jp/entry/2015/09/19/171610)

**JMeter**

- [JMeter ブラウザの動きを記憶させる（HTTPリクエスト） | MISLEAD](http://mislead.jp/601.html)
- [JMeter  基礎編 設定から動作完了まで | MISLEAD](http://mislead.jp/489.html)
- [Java - JMeterで動的にパラメータを渡したい(5175)｜teratail](https://teratail.com/questions/5175)
- [JMeterを使ってみた記録 - ponsuke_tarou’s blog](https://ponsuke-tarou.hatenablog.com/entry/2020/10/21/104306)

**JUnit : 単体テストのお供に**

- [2. テストクラス (2) | TECHSCORE(テックスコア)](http://www.techscore.com/tech/Java/Others/JUnit/2-2/)
- [Eclipse + Quick JUnit Plugin ショートカット一覧メモ (Windows) &mdash; Eclipse Cheat Sheet 0.1 documentation](http://eclipse-cheatsheet.readthedocs.io/en/latest/eclipse-cheatsheet-windows.html)
- [Eclipse + Quick JUnit Plugin ショートカット一覧メモ (Mac) &mdash; Eclipse Cheat Sheet 0.1 documentation](http://eclipse-cheatsheet.readthedocs.io/en/latest/eclipse-cheatsheet-mac.html)
- [JUnitのTheoryテストについて — recompile.net](https://recompile.net/posts/junit-theories.html)
- [JUnitでprivateメソッドをテストする方法 - Qiita](https://qiita.com/ponsuke0531/items/5ebb0c5b793e92ba178e)
- [JUnitで引数に配列や可変長引数をとるprivateメソッドをテストする方法 - Qiita](https://qiita.com/ponsuke0531/items/407449658e12c8b8d395)
- [Java/JUnit/&quot;test&quot;接頭辞無しの&quot;@Test&quot;メソッドが認識されない - Glamenv-Septzen.net](https://www.glamenv-septzen.net/view/806)
- [JUnit4 の Enclosed を使ったテストクラスサンプル](http://tomoyamkung.net/2013/08/28/java-junit4-enclosed/)

**JProfiler : メモリリーク対策に添えて**

- [ej-technologies - Java APM, Java Profiler, Java Installer Builder](https://www.ej-technologies.com/products/jprofiler/ide-eclipse.html)
- [ej-technologies - 評価版ダウンロード: エクセルソフト](https://www.xlsoft.com/jp/products/ejtechnologies/download_eval.html)
- [Confluence](https://nexaweb.jira.com/wiki/spaces/DevCenterJp/pages/24969548/JProfiler)
- [JProfilerスタート ガイド](https://www.xlsoft.com/jp/products/ejtechnologies/JProfiler_startguide.pdf)

```java:処理時間を計測したい
System.currentTimeMillis();
System.nanoTime();
```

- [処理時間の計測 - Qiita](http://qiita.com/shyu/items/55a02ee79b31ca5ea97a)
- [ナノ秒単位での時間計測 - Qiita](http://qiita.com/shr_em/items/f6a24b58484a8dd701aa)
- [Javaパフォーマンス計測 そんなタイマーで大丈夫か？ - プログラマーの脳みそ](http://d.hatena.ne.jp/Nagise/20110221/1298301239)
- [チューニングに使えるJava性能監視ツール | Think IT（シンクイット）](https://thinkit.co.jp/story/2011/03/25/2054)
- [Java それぞれ書き方でどれほどパフォーマンスが違うのか？計測比較してみた。Streamとループとか - Qiita](http://qiita.com/ota-meshi/items/40d5dcb0e99574a8a368)

































# きれいなソースを書きたい
- [株式会社電通国際情報サービス版 Javaコーディング規約2004](http://objectclub.jp/community/codingstandard/JavaCodingStandard2004.pdf)
- [Java セキュアコーディングスタンダード CERT/Oracle 版](https://www.jpcert.or.jp/java-rules/)
- [Java コーディング標準 - オブジェクト倶楽部](http://objectclub.jp/community/codingstandard/CodingStd.pdf)
- [Java コーディング規約 - Acroquest Technology株式会社](https://www.acroquest.co.jp/webworkshop/javacordingrule/Acroquest_JavaCodingStandard_7_0.pdf)


















# jarの使い方
```shell:jarのファイルを抽出する
$ jar xvf {jarとかwarファイル} {jarとかwarファイル内でのファイルパス}
```

- [javaのclassファイルを逆コンパイルする方法 - Qiita](https://qiita.com/ponsuke0531/items/8a6bcb483607a7330ba0)






















# アクセサ

- [Javaのアクセス修飾子(public,privateなど）とスコープをまとめてみた｜コンピューターの勉強会・研修ネタ](https://ameblo.jp/smeokano/entry-11100092447.html)
- [Javaの道：クラス（１３．final）](http://www.javaroad.jp/java_class12.htm)


































# CSVにまつわるエトセトラ
- [CsvColumnPositionMappingBeanWriter (OrangeSignal CSV 2.2.2-SNAPSHOT API)](http://orangesignal.github.io/orangesignal-csv/apidocs/com/orangesignal/csv/io/CsvColumnPositionMappingBeanWriter.html)


































# インストールしたりバージョンを切り替えたりしたい
- [Javaのインストールディレクトリがわからなくなった時の探し方 - Qiita](https://qiita.com/ponsuke0531/items/eb27321a3a6a15b4836e)
- [Postmanをインストールする - Qiita](https://qiita.com/ponsuke0531/items/03483449ea0df505a540)
- [初めてPostmanを使ってみた記録 - ponsuke_tarou’s blog](https://ponsuke-tarou.hatenablog.com/entry/2021/01/24/171658)
- [zipでJavaをインストールする - Qiita](https://qiita.com/ponsuke0531/items/3ddde7e94823c0eaf23b)
- [MacでJavaのバージョンを切り替える方法 - Qiita](http://qiita.com/ponsuke0531/items/795cd00d93b71c14d07b)
- [MacでインストールされているJavaを確認する方法 - Qiita](http://qiita.com/ponsuke0531/items/0506d41e355a585ccc97)
- [Homebrewでjavaをインストールする方法 - Qiita](https://qiita.com/ponsuke0531/items/9be8dee67a91c6c78d4f)























# ファイルを読み込みたい
- [【Java】テキストファイル全体を読み込み文字列を返すメソッド - Qiita](http://qiita.com/penguinshunya/items/353bb1c555f337b0cf6d)
- [テキストファイルを読む - テキストファイルの入出力 - Java入門](https://www.javadrive.jp/start/stream/index1.html)
- [Java でファイルの中身を読み込む方法 (Java SE 7 版) - ひだまりソケットは壊れない](http://vividcode.hatenablog.com/entry/java/java-se-7-files)
















# Mavenが難しいです
- [Mavenをインストールする - Qiita](https://qiita.com/ponsuke0531/items/42bc1966f13093446a87)
- [mavenプロジェクトでjarを追加する - Qiita](http://qiita.com/yhiranoo/items/070458f1c374cb6ed0b5)
- [EclipseでMavenを導入して、ライブラリを使用する方法 | Yuuの悠々自適Blog](http://yuu.1000quu.com/use_maven_in_eclipse)
- [Maven Repository: Search/Browse/Explore](http://mvnrepository.com/)
    - groupId, artifactId, version に指定する値がわかる
- [Mavenが使っているJavaのバージョンを確認する方法 - Qiita](https://qiita.com/ponsuke0531/items/93f3c0aac969ea563f93)
- [JAR Search - findJAR.com](https://www.findjar.com/) : パッケージとクラス名からjarを探すのに便利

## 困った
- [Could not transfer artifact xx:xx:pom:x.x from/to local (file:/path/to/../repo): /home/path/.m2/repository/xx/xx/x.x/xx-x.x.pom.part.lock (Permission denied)](https://qiita.com/ponsuke0531/items/bae4b0ef57c4afcd4b7b)
- [Test source folder 'src/test/java' in project 'プロジェクト' must have an output folder that is not also used for main sources](https://qiita.com/ponsuke0531/items/8083aeb2d3cceeb87477)
- [プロジェクトをMavenでビルドできない時の対応方法 - Qiita](https://qiita.com/ponsuke0531/items/bfa1998d4ac24788529d)
- [pom.xmlに定義されていないjarでMissing artifact - Qiita](https://qiita.com/ponsuke0531/items/736d6abee2dfa48edc32)
- [java.lang.ClassNotFoundException - Qiita](https://qiita.com/ponsuke0531/items/a9d661bbc86e84d3aaf2)
- [Project build error: Non-resolvable parent POM for - Qiita](https://qiita.com/ponsuke0531/items/18e62f951e6fb978c45b)










# 型の使い方を教えて欲しい
- [Javaの型の使い方がわからなくなったときに助けになるサイト集 - Qiita](https://qiita.com/ponsuke0531/items/58b877d1236f2708a7d2)

# ログの出力先がわからなかった時
- [「Log4J」と「SLF4J」ってなんだ？ログの出力先探索記 - ponsuke_tarou’s blog](http://ponsuke-tarou.hatenablog.com/entry/2017/04/24/000404)


# 正規表現を使いたい
[正規表現がわからないから見たいリンク集 - Qiita](https://qiita.com/ponsuke0531/items/64f6a180a4b699336096)

# サーバを使おうと思った
- [GlassFishを使うときに参考になるサイト集 - Qiita](https://qiita.com/ponsuke0531/items/6b3a909e057620e50c9c)
- [アプリケーションサーバと頑張りたいときに参考にするリンク集 - Qiita](https://qiita.com/ponsuke0531/items/47d37782245ebf430b03#_reference-9d8d82fcb81922283399)

# JSF
[JSFがさっぱりうまくいかないときに役立ちたいリンク集 - Qiita](https://qiita.com/ponsuke0531/items/361c6052675abb2d64ff)

# データベースも使うよね
- [データベースと仲良くしたいときに役立つリンク集 - Qiita](https://qiita.com/ponsuke0531/items/f34d60e514dde47e81df)

# IDE(統合開発環境)
- [Eclipseの設定を紹介しているサイト集 - Qiita](https://qiita.com/ponsuke0531/items/f6ede34c1e34a5dd0810)
- [Eclipseの操作を教えてくれるサイト集 - Qiita](https://qiita.com/ponsuke0531/items/3ee5d0ad3f3011b9c5b4)


















# 何だろう？コレって・・・ってなったら。
- [Javaのソースで見つけた CHECKSTYLE:OFF って何？から知るCheckstyle - Qiita](http://qiita.com/ponsuke0531/items/effcdbf890f850030ba3)
- [Javaのソースで見つけた ...(点3つ) って何？から知る可変長引数 - Qiita](https://qiita.com/ponsuke0531/items/f0fc923cdbf2ed987013)
- [クライアントサーバの3階層システムの基本 - ponsuke_tarou’s blog](http://ponsuke-tarou.hatenablog.com/entry/2018/01/17/000123)
- [JPAって何？ - ponsuke_tarou’s blog](http://ponsuke-tarou.hatenablog.com/entry/2019/06/05/000828)
- [WebLogic Serverって何？](http://ponsuke-tarou.hatenablog.com/entry/2019/06/11/231141)
- [Shortの比較でNullPointerExceptionになって知ったオートボクシング - Qiita](https://qiita.com/ponsuke0531/items/7741098c0efe096bd888)










# 脆弱性

## Spring4Shell
- [cve-2022-22965 Spring4Shell の影響調査 | DevelopersIO](https://dev.classmethod.jp/articles/springboot-spring4shell/)
- [A Technical Analysis of How Spring4Shell Works](https://www.extrahop.com/company/blog/2022/a-technical-analysis-of-how-spring4shell-works/)


> Unfortunately, changes to the Class object in Java 9 meant the checks Spring performed were no longer enough.
> ...省略...
> This code attempts to restrict access from overriding these object graph paths:
> - Class.getClassLoader() -> ClassLoader 
> - Class.getProtectionDomain() -> ProtectionDomain
> However, because the Class object now exposes a getModule() method, attackers can now take this slightly different path:
> - Class.getModule() -> Module -> Module.getClassLoader()
> [New Spring4Shell Zero-Day Vulnerability Confirmed: What it is and how to be prepared](https://www.contrastsecurity.com/security-influencers/new-spring4shell-vulnerability-confirmed-what-it-is-and-how-to-be-prepared)














# 困った
- [Antを実行してJRE version less than 1.8 is not supported. - Qiita](https://qiita.com/ponsuke0531/items/30925fe390aa13afa9f0)
- [プロジェクト・ファセットのバージョンを 動的 Web モジュール からx.xに変更できません。 - Qiita](https://qiita.com/ponsuke0531/items/fa85408dd22dd130873d)
- [Checkstyle execution failed due to an internal error. - Qiita](https://qiita.com/ponsuke0531/items/02d3761c83ec2e0681d0)
- [Could not find tools.jar in the active JRE. - Qiita](https://qiita.com/ponsuke0531/items/106d630c3e3d07fe80a9)
- [java.security.InvalidKeyException: Illegal key size or default parameters - Qiita](https://qiita.com/ponsuke0531/items/a7ebfa4833647fb24212)
- [OAauth2を使ったAPIでエラーになる - Qiita](https://qiita.com/ponsuke0531/items/96725f880c6e7013d415)
- [Error: Registry key &#39;Software\JavaSoft\Java Runtime Environment&#39;\CurrentVersion&#39; has value &#39;1.8&#39;, but &#39;1.7&#39; is required. - Qiita](http://qiita.com/ponsuke0531/items/8939cb2764acd3f981c5)
- [Unsatisfied dependency expressed through field - Qiita](https://qiita.com/ponsuke0531/items/673e5e0bba78738a9708)
- [InvalidDefinitionException: No serializer found for class - Qiita](https://qiita.com/ponsuke0531/items/609927eb7b2e48d44b31)
- [APPLICATION FAILED TO START - Qiita](https://qiita.com/ponsuke0531/items/5ce8e8ac855ac9a5a191)