JAVA関連のことを調べてみた2020年03月28日

JAVA関連のことを調べてみた2020年03月28日

アプリケーション間でRequestIdを送りあってみる

# やりたいこと
サービスが複数またがってている場合、運用時にサービス間を跨いだログを見たくなる時があるので、その方法をかく。
順番は
1. Spring BootでRequestIdを生成して、ログファイルに出しておく
2. 他アプリケーション(今回はGin)に対して、リクエストを投げる
3. Gin側でRequestIdを受け取る

ソース
[Spring Boot](https://github.com/ririkku/spring-log-demo)
[Gin](https://github.com/ririkku/go-sandbox/tree/master/gin-nginx-sample)

# 環境
– Java
– Spring Boot
– Go
– Gin

# Spring Boot側にRequestIdの設定を入れる

## ログファイルにRequestIdが表示されるようにする

MDCを使用して、リクエスト毎にUUIDを生成して、ログに仕込めるようにしておく

“`SampleFilter.java
import org.slf4j.MDC;
impor

元記事を表示

新人研修でやった三角形の面積を求める実装を今やってみる

# プログラミングを始めて2年が経った

新卒で入社した会社のJava研修で初めてプログラミングをしてからもうすぐ2年が経ちます。最近は情報系の学生さんとも話す機会が増え、すごい人がたくさんいるんだなーと実感することが多いです。
自分が新人研修でやっていたことなんて大したことなかったなーと振り返りつつ疑問が…

# あの時俺がやっていたのはオブジェクト指向?

研修の課題の一つに`三角形の面積を求めなさい`というものがありました。
趣旨としては手続き型的に書くのではなく、クラスを使って実装しようというものでした。
そこで、私が考えた答えは⬇️こんな感じだったと思います。

“`java
class Triangle {
int bottom;
int height;

public Triangle(int arg1, int arg2) {
this.bottom = arg1;
this.height = arg2;
}

public int calc() {
return this.bottom * this.height /

元記事を表示

【Java】Listの使い方【ArrayList】

#Listとは?
複数の要素を含み、順序のつけられたコレクションのこと。
インターフェースのため、実装することで使用可能となる。

コレクションとはなんぞや?ってことで調べてます。

コレクション:オブジェクトの集合を扱うための仕組み。以下の種類がある。

– List系
– ArrayList  配列を扱う。

– LinkedList  配列を扱う。挿入・削除が高速。
– Vector   配列を扱う。パフォーマンスが悪いため現在ではあまり推奨されない。
– Set系
– HashSet   値の重複を許さない順不同の要素集合。
– TreeSet  値の重複を許さないソートされたの要素集合。
– Map系
– HashMap  キーと値の組からなる要素の集合。
– TreeMap   キーと値の組からなる要素の集合。キーでソートされている。

今回はArrayListを使用してみます。

##ArrayListの使用例

“`listtest.java

package listtest;

import ja

元記事を表示

Scope(スコープ)

#Scope(スコープ)
インスタンスを保存できる領域。
スコープを経由させることにより、サーブレットクラスとJSPファイルの間でインスタンスを共有させることが可能になる。

##JavaBeans
スコープに保存する再利用しやすくするルールに基づいたクラス(インスタンス)
###直列化
###プロパティ
getter/setter

##リクエストスコープ
レスポンスが返されるまで利用可能
HttpServletRequest

###リクエストスコープにインスタンス生成

“`php:記述
request.setAttribute(“属性名”, インスタンス);
“`

###リクエストスコープからインスタンスを取得

“`php:記述
取得するインスタンスの型 変数名 = (取得するインスタンスの型) request.getAttribute(“属性名”);
“`

##セッションスコープ
保存インスタンスの有効期限は開発者が設定
リクエストをまたいでの使用可能

###セッションスコープの取得

“`php:記述
HttpSession session = reque

元記事を表示

MVCモデル

#MVCモデル
###M…Model(モデル)
Javaクラス
アプリケーションの処理(計算処理等)、データ格納
###V…View(ビュー)
JPSファイル
画面表示
###C…Controller(コントローラー)
サーブレットクラス
要求の受け取り、処理実行依頼(Model)、結果表示依頼(View)

##転送処理

###フォワード
処理を他のサーブレットクラス、JPSクラスに移す(内部)
URLがリクエスト時の状態

“`php:記述
RequestDispatcher dispatcher = request.getRequestDispatcher(“フォワード先”);
dispatcher.forward(request, response);
“`

###リダイレクト
処理を他のサーブレットクラス、JPSクラスに移す(外部)
URLがリダイレクト先のものに変更

“`php:記述
response.sendReddirect(“リダイレクト先のURL”);
“`

元記事を表示

From(フォーム)

#From(フォーム)
webページに入力したデータをサーバーサイドプログラムに送信
入力項目のまとまり

“`php:記述


“`

##リクエストメソッド
GETリクエスト
新しい情報(Webページ等)を取得

POSTリクエスト
フォームに入力した情報を登録

###テキストボックス

“`php:記述

“`

###パスワード

“`php:記述

“`

###ラジオボタン

“`php:記述

“`

###送信ボタン

“`php:記述

“`

##リクエストパラメータ取得方法
APサーバによってHttpServletRequestインスタンスに格納されて送信先のサーブレットクラスまた

元記事を表示

Gradleってなんだろう?

javaのビルド周りに興味をもったので、その時のメモ。

# Gradleとは
javaのビルドツールで jarファイル(javaのバイトコードファイルや画像をzipファイル形式で一つにまとめたもの)
へのビルドをしてくれます。
mavenと違い、設定ファイルはgrovyという言語で書きます。

また、gradleを毎回インストールすることがないように、gradle wrapper というものを作り、
これを配布することで、gradleをインストールしていない環境でもgradle を使うことが出来ます。

# Gradle 初期化
簡単なgradleプロジェクトを作ります。

“`bash
gradle init
“`

これで色々ファイルが作られます。具体的には以下の感じ

“`bash
├── build.gradle
├── gradle
│   └── wrapper
│   ├── gradle-wrapper.jar
│   └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── se

元記事を表示

JPS(JavaServer pages)

#JPS(JavaServer pages)
リクエストされるとサーブレットクラスに変換

##スクリプトレット
Javaのコードを埋め込む

“`php:記述方法
<% Javaのコード %>

“`

##スクリプト式
変数・メソッド・戻り値などを出力する

“`php:記述方法
<%= Javaのコード %>

“`

##JSPコメント
コメントの記述

“`php:記述方法
<%-- コメント --%>

“`

##pageディレクティブ
JPSファイルの設定

“`php:記述方法
<%@ page 属性名="値" %>

“`

##URL

“`php:記述方法
http://<サーバ名>/<アプリケーション名>/

“`

元記事を表示

非staticネストクラスが握っちゃう、エンクロージングオブジェクトの暗黙的参照

この記事は、Javaにおける「非staticネストクラスが、エンクロージングオブジェクトを暗黙的参照として握っちゃうから、気を付けましょう」について述べます。

なぜ、気を付けなければならないのか、と言えば、「メモリーリークを引き起こす可能性を高めてしまうから」です。

そして結論は、「ネストクラスは、`static`修飾子を付けた方がイイ(さすれば、エンクロージングオブジェクトを暗黙的参照として握ることはないから)」です。エンクロージングオブジェクトは短命で、ネストクラスのインスタンスの方が長命である場合は特にです!

# 事のきっかけはAndroidアプリ開発時

(この記事は、Androidアプリ開発に特化したものではありません。が、読み進めていけばJavaに関わることになっていきますので、当初は我慢してお読みください)

ある日のことでございます。AndroidアプリをJavaで作っていた時に、Android Studio[^1]が、こんな警告を出してきました。

[^1]: IntelliJ IDEAを改造して作られたAndroidアプリ開発専用IDE

![thisasyn

元記事を表示

Servlet(サーブレット)

#Servlet(サーブレット)
サーバーサイドプログラムを作るための技術
サーバレットクラスを作りAPサーバ上で実行する
ブラウザからのリクエストによって実行され、結果をHTMLで出力しAPサーバによってブラウザにレスポンスする

##doGet()メソッド
サーブレットクラスがリクエストされると実行されるメソッド

##HttpServletRequest
ブラウザから届いたリクエストに関する情報と機能を持つインスタンス

##HttpServletResponse
サーバから送り出すレスポンスに関する情報と機能を持つインスタンス

##Content-Typeヘッダ

##URL
“`PHP:Java
http://<サーバー名>/<アプリケーション名>/
“`
@WebServlet(“/URLパターン”)で設定

元記事を表示

【Java】compareToが不要な範囲チェック

# 範囲チェックの実装、どうしてる?
数値やら文字の範囲チェックって、`obj.compareTo(value)`の組み合わせで書いてあることが多いですよね。
ですがそのcompareToの戻り値のパターンがどうしても覚えられないんです…
覚えてるのは、一致が「0」ということだけ。`> 0`と`< 0`のどっちが小さい/大きいなのか、毎回実行して確認しています… でも、compareToメソッドや等号・不等号演算子による「最小値以上かつ最大値以下」の範囲チェックを書かなくて済む方法があったんです。 # やはりApacheCommonsはぐう優秀 `org.apache.commons.lang3.Range`クラス(結構昔からあるのに無知でした)がポンコツSEの救世主でした…これは推せる。 「java 範囲 チェック」でググると、等号・不等号演算子やcompareToによる実装が検索結果の上位にいるので、「commons」とかキーワードをちょっと工夫しないとなかなか辿り着けないんですよね、Rangeクラスには。 ## サンプルコード ```java int num0 = 0; in

元記事を表示

JavaからExcelを簡単に出力!縦横変換不要なライブラリ「JXLS」はじめに

Apache POIをそのまま使うのがしんどいので、いいものはないかと探していたところ、Jxlsがよさげでした。
何が良いかって、ツリー構造を持ったデータを簡単に出力できる点が素晴らしいですね。
ただ、探したところ日本語ドキュメントが少なそうだったので、翻訳してみました。
変なところあればご指摘いただけると幸いです。

本記事は[こちら](http://jxls.sourceforge.net/index.html)の翻訳記事です。2019/3/30版のドキュメントを翻訳しています。

# イントロダクション
JXLSはExcel帳票を簡単に生成するための小規模なJava製ライブラリです。JXLSで出力する帳票のフォーマットやデータのレイアウトは、独自の構文をExcelテンプレートに書き込むことで定義します。
いわゆる帳票機能のようなJavaアプリケーションにとって、Excel生成は必要不可欠なものとなっています。

Javaにはオープンソース、商用ともに、非常に優れたExcelファイル出力用のライブラリが存在します。そのうちオープンソースのものでは、Apache POIやJava

元記事を表示

【Java】「final変数」と「不変オブジェクト」の違い

どーも、ふぎとです。
今回はfinal変数と不変オブジェクトについて
まとめてみました。

##final変数
final変数とは、final修飾子を指定した変数のこと。
その性質は「変更不可・読み込み専用」と呼ばれる
が、厳密には「**再代入不可の変数**」。

~~~ruby:
final int i = 3;
i = 5; //再代入によるコンパイルエラー
~~~
上では、基本型(int型)変数iにfinalを指定している。
基本型変数は、変数の値に「値そのもの」が保持される
変数だ(詳細は『[基本型変数の代入と参照型変数の代入
の違い](https://qiita.com/FugitHora812/items/a0e2f49331be6f35b8a0)』を参照)。そのため、「値そのもの」を入れ替
える再代入はコンパイルエラーになる。つまり、基本型
変数に限って言えば、final変数は「変更不可」である
ように見える。
話をややこしくしているのは、final指定の参照型変数だ。

~~~ruby:
final StringBuilder sb = new

元記事を表示

Android 11で令和に標準で対応予定

Androidのバージョンはグングン上がります。
今やそろそろAndroid 11がリリースされつつあります。
そのAndroid 11にて、ついに日本の元号「令和」が標準APIで対応するようです。

# 結論

結論を真っ先に述べます。

– Android 11(R)にて、ついに日本の元号「令和」が標準APIで対応するようです。
– すでにAPIレベル24からAndroid標準APIはICUを取り込んでいます。
– でもAPIレベル24~29の間は「令和」には対応していません。「平成」どまりです。

# [閑話]コードネームとかAPIレベルとか

ところで、お菓子の名前のコードネームですが、「Q」からやんなくなりました。

KitKatとかLollipopとかMarshmallowとかNougatとかOreoとかPieとか。時折、登録商標も混ざりながらも。
Androidっ子たちは、「Q」から綴りが始まるお菓子が何になるのかワクワクしてたのに、Googleが「お菓子の名前はもうやめた」と言い出して。

Android 10は「Q」。そろそろリリースされる11は「R」です。

And

元記事を表示

Java 8のOptionalをSwiftと比較する

# 概要

本記事では[OptionalのApple公式ドキュメント](https://developer.apple.com/documentation/swift/optional)の概要に掲載されている項目を元にして、Swiftの`Optional`型とJava 8の`Optional`型を比較します。若干今更感のある内容にはなりますが個人的な備忘録も兼ねて投稿に至りました。
[記事の最後](#まとめ)にはそれぞれの記法の比較表も掲載しています。あわせてご覧ください。
なお本記事に掲載してあるスニペットは多少簡略化されているので、そのままコピペしても動かないものがあります。ご了承ください。

# Nil結合演算子(Nil-Coalescing Operator)

### Swift

中身があるならそれを、なければ指定したデフォルト値を返すように`Optinal`をアンラップします。`??`という演算子を使います。複数の`Optional`型をオペランドとしてつなぐこともできます。

“`swift:Swift
let wrappedValue: String? = nil

元記事を表示

配列初期化時のエラー?

### 配列初期化時のエラー?

今回の現象:String配列を一回宣言してから初期化しようとしたらエラー

“`java:
String[] strList={“1″,”2″,”3″,”4”};
“`
これができるならこれは…

“`java:
String[] strList;
strList={“1″,”2″,”3″,”4”};
“`

こんな感じで初期化できると思いきや…
Array constants can only be used in initializers

じゃあこれは…

“`java:
String[] strList;
strList=new String[4];
strList[0] = “1”;
strList[1] = “2”;
strList[2] = “3”;
strList[3] = “4”;
“`

成功!!

でも長ったらしいので不満…

ということで調べると
http://d.hatena.ne.jp/Kappuccino/20080721/1216623546

こういう書き方あるのか…

“`

元記事を表示

Javaアプリケーションでは、Word(DOC/DOCX)ドキュメントをPDFに変換します

Spire.Docの助けのもとで、私達は簡単にword文書をPDFとして保存できます。この文はWord(.doc..docx)をPDFとして保存する方法を以下の3つの方面から紹介します。

  • Word文書をPDFに直接Javaアプリケーションで変換する
  • Word文書をPDFファイルに暗号化されたパスワードで変換結果ファイル
  • 画像の品質を設定するときにWord文書

Word文書をPDFに直接Javaアプリケーションで変換する

“`java

import com.spire.doc.*;
public class toPDF {
public static void main(String[] args) {
String inputFile=”data/convertedTemplate.docx”;
String outputFile=”output/toPDF.pdf”;
//サンプルドキュメントの読み込み
Docume

元記事を表示

これだけでOK WebSocket: Server=Java, Client=Java,JavaScript

Java製のWebSocket Serverに対し、
複数のJava WebSocket Client と JavaScript WebSocket Client が接続し、
クライアントからのメッセージは各クライアントに対してブロードキャストされるものと想定します。

# 動作確認済 Runtime

1. Local Server : Tomcat 8.5
2. Azure WebApp Service (Tomcat 9.0)

# Server : Java

“`java
import java.io.IOException;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

import javax.websocket.EndpointConfig;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.webs

元記事を表示

【Java】基本型変数の代入と参照型変数の代入の違い

どーも、ふぎとです。
今回も自身の復習を兼ねての投稿です。

##「変数への代入」
「変数への代入」とは、変数に何かしらの値をセット
すること。

##「基本型変数」への代入
基本型変数とは、「値そのものを保持する変数」のこと。
例えば、int型の変数numberに3を代入すると、numberが
保持する値は3になる。

~~~ruby:

int number = 3; //整数3をnumberに代入
~~~

##「参照型変数」への代入
参照型変数とは、「コンピュータのメモリ上に確保された
ある領域(オブジェクト)への参照(オブジェクトの場所
を示す位置情報)を保持する変数」のこと。

~~~ruby:

String word = “Qiita”; //変数wordに文字列”Qiita”を代入?
~~~
上の例では、String型の変数wordに文字列”Qiita”が代入され
ているように見える。言い換えると、変数wordが保持する値
は文字列”Qiita”であるように見える。
しかし実際には、変数wordが保持している値は「String型オブ
ジェクトへの参照」である。つまり、

元記事を表示

Java EE(Jakarta EE)で「私はロボットではありません」を作る

# 0.環境

### 今回のこの記事を書いた環境
OS…Windows 10
IDE…Eclipse 2020-3
Java…Open JDK 14
サーブレットコンテナ…Apache Tomcat 9.0.33

# 1.reCAPTCHAを作成する
###
まずreCAPTCHAのサイトにアクセスします。
[reCAPTCHA](rhttps://www.google.com/recaptcha/)

+ボタンで作成。

自分のサイトの情報を入力していきます。

![SS1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607960/b65f27d3-cec4-0416-8fb7-6d908b02be51.png)

ラベルにはわかりやすい名前を入力します。

reCAPTCHA タイプは、「私はロボットではありません」をやりたいのでreCAPTCHA v2を選択。
すると、「私はロボットではありません」チェックボックスというのが出てきますので選択されていることを確認します。

元記事を表示

OTHERカテゴリの最新記事