JAVA関連のことを調べてみた

JAVA関連のことを調べてみた

サーブレットのクライアントからレスポンスを返すまでの流れ

サーブレット(Servlet)は、Javaを用いたサーバーサイドの技術であり、クライアントからのリクエストを受け取り、適切なレスポンスを返す役割を担います。以下に、クライアントからサーブレットにリクエストが送られ、レスポンスが返されるまでの詳細な流れをステップバイステップで説明します。

## 1. クライアントからのリクエスト送信

– **ユーザー操作**: ユーザーがウェブブラウザでURLを入力する、フォームを送信する、リンクをクリックするなどの操作を行います。
– **HTTPリクエストの生成**: これらの操作により、ブラウザはHTTPリクエスト(GET、POSTなど)を生成します。リクエストには、ヘッダー情報や必要に応じてボディ(データ)が含まれます。

## 2. DNS解決とサーバーへの接続

– **DNSルックアップ**: ブラウザは入力されたドメイン名をDNSサーバーに問い合わせ、対応するIPアドレスを取得します。
– **TCP接続の確立**: ブラウザとサーバー間でTCP接続が確立されます。通常、HTTPの場合はポート80、HTTPSの場合はポート443が使用

元記事を表示

複数の自動テスト作成で流用できるコード

# はじめに

今まで自動テストを作成したことは無かったのですが、半年程前から業務で自動テストを作成するようになりました。その際に複数の自動テストで流用している汎用性の高いコードがありましたので、それらをまとめてみようと思いました。

# 1. リストから変数の名前を検索し、見つかった際にアクションする
“`
steps.listTest()
.statusIs(200)
.getResponse()
.as(new TypeRef>() {
})
.stream()
.filter(test -> test.getName().equals(NAME))
.findFirst()
.ifPresent(test -> {
testId = test.getId();
steps.install(testId);
});
“`
###### 解説
Testのリスト

元記事を表示

【Java】指定した開始位置から、指定したバイト数をStringで返す

### ■ 関数定義部分
“`java
public static String Bytes_CUT(String str, int start, int get_length) {
“`
#### 引数

1:str 
byte形式に変換して切り取る文字列全体。

2:start
str の何バイト目から切り取りたいかの指定

3:get_length
start から始めて、何バイトの値を取得したいか

#### コード
“`java

/**
* cut_start から、get_length 分の値を取得する
*/
public static String Bytes_CUT(String str, int start, int get_length) {

// string => byte へ変換
byte[] get_def = str.getBytes(StandardCharsets.UTF_8);

int cut_start = start – 1; // index 考慮用に -1 をした値

元記事を表示

Apache Tika 2.9.2に変更してからparse()メソッドがエラーを出すようになった

# はじめに

Apache Tikaのバージョンを1.85から2.9.2に変更したところ、“nkf –guess“が**ASCII**と判定するWebページのデータを処理しようとしたタイミングで例外が発生するようになりました。

このファイル自体は1998年前後に作成されたもので、HTMLとしてはかなり古い仕様で作成されています。

もう少し調べてみるとUS-ASCII形式であることや古いファイルが問題を引き起すのではなく、文字コードがTika内部で判別できないことによるエラーであることが分かりました。問題はnginxが返すようなデフォルトのエラページでも発生します。

もう少し原因を探るとexec-maven-pluginを利用すると問題は発生しません。問題はJARファイルを利用した時に発生していてApache Tika 2.7.0までは問題なく動作し、2.8.0〜2.9.1までは **maven-assembly-plugin** で作成した *-jar-with-dependencies.jar ファイルを利用すると問題なく処理できることが分かり、2.9.2ではどうやって

元記事を表示

SSLHandshakeException、createSSLExceptionが発生。何が原因で発生?

SSLHandshakeExceptionやcreateSSLExceptionは、SSL/TLS接続を確立する際に何らかの問題が発生したときに発生する例外です。このエラーは、一般的に次の原因で発生することがあります。

## 1. 証明書がKeystoreにインポートされていない
SSL/TLS接続を行う際、サーバーは証明書を使ってクライアントに自身のアイデンティティを証明します。もしクライアントがサーバーの証明書を信頼できない場合(つまり、その証明書がクライアントの信頼されたKeystoreに含まれていない場合)、SSLハンドシェイクに失敗し、SSLHandshakeExceptionが発生します。

#### 発生の理由:

サーバーの証明書がクライアント側のKeystoreにインポートされていないため、クライアントはサーバーの証明書を信頼できないと判断する。
#### 解決策:

サーバーの証明書を取得し、クライアント側のKeystoreにインポートする必要があります。
インポート方法の例(LinuxまたはMac OS):
“`bash
keytool -import -tr

元記事を表示

Eclipseで環境セットメモ

## はじめに
Javaの環境セットですが、Java初心者が熟練者には当たり前のことでも色々迷って進めることができない状況がありましたのでメモを残しておきます。

## workspaceの位置
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176603/e1fc72c9-4336-5fcb-f52c-4987fdb743e7.png)

**workspace**フォルダがEclipseや他の関連フォルダと同じ階層にあることは、一般的なデフォルトの設定と考えて問題ありません。

Eclipseのデフォルト設定では、以下のような構造がよく見られます:

– Eclipseのインストールフォルダ内や同じ階層に**workspace**フォルダが作成される。
– この**workspace**フォルダには、プロジェクトのメタデータや設定情報、プロジェクトフォルダ自体が保存されます。

ただし、Eclipseをインストールした際に、ワークスペースの保存場所をカスタマイズすることもできます。その

元記事を表示

@Autowiredを、非推奨の形で使っていたらしい。

## はじめに

何気なく使っていた**Autowiredアノテーション**ですが、どうやら非推奨の使い方をしていたみたいなので、アウトプットも兼ねて残せたらと思います。

※誤りありましたら、ご指摘いただけますと幸いです。

## 想定読者
エントリーなど初学者の方

## そもそもAutowiredとは

SpringのDIコンテナから、インスタンスを注入するための目印みたいなもの。
ざっくり言うと、使いたいクラスのインスタンス化をしてくれるイメージ。

実際にはこんな感じ。

“`java
public class RamenController{

@Autowired
private RamenService ramenService;

@RequestMapping(“/ramenSearch”)
public String searchRamen(Integer RamenId) {

List ramenList = ramenService.findRamenByRamenId(RamenI

元記事を表示

Stream API について理解を深める

# Stream APIとは
JavaのStream APIは、コレクション(リスト、セット、マップなど)のデータ操作を簡潔かつ効率的に行うための機能です。Java 8で導入され、“データ処理をより宣言的(何をするかに焦点を当てる)“に記述できるようにします。これにより、コレクション操作のためのコードが短くなり、読みやすくなります。

![napkin-selection (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3690843/a153eaa8-c96d-1ab5-28a1-79c91b72e9bb.png)

# Stream APIの基本概念
`Stream:` データのシーケンスを表し、要素に対してさまざまな操作(フィルタリング、変換、集約など)を行うためのインターフェース。
`中間操作:` ストリームの要素を変換する操作。結果として新しいストリームを返します(例: map, filter, sorted)。
`終端操作: `ストリームの処理を終了し、結果を返す操作。ストリーム

元記事を表示

AWS SDK for JavaでS3オブジェクトの一覧を取得する2つの方法

## 課題

AWS SDK for Javaで、S3オブジェクトの一覧を取得する機能を利用するとき、日本語でまとまった情報を入手するのに苦労しました。

## 解決方針

どのようにSDKを利用したか、この記事にまとめます。

## 方法

### 前提

– Javaバージョン: 17
– AWS SDKバージョン: v2

### 共通の注意点

– 1回のリクエストで、すべてのオブジェクトが取得されるとは限りません。
– 取得したオブジェクト一覧を格納したクラスには、以下の情報が含まれます。
– a. 取得しきれなかったオブジェクトがあるか否か
– b. 取得したオブジェクト一覧末尾の、次のオブジェクトを示すトークン
– 取得しきれなかったオブジェクトを取得する際に、このトークンが示す位置から取得を開始します。

### バージョニングが無効のとき

`software.amazon.awssdk.services.s3.model.ListObjectsV2Request`クラスを利用します。

一例として、以下の`getAllS3Conten

元記事を表示

【Java】Iteratorを紐解いてみた

## はじめに

実装中、リスト内で条件に合致する要素のみを削除したい、という実装を行う際、chatGPTから、for文よりもIteratorを使用した方が良い、と指摘を受けました。
Iteratorについてはなんとなく聞いたことがありましたが、色々調べてみると、反復処理内で要素削除を行いたい場合において非常に有用であり、興味深かったのでまとめてみました。

※誤りありましたら、ご指摘いただけますと幸いです。

## Iteratorとは

IteratorはJavaのインタフェースでありで、Javaにおいてコレクションの要素を順次処理するために使用されるインタフェースです。
主に java.util パッケージに含まれており、コレクション(リスト、セットなど)の要素にアクセスする際に役立つかと思います。

特定の要素に直接アクセスするのではなく、要素を1つずつ順に取得できるという点がポイントです。

[インタフェース Iterator](https://docs.oracle.com/javase/jp/11/docs/api/ja

元記事を表示

Java メソッドの基本(抜粋)

## 基礎(一部抜粋)
### メソッドの呼び出し方(自クラス)
– staticがついているメソッドからは、staticがついていないメソッドは呼び出せない
– staticではないメソッドは「インスタンスメソッド(動的なメソッド)」とも言う
そのため、インスタンス化する必要がある
1.クラスのインスタンスを作る
“`
例)
Main a = new Main();
“`
2.クラスのインスタンスを使ってメソッドを呼び出す
“`
例)aクラスにprintHelloインスタンスメソッドがあるとする
a.printHello();
“`
### メソッドの呼び出し方(他クラス)
– staticなメソッドからstaticなメソッドを呼び出す場合は
「クラス名.メソッド名」
– staticなメソッドからstaticでないメソッドをメソッドを呼び出す場合は
1.インスタンス作成
“`
例)
Other other = new Other();
“`
2.インスタンスを使ってメソッド呼び出し
“`
例)otherクラスにprintHelloインスタンスメソッドがあるとする

元記事を表示

Javaからのデータベース操作基礎

## JDBCとは
javaプログラムとRDBMS(リレーショナルデータベース管理システム。MySQLなど)の仲介を行うプログラム部品のこと。
javaプログラムからDBへの接続、SQLの実行、データの取得などを行う手段を提供する。
javaプログラムがRDBMSを扱う際は、JDBCに含まれる「**JDBC API**と**JDBCドライバ**」を介して行われる。
### JDBC API
– JDBC APIは**Java標準ライブラリ**に含まれている
– RDBMSを標準化された方法で操作が可能
– パッケージ「java.sql」「javax.sql」に含まれるクラスを使用してDB接続、SQLの実行を行うことが可能
### JDBCドライバ
– RDBMSに接続して処理を実行する
– Oracle、MySQLなどRDBMSごとに異なるJDBCドライバが存在しており、各RDBMSの開発元が提供している
### JDBCAPIとJDBCドライバで分かれている理由
JDBCはjavaプログラムからDBを操作する上でRDBMSの違いを吸収する役割をしている。
例えば、RDBMSがMySQ

元記事を表示

NullPointerExceptionとprintメソッドの関係について

皆さんこんばんは、駆け出しエンジニアの脆弱性アザラシです。

今回は、Javaの資格であるJava SE11 Silverの試験対策をしていて、対策本の一つである『徹底攻略Java SE 11 Silver問題集』通称「[黒本](https://www.amazon.co.jp/%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5Java-SE-11-Silver%E5%95%8F%E9%A1%8C%E9%9B%86-1Z0-815/dp/4295007625/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3HUSED8HBCVXE&dib=eyJ2IjoiMSJ9.O9_BcR-8LKHlrUZ00AI17ahtX1t29m23NLeH7LgkO1JD83mTVEAYGqtKDOkcCKv-Xc_ftW0DSu6kExSVoXpaqx6o7pKjoXIYJIGszbRaoT65ZfqOfGeSJnz9PJokDz1vsBJMEymLeBhSoBdiUubqNO98hmW30E3vF1

元記事を表示

【超初心者向け】Spring Boot超入門(WEBアプリ編)

# はじめに
こんにちは。
今回の超入門シリーズはSpring Bootです。
Spring Bootって、フレームワークとしては幅広く使われていますが、Spring Boot自体がよくわからなかったり、文献が断片的だったりして、中々まとまっているものがなく、この記事を執筆するに至りました。
Spring Bootが多機能なので、サラっとまとめられないのはわかるんですけどね。
Spring BootはWEBアプリからREST-API、バッチ機能まで幅広く利用できるフレームワークですが、今回はタイトルの通り、WEBアプリケーション向けの使い方にフォーカスします。

# やりたいこと
前述しましたが、Spring Bootを使ったWEBアプリケーションでも、断片的なサンプルが掲載されている文献はたくさんあります。
ただ、当記事では、断片的な情報を**まとめる**ことが目的ですので、業務アプリケーションの構築上、大体必須になる要素をいくつかピックアップして、それらを合体したサンプルアプリケーションを交えて紹介します。

■当記事で実現すること
* 基本となるアプリケーションの構築方法(これは

元記事を表示

Adjust SDK v5を読み解く[Android]

# この記事は何?
Adjustのコードを読んで何となく語学の為にメモしたものです。
長いので生成AIに読み込ませて要約して貰って適宜質問を投げるといった使い方が良いかと思います。

# Adjustとは
[Adjust](https://www.adjust.com/ja/)は、アプリの最適化とグロースを支援するソリューションです。
複数のプラットフォームを横断する計測技術で、アプリマーケティングの全過程においてマーケターをサポートします。

(公式サイトより引用)

実際に楽天アプリを使ってかみ砕いて説明すると、[楽天市場サービス一覧](https://www.rakuten.co.jp/sitemap/sp/app.html)にあるような
https://app.adjust.com/dj7tmxv のようなadjustリンクを踏んだ際に

1. Adjustがリンクをクリックしたことを記録
2. iOSはapp storeへ、androidはGoogle Play Storeにリダイレクトする
3. アプリを初回起動時にインストールされたことをAdjustに送信
4. 1と3を

元記事を表示

Stack (データ構造)

Stack (スタック)
1. スタックの概念

データを一時的に収納するために使われるデータ構造.
入出力の順は LIFO(Last In First Out)で、最後に入れたデータから先に引き出す特性を持っている
Stackにデータを入れる作業をpushと言い、引き出す作業をpopと言う
pushとpopが行われる位置をtopといい、Stackの一番底をbottomと言う
元記事を表示

User Managed ID を使用してセキュアに Azure Container Apps から Azure OpenAI へ接続

今日は、こちらのエントリの中で、2つの内容を紹介したいと思います。

1. コンテナ化しなくても Azure Container Apps に Java アプリをデプロイできるようなった
2. Azrue Container Apps から Azure Open AI に対して、ユーザ・マネージド Identity を使用してセキュアに接続

ここで使用したソースコードはこちらの GitHub レポジトリにあります。
[GitHub: Secure-OpenAI-Java-App-on-Azure-Container-Apps
](https://github.com/yoshioterada/Secure-OpenAI-Java-App-on-Azure-Container-Apps)

## 1. コンテナ化しなくても Azure Container Apps にアプリをデプロイできるようになった

2024/9/11 に 「[Announcing the General Availability of Java experiences on Azure Container App

元記事を表示

eclipseで開発時に使用するショートカット、デバッグ方法

eclipseのショートカットをうまくまとめた記事はたくさんありますが、自分用のメモも兼ねて業務中よく使うショートカットと、追加でデバッグ時に使う機能をまとめてみました。

# ショートカット

### F3
クラスやメソッドの宣言場所へ移動
・メソッドが呼び出されていて、その実装を見たくなることが多々あるため、そういう時に活躍します。

### Ctrl+t
インターフェース、抽象クラスの実装へ移動
・F3で見に行った先がインターフェースだと、結局実装が見られないためこのショートカットを使用して
実装されているクラスを探しに行きます。

### Ctrl+Alt+h
メソッドをどこで呼び出しているのか確認
・使い方がよくわからないメソッドのあるときはこれで他に使用されている箇所を見ることができるため
使い方の参考にできたり、あるメソッドを改修する際に影響範囲を調べることができる
(テストすべき点がわかりやすくなる)ショートカットです。

### Ctrl+Shift+i
デバッグ中の変数の中身の確認
・デバッグ中は中身を確認したい変数にカーソルを当てたり変数タブから中身を確認できたり

元記事を表示

Windows で cargo:run したときの Tomcat の文字化けを解消する

## 環境

– Windows 11
– 表示言語: 日本語
– システム ロケール: 日本語 (日本)
– ワールドワイド言語サポートで Unicode UTF-8 を使用 はチェックしていない
– JDK 17
– Maven 3.9

## 困りごと

以下の通り pom.xml を書いて cargo:run すると、Tomcat のログが文字化けしている。

“`xml:pom.xml 4.0.0

com.example
cargo-run-test
0.0.0-SNAPSHOT

org.codehaus.cargo

元記事を表示

AWSで簡易なWebアプリをデプロイ ~ アプリケーション編 ~

お疲れ様です.Tomです.

AWSで簡易なWebアプリをデプロイ【アプリケーション編】です.

:::note info
全体概要編は[こちら](https://qiita.com/tomtech_2024/items/fc14e5fe845b7d7d5712)をご覧ください.
:::

スタックを示した構成図でいうところの赤で囲った枠が今回のトピックになります.

![application01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2918716/a2e43ba8-f5c8-a583-5a83-39c8c31dc4be.png)

ここではアプリケーションの **コーディングとビルド** に焦点を当てます.
僕自信オブジェクト指向という概念はなんとなくわかるものの,JavaやHTMLの中身を見てすぐにデバッグできるみたいなスキルはないので,調べながらやりました.また実行に関しては `サーバ編`で触れることにいたします.

`アプリの目的としては定義した機能群をソースコードに落とし込み,【ユ

元記事を表示

OTHERカテゴリの最新記事