- 1. JSP&サーブレットによるwebアプリケーション作成の覚書
- 2. 先輩社員がどうやって不具合を解決しているのか
- 3. Java SE Gold で勉強したことメモ(Predicate編)
- 4. Spring Bootをマスターするまでのロードマップ
- 5. Javaで例外からスタックトレースを文字列として取得する
- 6. Spring Session JDBC デフォルトテーブル名の変更
- 7. ログイン認証について
- 8. 【Java】JUnitの基本操作
- 9. Java SE Gold で勉強したことメモ(Enum編 その2)
- 10. Java SE Gold で勉強したことメモ(Enum編)
- 11. Singly linked list (単純連結リスト)
- 12. Spring Retryを使用してリトライ処理を簡単に実装する
- 13. カスタムバリデーターを作ってより厳密にチェックをする
- 14. JAVA で 単体テストを自動化するための JUnit についてを解説
- 15. JavaScript以外でもどんどん変数を定数として宣言しようという話
- 16. Native Memory Tracking を使用した Java プロセスのメモリ消費内訳の紹介
- 17. 【Java】関連記事まとめ
- 18. Dev ContainersでJava8 AzureFunctions環境構築時に沼ったのでメモ
- 19. プログラミングにおける”オブジェクト指向”とは?主要な概念についても解説
- 20. TomcatでのDBCPのデフォルト実装を確認してみた
JSP&サーブレットによるwebアプリケーション作成の覚書
# はじめに
JSP&サーブレットで web アプリケーションを作成する際に学習した事項を絞って覚書にしました。あまり触らなくなりましたが、基本的な部分を忘れかけていたので、ここに覚書として残しておきます。
:::note warn
最新の情報では無い場合があります。
:::# Tomcat
Tomcat はオープンソースのサーブレットコンテナ。サーブレットコンテナとは、端的に言うと「JSP に対応したウェブサーバ」のこと。Tomcat では、サーバ上のプログラムを「アプリケーション」という単位で管理しており、一つのサーバの中に複数のアプリケーションを配備することができる。
### アプリケーションフォルダの設定
1. webapps フォルダに配置する方法
アプリケーション(WAR ファイルまたは展開されたフォルダ)を Tomcat の webapps ディレクトリに配置する。Tomcat は起動時にこのフォルダ内のアプリケーションを自動的に検出して展開する。
1. 外部設定ファイルを使用する方法
Tomcat にアプリケーションフォルダの場所を設定するには
先輩社員がどうやって不具合を解決しているのか
## 自己紹介
– opengl-8080
– たまに Qiita で技術メモを書いたり
– 関西在住・SIer 勤務—
## はじめに
– システム開発をしていると、いろいろな場面で不具合と遭遇する
– 当然、不具合は解決しなければならない
– 下に若手がついて一緒に開発をすることがあるが、不具合の解決方法が分からないと相談を受けることがよくある
– 経験が浅いと、不具合調査のために何から着手すればいいか分からない
– ある程度パターン化された手順を踏むことで、多くの不具合は解決できるという経験的な認識がある
– 私がどういう手順で、何を考えながら不具合の解決を行っているかを整理・説明することで、若手の成長に繋がれば幸いJava SE Gold で勉強したことメモ(Predicate編)
関数型インターフェースのPredicate\
の使いどころについて以下のような場合が挙げられるようです。
Predicateを用いて説明用変数を導入し、処理内容を分かりやすくできます。“`php:Type.java
public enum BloodType{ //血液型を表すEnumクラス
A,B,AB,O;
}
“`
“`php:Patient.java
public class Patient{ //患者を表すクラス
private BloodType bType;
private int age;public Patient(BloodType bType, int age){
this.bType = bType;
this.age = age;
}
//getter類は省略
}“`
Predicateを使用しない場合
“`php:Main.java
public class Main{
public static void main(String[] a
Spring Bootをマスターするまでのロードマップ
# はじめに
業務でSpring Bootを使って、REST APIの開発する予定なので、マスターするまでのロードマップを生成AIに聞いてまとめてみました。私のスキルレベルはこんな感じ
– Javaは学生の頃からちょくちょく触ってて、業務でもコーディングはしてきた。(半年 ~ 1年未満)
– Spring Bootに関しては、1ヶ月程度研修で勉強したレベル (1年前ぐらい)
DIコンテナあたりの概念は知ってて、超基本的な実装だったらできるつもり# 生成AIに質問してみた
こんな感じで質問してみました、結構良さそう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3561504/7ac57199-03d0-6c82-7200-2340bc448d87.png)# 作成したロードマップ
内容精査して、整理してみた。ねずみ色はこれから学習しようと思っていること。
苦手意識があり、注力してしっかり勉強したいことは赤色にしました。
※括弧内は到達レベルの目標です。
## 基本編 (
Javaで例外からスタックトレースを文字列として取得する
`StringWriter` と `PrintWriter` を組み合わせて使用する方法があります。
例外のスタックトレース全体を文字列に変換することができます。## サンプルコード
“`StackTraceToStringExample.java
import java.io.PrintWriter;
import java.io.StringWriter;public class StackTraceToStringExample {
public static void main(String[] args) {
try {
// 例外を発生させる(例として、0で割り算)
int result = 10 / 0;
} catch (Exception e) {
// スタックトレースを文字列として取得
String stackTrace = getStackTraceAsString(e);
System.
Spring Session JDBC デフォルトテーブル名の変更
## 環境
Mac OS Sonoma : 14.6.1
Eclipse IDE : 2024-09 (4.33.0)
Spring Framework : 6.1.13
Spring Boot : 3.3.4
Spring Security : 6.3.3
Spring Session JDBC: 3.3.0
Eclipse Embedded Maven : 3.9.9
JDK (Java Development Kit) : 21
MySQL Server : 8.0.28 MySQL Community Server – GPL(Dockerコンテナ上に構築):::note warn
注意
情報が正確かつ明確であるよう努めていますが、間違いや不完全な説明があるかもしれません。
内容を改善するためのフィードバックや修正を歓迎します。 ご理解のほど、よろしくお願いいたします。
:::## 前提
①なんらかのSpring Bootプロジェクトが作成済みであること。
②セッション管理を必要とする処理が実装されていること。(今回はあらかじめ、ログイン機能が実装されています。)
③
ログイン認証について
# はじめに
SpringSecurityを使用したログイン認証については、framework内で処理が行われているため、少々わかりにくいことがあるかと思います。認証プロセスを理解することで認証周りの開発も躓くことなく進められると思いますので、認証プロセスについて解説していきます。
# SpringSecurityを使用した認証プロセス
ログイン認証時のユーザー名とパスワードの検証は、Spring Securityの認証プロセス内で行われています。具体的には、以下の流れになります。
1. ユーザがログインフォームからユーザ名とパスワードを入力して送信します
1. “`UsernamePasswordAuthenticationFilter“`がリクエストを受け取り、ユーザー名とパスワードを抽出します
1. “`AuthenticationManager“`によって認証プロセスが開始されます
1. 取得したユーザー情報のパスワードと、入力されたパスワードを“`PasswordEncoder“`を使用して比較します
1. パスワードが一致すれば認証成功となり、ユーザーの
【Java】JUnitの基本操作
# 概要
JUnitの基本操作について学習した際の備忘録です。# JUnitによるテストのメリット
– テストに要する工数の削減。テストケースが体系化されており、一度作成したテストケースは何度も利用可能であるため
– 使用やソースプログラムの機能が明確になる
– コード変更による退行を防ぎ、リファクタリングを促進させる# 網羅条件
– 命令網羅(statement coverage)(C0)
全ての命令を少なくとも1回は実行するテストを行う
– 分岐網羅(branch coverage)(C1)
分岐のパスを全て少なくとも1回は通るテストを行う
– 条件網羅(condition coverage)(C2)
分岐の際の判定条件が複数ある場合に、それぞれの条件が真あるいは偽になる場合を少なくとも1回は含むテストを行う# JUnitの設定と基本操作
Eclipseを使用する場合の設定と基本操作です。バージョンはEclipse(pleiades all in one)2023です。
### テストケースの作成
1. テスト対象クラスを右クリック
1. 新規>その他>Java>JUn
Java SE Gold で勉強したことメモ(Enum編 その2)
JavaのEnum型のクラスにはコンストラクタを定義することができるみたいです。
Enum型の列挙子はEnumを使用するタイミングでJVMが自動であまねくインスタンス化するらしいです。また、JavaのEnumはほかの言語のEnumとちがってクラスとして定義されていて、Objectを継承、Serializable、Comparableを実現しているため、toString()やhashCode()、compareTo()などのメソッドが用意されています。
それを踏まえたうえで、以下のコードは次のような結果になります。
“`php:EnumSample.java
public enum EnumSample{
Gold(“Gold!”),Silver(“Silver!”),Bronze(“Bronze!”);
private String value;private EnumSample(String value){
this.value = value;
System.out.println(this.value);
Java SE Gold で勉強したことメモ(Enum編)
JavaのEnum型のメソッドで以下のようなものがあるみたいです。
“`php:EnumSample.java
public enum EnumSample{
Gold,Silver,Bronze
}
“`
“`php:Main.java
public class Main{
public static void main(String[] args){
//EnumSampleの列挙子を配列型で返すvaluesメソッド
for(EnumSample e: EnumSample.values()){
System.out.println(e);
}
}
}
“`
[Java SEのAPI](https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Enum.html)にもvaluesメソッドは載っていないようです。使いどころあるかもしれなさそうだったのでメモしておきます。
間違っている箇所があれば教えてください。
Singly linked list (単純連結リスト)
LeetCode で初見の下記の表記にビビって扱いの理解に数時間かかったがどうもしっくりこない。
“`
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
“`https://leetcode.com/explore/learn/card/the-leetcode-beginners-guide/692/challenge-problems/4426/
このチュートリアルの動画がとても詳しく説明してくれていて初心者にためになる。
10分で理解できるのでこれを見るべし。
Spring Retryを使用してリトライ処理を簡単に実装する
## はじめに
Webアプリケーションにおいて一時的なネットワーク障害や外部APIの応答遅延といったエラーが発生することがあります。
これらのエラーは再試行(リトライ)によって回避できる場合がありますが、手動でリトライロジックを実装するのはなかなか面倒です。
そこでSpringに備わっている機能のSpring Retryを使うことで、簡単にリトライ機能を実装することができます。## Spring Retryとは?
Spring Retryは、Springプロジェクトに含まれるライブラリで、例外発生時に処理を再試行するための簡単な方法を提供してくれます。
このライブラリを使うことで、以下のようなケースでリトライロジックを自動的に実装できます。– ネットワークの一時的な障害
– 外部APIのタイムアウト
– 一時的なデータベースエラーSpring Retryは、アノテーションベースで簡単に設定でき、リトライ間隔やリトライ回数、特定の例外に対してのみリトライを行う設定が可能です。
## Spring Retryのセットアップ
まず、Spring Retryを使用するために
カスタムバリデーターを作ってより厳密にチェックをする
## `@Email`アノテーションとは
Springフレームワークの`@Email`アノテーションは、メールアドレスの妥当性を検証するための一般的な手段です。
## `@Email`アノテーションの問題
`@Email`アノテーションは、メールアドレスのフォーマットをチェックしますが、特殊文字や全角スペースのチェックは行いません。
そのため、ユーザーが不正な文字を含むメールアドレスを入力してもエラーが発生せず、登録が完了してしまうケースがあります。
この問題に対処するためにカスタムバリデーターを実装する方法を解説します。## カスタムバリデーターによる解決策
この問題を解決するために、カスタムアノテーションとカスタムバリデーターを実装し、全角スペースを削除してからバリデーションを行う仕組みを導入します。
カスタムアノテーションの実装は次の通りです。
“`java
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Eleme
JAVA で 単体テストを自動化するための JUnit についてを解説
## ■ はじめに
JAVAでコーディングしたコードの単体テストを行う際には様々な方法がありますが、
今回紹介する`JUnit`はJavaで単体テストを自動化するためのフレームワークです。テストを自動化することは人為的なテストの漏れやミスを減らし、プロジェクトの品質向上に繋がります。
この記事ではJUnitの基本的な使い方から実際のテストケースの作成方法を解説していきます。## ■ 目次
1. [JUnitのインストールとセットアップ](#1-junitのインストールとセットアップ)
2. [JUnitでの基本的なテストの書き方](#2-junitでの基本的なテストの書き方)
3. [アサーションを使ったテストの実施](#3-アサーションを使ったテストの実施)
4. [JUnitのライフサイクルメソッド](#4-junitのライフサイクルメソッド)
5. [まとめ](#5-まとめ)## 1. JUnitのインストールとセットアップ
まず最初にJUnitを使うための環境をセットアップを行う必要があります。
`Maven`や`Gr
JavaScript以外でもどんどん変数を定数として宣言しようという話
# はじめに
JavaScriptだとかなり認知が広まりつつある「変数はできるだけ`const`で宣言して、厳しい場合だけ`let`を使おう」という話。
なぜかJavaScript限定で話されがちですが、よく考えたらJava等でも同じようにしたほうが良いのでは?# 例
Salesforceの文法なので厳密には違うかもしれませんが、まあJavaと似たようなもんのはず。
“`java
public static void testMethod(String inputValue) {Boolean isXXX = checkValue(inputValue);
// 色んな処理がずらっと何十行
if (isXXX) {
// 色んな処理
}
}
“`さあこの時、下の`if`分岐のときに`isXXX`が最初の宣言通りかどうかは、きちんとコードを全部見ないといけません。
(検索したら良いというのはもちろんですが、それは一旦置いておいて)こういうのを避けるためにJavaScriptでは「`const`を使おう
Native Memory Tracking を使用した Java プロセスのメモリ消費内訳の紹介
# Native Memory Tracking を使用した Java プロセスのメモリ消費内訳の紹介
2024年10月27(日)開催の [JJUG CCC 2023 Fall](https://ccc2024fall.java-users.jp/) にて発表した資料の共有です。
![スライド0.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622281/375970b7-0663-e1e6-245c-77c7d524c8e4.png)
![スライド1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622281/ed357ad8-334f-9151-c0c1-11f5db057375.png)
![スライド2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622281/0b9ab9d4-081e-073f-47d9-43ab
【Java】関連記事まとめ
# 概要
私が投稿したJavaに関する記事のまとめです。# 記事
https://qiita.com/ramgap/items/8d6849133ddc9dbc0be9
https://qiita.com/ramgap/items/d410160094cb7ee31228
https://qiita.com/ramgap/items/f561ab23bfb43f632bd3
https://qiita.com/ramgap/items/5038103af48042539430
https://qiita.com/ramgap/items/989ed1d5992217532e24
https://qiita.com/ramgap/items/0b9234c1b325d6716049
https://qiita.com/ramgap/items/e02ac6f122a138c858bb
https://qiita.com/ramgap/items/5ce9d27256198876d0c5
https://qiita.com/ramgap/items/76793e1ea
Dev ContainersでJava8 AzureFunctions環境構築時に沼ったのでメモ
今更Java8でAzureFunctionsを構築する人なんていないと思いますが、構築の際に沼ったのでメモとして記載します(試してないですが多分Java11でも発生する)。
VSCodeからだと簡単にdevcontainerの環境を作ることができます。
1. `Dev Containers`の拡張機能をインストール
2. `F1`を押して`開発コンテナー: コンテナー機能の構築(Dev Containers: Configure Container Features)`を選択
3. `Azure Functions (Java)`を選択
4. `8-bullseye`を選択(`8-bookworm`を選択するとコンテナビルド時にエラーで止まる)
5. インストールする追加機能は自由に
6. オプションも自由に
7. `開発コンテナー: コンテナーで再度開く(Dev Containers: Reopen in Container)`これでコンテナ完成かと思いきや
## バージョン確認
“`
$ java -version
openjdk version “1.8.0_372”
プログラミングにおける”オブジェクト指向”とは?主要な概念についても解説
## ■ はじめに
`オブジェクト指向`という言葉をご存知でしょうか?
Javaはこの「オブジェクト指向」を採用している言語です。
このオブジェクト指向というのはプログラミングにおいて **データ** と **その操作** を
1つの「**オブジェクト**」として扱うことで、複雑なシステムを整理して理解しやすくするといった考え方です。今回はそのオブジェクト指向の基本的な概念と、Javaでの実装例を用いて理解を深めていきましょう。
## ■ 目次
1. [オブジェクト指向とは](#1-オブジェクト指向とは)
2. [カプセル化](#2-カプセル化)
3. [継承](#3-継承)
4. [ポリモーフィズム](#4-ポリモーフィズム)
5. [まとめ](#5-まとめ)## 1. オブジェクト指向とは
オブジェクト指向とはプログラムを「**オブジェクト**」という単位で組み立てていく方法のことです。
オブジェクトはデータ(またはフィールド)とその操作(メソッド)を一つにまとめたもので、
現実世界のモノや概念をプログラム上で表現していま
TomcatでのDBCPのデフォルト実装を確認してみた
# 概要
JDBCを利用してデータベース関連の処理をする際に、これまではDriverManager を利用してコネクションを取得していたが、一般的には、DataSource と JNDI という仕組みを使ってコネクションを取得する方が良いということを知った。
DataSource を用いれば、リソース情報を外部ファイルに記述することができるほか、コネクションプーリングの機能も使える。
このDataSourceの実装クラスは複数あるが、Tomcatに含まれるデフォルトの実装クラスが何か知りたかったので、プログラムを書いて実験してみたところ、ところ、Tomcatバージョン8、9、10においては`org.apache.tomcat.dbcp.dbcp2.BasicDataSource`がデフォルトで用いられることが分かった。# DataSourceのデフォルトの実装クラスは?
Tomcat には、Tomcat DBCP Pool という Tomcat に特化した実装がある。Apache common DBCP よりもパフォーマンスが優れているとされている。
実装の切り替えには、DataS