かすたあどくりいむ定食

子供のウンチ交換プロフェッショナル業者です。

Ruby経験者がJavaに入門するにためにやったこと

ども、業務でJavaの案件に入ったのですが、Javaが未経験過ぎてチンプンカンプンだったので、最低限度の習得までにやったことをまとめようと思ふ。 RubyからのPHPやlaravelはまだ習得しやすかったのですが、Javaは別もんですね!って思うたです。

自分のプログラミング言語部分のスペック

入門

Java11

Struts2の2.6系

最初の感想

何とか会社のドキュメントに従いeclipseによる環境構築はできたけど、環境構築の時点で意味不明な言葉や意味不明なファイルやら何やらで、マジで意味不明というのが俺の感想です。 試しにリポジトリを覗こうものなら、ディレクトリの構成から意味不明でハイ。頭パッカーン。ですね。 tomcatとかいう猫に笑われながら作業する。。。。

下記の記事が分かりやすいですね。感謝。

Apache Tomcatとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

図解で解説!! Apache、Tomcatってなんなの? #Java - Qiita

Java理解するためにやったこと

Java言語

  • 基本的な文法を学ぶ

まず、何にもかんにもこれをやらないと始まらんでしょう。ということで、書籍で基礎を学びました。(つってもざぁーーっと読んだという感じです)がっつり読み込まなくてもAIに聞けばどうにかなるし、ぐぐればいいし。。。。ぐぬぬ。。。。 下記の本です。しっかり読めば数日。 ここでRuby等の動的型付け言語との書き方の違いとか宣言方法とか何やらを学ぶといったところです。

何かしらプログラミング言語1つ習得されてる方なら、そんなガッツリは読まなくてサラッと流して分からないタイミングでググるのがいいかも。

Struts2について

正直なところStruts2に関してはググっても情報があまりなく苦戦。 基本的なことは下記の記事に書いてるのですが、それでもいきなりだと訳わかめなので、 qiita.com

おススメしたいのはAIを使って自分が習得済みのFWと照らし合わせて何が何の機能にあたるとかを調べる。です。

実際に使った質問

charGPTさんに質問しながら進めました。

※AIはすべて正しいってわけでもないので、参考にするレベルで読む

JavaとStruts2の開発が未経験のRuby on Railsの開発者にStruts2を説明するのは素晴らしいですね。Struts2はJavaベースのウェブアプリケーションフレームワークであり、MVC(Model-View-Controller)アーキテクチャを採用しています。これはRuby on Railsと同様のアーキテクチャですが、技術的な細部は異なります。以下はStruts2の概要です。

MVCアーキテクチャ:
Struts2はMVCアーキテクチャを採用しています。これは、アプリケーションの構造をモデル(データ)、ビュー(表示)、コントローラ(処理)の3つの主要なコンポーネントに分割する方法です。これにより、コードがより構造化され、保守性が向上します。

アクションクラス:
Struts2では、リクエストを処理するためのアクションクラスが使用されます。これは、ユーザーのリクエストを受け取り、ビジネスロジックを実行し、結果を返すクラスです。Ruby on Railsのコントローラに類似しています。

ストラット:
Struts2では、アクションクラスを構成するためのストラット(Struts)と呼ばれるXMLベースの構成ファイルが使用されます。このファイルには、リクエストの処理方法、ビューの場所、フォームデータのマッピングなどが定義されます。

タグライブラリ:
Struts2は、JSP(JavaServer Pages)やFreeMarkerなどのテンプレートエンジンと組み合わせて使用されることが一般的です。Struts2は、ビューを生成するためのタグライブラリを提供しており、フォームの生成、バリデーションエラーの表示などを容易にします。

拡張性:
Struts2は、機能の拡張が比較的容易であり、カスタムのインターセプタや結果タイプを作成して、アプリケーションの要件に合わせることができます。

国際化とローカライゼーション:
Struts2は、多言語サポートやローカライゼーション機能を提供しています。これにより、国際的なアプリケーションを開発する際に便利です。

このように、Struts2はJavaのウェブ開発において広く使用されており、Ruby on Railsの開発者にとっても馴染みやすいフレームワークです。
Struts2のディレクトリ構造や機能をRuby on Railsの対応する機能と比較してみましょう。

ディレクトリ構造:

Struts2:
src/: Javaのソースコードがここに配置されます。主にアクションクラスやビジネスロジックが含まれます。
WebContent/WEB-INF/: Webアプリケーションの設定やJSP、CSS、JavaScriptなどのリソースがここに配置されます。
Ruby on Rails:
app/: Railsアプリケーションの主要なコードがここに配置されます。モデル、ビュー、コントローラなどが含まれます。
config/: アプリケーションの設定ファイルがここに配置されます。データベース設定、ルーティングなどが含まれます。
アクションクラス:

Struts2のアクションクラスは、Ruby on Railsのコントローラに相当します。リクエストを受け取り、適切な処理を実行します。
ビュー:

Struts2では、JSPやFreeMarkerなどのテンプレートエンジンを使用してビューを作成します。これは、Ruby on Railsのビューに相当しますが、ERB(Embedded Ruby)やSlimなどのRubyベースのテンプレートエンジンとは異なります。
設定ファイル:

Struts2では、XMLベースの設定ファイル(ストラット)が使用されます。これには、アクションのマッピング、インターセプタの定義、結果タイプの設定などが含まれます。これは、Ruby on Railsのconfig/routes.rbやconfig/application.rbなどの設定ファイルに類似しています。
タグライブラリ:

Struts2は、ビューを生成するためのタグライブラリを提供します。これは、Ruby on Railsのビューヘルパーに相当しますが、HTMLタグの生成やフォームの操作などを容易にします。
モデル:

Struts2はモデル層を直接提供しません。一般的には、独自のORM(Object-Relational Mapping)ライブラリやデータアクセス層が使用されます。これは、Ruby on RailsのActive Recordパターンに類似していますが、RailsではActive Recordがフレームワークに含まれています。
簡潔に言えば、Struts2とRuby on RailsはどちらもMVCアーキテクチャを採用していますが、各フレームワークの言語や技術スタックの違いから、それぞれの機能やコンポーネントが若干異なります。
  • struts2でいうrailsのモデルにあたるというか代わりに使う機能ってありますか?
Struts2では、モデル層を直接提供するわけではなく、代わりに他のJavaのフレームワークやライブラリを使用してデータアクセスやビジネスロジックを実装します。一般的な選択肢としては、以下のようなものがあります。

JavaのORMライブラリ:
Struts2アプリケーションでデータベースとのやり取りを行うために、JavaのORM(Object-Relational Mapping)ライブラリを使用することが一般的です。代表的なORMライブラリとしては、HibernateやJPA(Java Persistence API)があります。これらのライブラリを使用することで、データベースのテーブルとJavaオブジェクトのマッピングを行い、簡単にデータの操作ができます。

POJO(Plain Old Java Object):
Struts2では、データモデルをシンプルなJavaのオブジェクトとして実装することも一般的です。これらのオブジェクトは、データベースからの情報を保持し、ビジネスロジックを実行するためのメソッドを提供します。ORMライブラリを使用しない場合や、単純なデータ操作の場合によく利用されます。

サービス層:
Struts2アプリケーションでは、ビジネスロジックをサービスとして実装することが一般的です。これらのサービスは、アクションクラスから呼び出され、データの操作や処理を行います。これにより、アプリケーションのビジネスロジックがアクションクラスから分離され、再利用性が向上します。

DIコンテナや依存性注入:
Struts2アプリケーションでは、DI(Dependency Injection)コンテナを使用してサービスやその他のコンポーネントを管理することがあります。これにより、アプリケーションの各コンポーネント間の依存関係を解消し、コードの保守性やテスト容易性を向上させることができます。

これらの手法を組み合わせることで、Struts2アプリケーションでモデル層に相当する機能を実装することができます。
  • struts2でDBを定義するのはどこ?railsでいうmigrationみたいなのはない?
Struts2では、データベースの定義やマイグレーションのための特別な仕組みは提供されていません。データベースの定義は通常、JavaのORM(Object-Relational Mapping)ライブラリや直接的なSQL文を使用して行います。

具体的には、以下のような方法でデータベースの定義を行うことができます。

ORMライブラリを使用する:
Struts2アプリケーションでよく使用されるORMライブラリには、HibernateやJPA(Java Persistence API)があります。これらのライブラリを使用すると、JavaのクラスとデータベースのテーブルをマッピングするアノテーションやXML設定を使用して、データベースの定義を行うことができます。また、ORMライブラリは、データベースのスキーマを自動的に生成する機能を提供する場合もあります。

直接的なSQL文を使用する:
必要に応じて、Struts2アプリケーションで直接SQL文を使用してデータベースの定義を行うことも可能です。これは、特定のORMライブラリを使用せずに、データベースとの接続や操作を行う場合に使用されます。通常は、データベース接続やクエリの実行に関するコードが、データアクセスオブジェクト(DAO)やサービスクラス内に配置されます。

データベース管理ツールを使用する:
データベースの定義やマイグレーションを行う際には、通常はデータベース管理ツールを使用します。これらのツールを使用して、データベースのテーブルの作成、変更、削除などの操作を行います。Struts2アプリケーションで使用するデータベースの管理は、通常はデータベース管理ツールを介して行われます。

要するに、Struts2ではRuby on RailsのMigrationのような直接的なデータベース定義やマイグレーションの仕組みは提供されていませんが、代わりにORMライブラリや直接的なSQL文を使用してデータベースの定義を行います。

こんな感じでAIに答えさせて人間の自分が学習しました。 他にも投げたプロンプトは下記です。

struts2で簡単な1画面のcrud処理を作りたいです。
DBの項目はタイトル、テキストです。
その項目が画面に表示されていてcrudできる仕様です。
実装のやり方を初心者向けに丁寧に教えてください
 先ほどの回答の
DAOの作成:
Struts2アクションの作成:
Struts2の設定:

について詳しく教えてください
     // データベースにアイテムを追加する処理
を具体的に知りたいです
struts2でいうbeanってrailsでいうどの機能にあたる?

beanを使ってDBへの新規登録とかできる?

このような質問で少しづつ理解していきました。

あとポイントとしては、ビューへの表示の流れが、JSP→action→bean→DBとなってる部分を頭に入れながらだとやりやすいかなと思いました。 JSPもなにそれ?みたいになるのでRubyでいうerbファイルのことやなっと思えばいいです。 下記の本もいいです。

一応実務で1つの機能を実装し画面への表示までできました。わーい