JAVA関連のことを調べてみた2022年04月29日

JAVA関連のことを調べてみた2022年04月29日

サーブレットとJSPを使った画面表示

# はじめに
こんばんわ、きりです。
本記事は[Nablarchを使ってみよう](https://qiita.com/kirin1218/items/242ee0f174f1cb12ef17)のサブ記事として作成しております。

[前回](https://qiita.com/kirin1218/items/db1ba8af6c323c925919)はサーブレットの作成を行い、ブラウザからのHttpアクセスに対して、Javaのプログラムを実行することに成功しました。

今回は[サーブレット](https://qiita.com/kirin1218/items/99a51d8ffed8b107b4f9#%E3%82%B5%E3%83%BC%E3%83%96%E3%83%AC%E3%83%83%E3%83%88%E3%81%A8%E3%81%AF)と[JSPファイル](https://qiita.com/kirin1218/items/99a51d8ffed8b107b4f9#jspjava-servlet-pages%E3%81%A8%E3%81%AF)を使って画面の表示を行ってみようと思

元記事を表示

ポンコツ駆け出しエンジニアが大手IT企業に転がり込んで四苦八苦した話

こんにちは。社会人4年目に突入したエンジニアです。
今回はWebアプリ開発がほぼ未経験なのに(Pythonによる機械学習は研究室でやっていましたが)大手IT企業に転がりこんでしまったせいで四苦八苦したことを書き連ねていこうと思います。

新卒研修はJavaのSpringBootというフレームワークで簡易版の旅行予約サイトを作るというものでした。
しかし、僕はPythonはやったことはあるけどJavaはほぼ未経験でした(基本的なfor文やif文の書き方、それからオブジェクト指向の概念だけは知ってるレベル)

するとどうなるか?全然研修について行けませんでした・・・

研修のスピードは爆速で、100ページPDFを一日で学習し追えるというようなものでした。
自分はほぼ初見の内容ばかりだった一方、周りのみんなは知識の照らし合わせるだけというような感じで、平気そうにしている人が多かったです。

知識の習得が中途半端なまま、研修は座学から実際に手を動かしてものづくりするフェーズに突入。

全然チームの中で活躍できませんでした・・・

– レビュー?そんなのしたことないよ!というかGitHubで共同

元記事を表示

Java 準備編 環境構築(JDK・Android Studio インストール)

## Java とは

https://and-engineer.com/articles/YaCYXBIAAB4AgJRT

https://www.javadrive.jp/start/install/index5.html

>Javaは世界的に利用されている汎用的なプログラミング言語です。Javaはサン・マイクロシステムズ社から1996年にリリースされましたが、同社が2010年にオラクルに吸収合併され、Javaの版権もオラクルに移行しました。

#### Javaの特徴

>▪Java自体は無償で利用が可能
▪C言語をベースに開発された人気の言語
▪プラットフォームに依存せず、JVM(Java仮想マシン)と呼ばれるソフトウェアを用いてWindowsやMac、LinuxなどあらゆるOS環境で動かすことができる
▪プログラムをモノとしてとらえるオブジェクト指向言語
▪ガベージコレクション機能により、メモリを浪費しない

といった点が挙げられます。

### ◎ JDK とは

JDKとは「Java Development Kit」の略語で、Javaのプログラム開発や実行に用いるプ

元記事を表示

【Java_繰り返しの中断(2種類)】

現在、書籍でJavaの学習に取り組んでいます。
この投稿はその備忘録になります。

## break文とcontinue文
for文やwhile文を用いた繰り返しの途中で、その繰り返しを中断したいとき、
`【break文】`や`【for文】`を使います。

#### ■break文
break文を利用した場合

“`java
public class App{
public static void main(String[] args) throws Exception{
for (int i = 1; i < 10; i++){ if (i == 3){ break; } System.out.print(i); System.out.print(" "); } } } 【結果】 1 2 ``` 以上の様に`break`によってif文で指定した値以降の処理は中断されています。 (3以降は出力されない) #### ■continue文 continue文を利用した場合 ```java public class App{ publi

元記事を表示

JavaでNIO.2を使いつつ複数のファイルをZIP圧縮する

# 環境
JDK 17を使っています。たぶん、多少バージョンが違っていても同じように動くと思います。

# コード
test1.txt・test2.txt・test3.txtを圧縮して、test.zipを作成します。

“`java:import文
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
“`

“`java:コード本体
List targetFileList = List.of(
Path.of(“test1.txt”),
Path.of(“test2.txt”),
Path.of(“test3.txt”)
);

Path zip

元記事を表示

Javaでクラスパス上のファイルをPathとして取得する

# 環境
JDK 17を使っています。たぶん、多少バージョンが違っていても同じように動くと思います。

# 今回のフォルダ構造
今回はsrc/main/resources配下のファイルを取得したいとします。

“`bash
$ tree .
.
└── src
   └── main
       ├── java
      │   └── foo
      │   └── Main.java
   └── resources
   ├── sample1.txt
   └── bar
      └── baz
       └── sample2.txt
“`

# コード

“`java:Main.java
package foo;

import java.nio.file.Path;

public class Main {
public static void main(String[] args) {
Path path1 =

元記事を表示

【オラクル西川です。番外編】JavaやGraalVMの記事一覧表

記事が多くなってきたので、下記にまとめますね。

<第5回> 大規模データ分析基盤の個別相談受付中です! 
https://qiita.com/Yojiro_Nishikawa/items/8b15a1bb976e0cf2470b

<第4回>Jakarta EE(Java EE)とSEとは、そもそも何か? 違いは?
https://qiita.com/Yojiro_Nishikawa/items/a023880ea8b5b336e728

<第3回>GraalVM EEとCEの違い。
https://qiita.com/Yojiro_Nishikawa/items/c39de4b8f31867a916fc

<第2回>GraalVM入門編(プレゼン資料32枚)資料を共有します。
https://qiita.com/Yojiro_Nishikawa/items/d10334aa8112aad6af8d

<第1回>GraalVMを御紹介します。(関連記事へのリンクまとめ)
https://qiita.com/Yojiro_Nishikawa/items/b131a67963d6a78c

元記事を表示

サーブレットの作成

# はじめに
こんばんわ、きりです。
本記事は[Nablarchを使ってみよう](https://qiita.com/kirin1218/items/242ee0f174f1cb12ef17)のサブ記事として作成しております。

[前回](https://qiita.com/kirin1218/items/eca5f166274b376410be)はMavenのアーキタイプより基本的なWebアプリケーションを作成しました。

今回は、簡単なサーブレットを作成してみたいと思います。

本記事は、[前回](https://qiita.com/kirin1218/items/eca5f166274b376410be)で作成したプロジェクトを使用しますので、プロジェクトをまだ作成していない場合は、まずは前回の記事を御覧ください。

本記事以外のコンテンツは[こちら](https://qiita.com/kirin1218/items/242ee0f174f1cb12ef17#nablarch%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%

元記事を表示

【Spring】AWSデプロイで初心者がぶち当たる疑問に答える

# 概要
ローカル環境(Eclipse)でSpring Boot(Java)アプリケーションを開発し、その後AWSでデプロイに挑戦しようとする初心者がぶち当たるであろう疑問と、その解決策を順を追って説明します。

私自身、AWSやその周辺知識ゼロの状態から独学でデプロイに成功できましたが、知っている人からすれば当たり前でも初心者ゆえにわからないことが多く、解決に時間を要しました。本記事では、初心者なら私と同じような疑問をもつのでは?と感じた部分に触れていきます。

# 本記事のゴール
– DBを利用するローカルのSpringアプリケーションをjar化し、デプロイできるようになる(具体的には下記)
– Eclipseからjarファイルを作成しEC2に配置できるようになる
– EC2で環境変数を適切に設定し、RDSのDBに接続できるようになる
– AWSデプロイという、初心者が尻込みしがちな未知の作業に対するハードルを下げる

# 本題
こちらの記事を参考にデプロイに挑戦、またデプロイに必要な周辺知識について調べていたところ疑問点が複数出てきました。

– [【初心者必見】

元記事を表示

Javaを使用してWordの各ページに異なる背景を設定する方法

Word文書では、「デザイン」-「ページの色」から直接ページの背景を設定できます。そしてJavaコードを介して設定する方法は、以下の内容を参照してください。

1.単色の背景を設定します
“`
doc.getBackground().setType(BackgroundType.Color);
doc.getBackground().setColor(Color.PINK);
“`
2.グラデーションの背景を設定します
“`
doc.getBackground().setType(BackgroundType.Gradient);
doc.getBackground().getGradient().setColor1(Color.white);
doc.getBackground().getGradient().setColor2(Color.green);
“`
3.画像の背景を設定します
“`
String img= “画像.png”;
Document doc = new Document(input);
doc.getBackground().setType(Back

元記事を表示

MavenでGoogleAdsAPIを使用する実行可能Jarを作成するときに気を付けること

# 記事を書くに至ったきっかけ
タイトルの通りのことをやろうとした時に、あるエラーがなかなか解決できず(2022/04/27時点)、Mavenの設定やらで少し調べることになったので、備忘録も兼ねて記事を書くことにしました。

# 問題になったエラー
“` Command
io.grpc.internal.ManagedChannelImpl$2 uncaughtException
重大: [Channel<1>: (googleads.googleapis.com:443)] Uncaught exception in the SynchronizationContext. Panic!
java.lang.IllegalStateException: Could not find policy ‘pick_first’.
Make sure its implementation is either registered to LoadBalancerRegistry or included in META-INF/services/io.grpc.LoadBalancerProv

元記事を表示

【オラクル西川です。第5報】大規模データ分析基盤の個別相談受付中です! 

![R2_Sales Strategy_25apr2022.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2634867/fb4ed027-7dc3-3061-c395-ea73ec23cd3a.jpeg)
おはようございます。
今までは、GraalVMの機能を中心に記事を書いていたのですが、「具体的な実装方法」に関しても、今後は書いていきたいと思います。
今回は、GraalVMの「最適化されたJITコンパイラー機能」(主要3機能の内の1つ)を活用して、大規模データ分析基盤を、コスト削減しながら、より高速に動かす実装方法に関して、議論します。

================
リアルタイムデータ処理システムにおいても、Graal VMの「最適化されたJITコンパイラ機能」が威力を発揮致します。

■ GraalVMカタログ(P7)
https://www.oracle.com/a/ocom/docs/graalvm-enterprise-white-paper.pdf

>While there ar

元記事を表示

【非同期処理(Ajax)】SpringBootでJavaScriptによる非同期処理(Ajax)の実装方法

# はじめに
今回は、SpringBootによるAjaxの実装について解説します。

プライベートでのWebアプリ開発で実装した方法なので、比較的実践に近い方法だと思いますので、参考にしていただけますと幸いです。

なお、今回の実装では、**jQueryではなく素のJavaScriptを用いての実装**となります。
(全然、素のJavaScriptでの実装を書いた記事がなかった・・・)
※ 本記事の内容は、以下の前提に当てはまる方向けです

# 前提
– JavaScript中級レベル以上
– Ajaxについて基礎知識がある
– SpringBootのMVCモデルについての基礎知識がある
– SpringのRestについての基礎知識がある

# 実装方法
実装する方法は、コントローラーを`Rest`とし、非同期通信処理を行うリクエストをJavaScriptで指定し、JavaScriptでサーバーとやり取りするという流れで実装します。

そのため、メインはフロントエンド部分の実装となり、CRUDなどのビジネスロジック(Serviceクラス等)については触れませんので、ご了承ください。

元記事を表示

JasperReportでJSONデータの出力

JasperReportのインストールなどは色々調べれば情報が出てきますので今回はプログラム側のみです。JSONデータを扱う方法をまとめておきます。

## プログラムの設定
JasperReportとJSONライブラリをビルド
“`gradle:build.gradle
implementation ‘net.sf.jasperreports:jasperreports:6.19.1’
implementation ‘org.json:json:20220320’
“`

以下ソースを追加。何をやっているかはコメントの通り
“`java:JasperService
public void getPdf() {
try {

//データソース作成
JSONObject json = new JSONObject();
json.put(“test_field”, “テストデータ”);
JsonDataSource datasource = new JsonDataSource(new ByteArrayIn

元記事を表示

「マイクロサービスパターン」の復習 8章 APIゲートウェイ

## 8章 外部APIパターン

– 外部APIを公開する際の問題点
– APIゲートウェイパターン
– BFFパターン
– GraphQL

などが紹介されています。

## 外部APIを公開する際の問題点

仮に個々のサービスのAPIを外部APIとして公開してしまった場合の問題点

– マイクロサービスアーキテクチャだとサービスの粒度が細かいので、結果的にAPIの粒度も外部APIとしては細かくなりすぎる。
– Order情報を取得するのにも、数回のAPIを呼ばないといけない
– サービスの粒度や、内部APIを変えられなくなる
– 内部APIはそもそもhttpを喋れないかもしれない
– クライアントの種類によっては、APIの要件が変わってくる
– それを各マイクロサービスが吸収するのか?

というわけで、内部APIをそのまま公開しても良いことはあまりないので、フロントにAPIゲートウェイを立てます

## APIゲートウェイパターン

マイクロサービスベースのアプリケーションへのエントリポイントとなるサービス

以下のようなことを行う

– リクエストのルーティング

元記事を表示

Lombok の @EqualsAndHashCode の callSuper について

`@EqualsAndHashCode` の `callSuper` には `true` か `false` を指定できます。

# `false` にした場合

デフォルトの挙動で、`java.lang.Object` を直接継承したクラスでは適切です。

他のクラスを継承したクラスで `true` を指定していないと警告が出ます。警告されるのは、`false` が適切なのはスーパークラスに `equals` の判定に使うフィールドが存在しない場合くらいしかないためです。`true` に設定して `callSuper` の機能に頼るか、`super.equals(Object)` を呼び出さなくても良いような実装を頑張って書く必要があります。

`false` が適切な場合がないわけではありません。『Effective Java』(第3版、p. 47) に以下の記述があるのですが、この `Circle` や `Rectangle` でも警告が出ます。このような場合は `false` にしてください。

> 何も値要素を持たない抽象クラス Shape、radius フィールドを追加し

元記事を表示

SpringBootTestでのテスト

# はじめに
SpringBootで作ったWebアプリにテストコードを実装しました。

# 実行環境
OS:Mac
JUnit:JUnit5.8.2
Java:Amazon Corretto 8
Spring Boot:2.6.1
Gradle:gradle6.8
IDE:intellij idea community edition 2021.1

# テスト環境を構築
## spring-boot-starter-testを使用する
「spring-boot-starter-test」を使用することで、
SpringBoot上のコードをテストするのに必要なライブラリを使用出来ます。

含まれるライブラリは以下の通り

| ライブラリ | 備考 |
|——-|——-|
| JUnit5 | Javaアプリケーションの単体テストのための事実上の標準ライブラリ。|
| Spring Test
Spring Boot Test| Spring Bootアプリケーションのユーティリティ。
統合テストのための機能をサポートしています。 |
| AssertJ |

元記事を表示

Java SE 11 Programmer II (1Z0-816-JPN) を受験したので、学習プロセスをまとめてみました

# 始めに
 先日、Java SE 11 Programmer II (1Z0-816-JPN) を受験して無事合格できました。
参考の1つになればと思い、自分の学習方法をまとめ、公開してみようと思います。

# 費やした期間(時間)・お金
 「Java SE 8 Programmer I」を取得したのが一昨年の終わりくらいで、若干期間を空けて学習を開始したのですが、正味の期間としては大体1年弱だと思います。
平日朝の出勤前と休日の昼間に学習を進めていて、3~6 時間 / 週 くらい費やしていました。[^05]

 掛かったお金ですが、上記資格に対応した模擬試験付きのテキスト[^10]を2~3冊[^12]と、本試験の受験料なので、テキスト代を4,000円/冊として概算で
  4,000 円 × 3 + 32,340 円 = 44,340 円
くらいです。

 資格を取得された他の方の合格体験記を見ると、3ヶ月~半年でテキスト1冊何度も解いた方が多い気がしたので、自分はどちらかと言えばリソース多めに割いていた方かなと思っています。[^15]

# どんな風に学習を進めていたか?
 購入し

元記事を表示

【Java】1からNを複数行で表示する【標準入力】

python3以外の言語を学ぶべく問題を解くにあたって、標準入力の知識が必要になる。
ループ処理の問題の中でも基本的な

“`
//入力する値
N
“`

“`
//出力する値
1
2

n
“`

という問題に対してどのように対処するか考えた。
原則、出力する値一行目は1から始まるものとする。

このような複数行の表示はpython3でfor構文に世話になったためこちらでもforを使う。

“`java
import java.util.*;

public class Main {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);//標準入力を取得する

int n = sc.nextInt();//取得した標準入力を数値にする
for (int i = 1; i < n + 1; i++) {//出力する値一行目は1から始まるもの System.out.println(i); } sc.close()

元記事を表示

「マイクロサービスパターン」の復習 11章 横断的関心事

## 11章 本番環境に耐えられるサービスの開発

– 機能要件とは別に、サービスを成り立たせる上で必要な横断的関心事の話
– 横断的関心事とは、セキュリティ、設定可能性、可観測性とされている
– 横断的関心事はたくさんあるので、それらをある程度まとめて扱える、マイクロサービスシャシーや、その派生であるサービスメッシュについての説明

## セキュリティ

– セキュリティの主要な4要素:認証、認可、監査、セキュアな通信
– ここでは認証と認可をとりあげる
– モノリシックでの認証
– HttpSessionや、それよりも少し上位のセキュリティコンテキストAPIなどが認証情報の保持に使われる
– どちらも1プロセス限定あるいは、プロセス間で共有しても密結合になる
– マイクロサービスには向かない
– マイクロサービスでの認証
– これは入口となるAPIゲートウェイで行うのがよい
– マイクロサービスでの認可
– これはサービスの詳細が必要なので、各サービスで行うのがよい
– マイクロサービスとOAuth2.0
– ここの部分の説明

元記事を表示

OTHERカテゴリの最新記事