Spring boot で、 Shopping cart プログラムを試してみた。
インターネットで検索したら、
E-commerce-project-springBoot
があったので試してみたが、これが、つかいものにならんしろものだった。
Shopping cart と言っているくせに、カートに入れる処理から以降がまるっきり入っていない粗悪品じゃった。
おまけに、html の部分は、jsp で、Thymeleaf テンプレートすら使っていない。
Hibernate を使っているが、バージョンが古くて、修正するのにばかな苦労をするはめになる。
仕方がないので、Perl で作った実際に運用している自分のショッピングモールのカート部分を、インポートしてつくるはめにった。
こちらは、JdbcTemplate + SQLite3 で作ってみました。
しかし、最近は、google ai や ChatGPT を使えば、判らない java のコードをすぐ教えてくれる。
本当に便利になったもんじゃ。
ずっと以前に、Java のプログラムを書いていた頃では、すべて自分でネットを検索したり、
本で調べたりして、なかなか目的のコードを作るのに時間がかかった。いまは、本当に短時間で、やりたいコードが出来上がる。
Javaの最近のブログ記事
Spring Boot で、掲示板のサンプルを試す。
プログラム上達の早道は、他人のプログラムを手本に勉強することじゃ。
掲示板のサンプルがあったので、試してみた。
ありがとう!!
Spring bootサンプルアプリケーション: 掲示板
github は、下記だった。
Spring boot example application: notice board
VSCode のworkspace で、早速、git clone する。
$ git clone https://github.com/saladlam/spring-noticeboard.git
$ cd spring-noticeboard
pom.xml を修正したほうがよさそう。
注) maven-surefire-plugin の箇所は、変更したほうがよい。
./mvnw build のテストでえらになる。
Spring Boot で、JDBC sqlite3を使う。
前回の、Java で SQLite3 を使う。 で、SQLite3 がつかえたので、
今回は、本題の、Spring Boot で、SQLite3 を試してみる。
Spring JDBC JdbcTemplate で SQL 発行 を参考に、作ってみました。
このサンプルの中で、JdbcTemplate を使って、 JDBC で Database にアクセスしています。
どうやら、H2 Database みたい。これは、このままで動くのか?
JdbcTemplate を、SQLite3 に変更できれば、目的を達成できる。
google で、下記を検索したら、
"JdbcTemplate を sqlite3 で使うには"
google 様のお告げがありました。今回はそれに従って作ってみました。
開発環境:
Ubuntu Mate 24.04
VSCode
1. プロジェクトを作成する。
プロジェクト名: spring_sql
コマンドパレット > Spring Initializer: Create Maven Project...
Spring Boot Version: 3.5.7
: Java
Group ID: com.example
Artifact.id : spring_sql
Package name : com.example.spring_sql
: jar
: 21
依存: JDBC API、H2 Database
Java で SQLite3 を使う。
最終的には、Spring boot で、SQLite3 を使うのが目的だが、そのために、まず SQLite3 の使い方を学習します。
Spring boot で、JDBC を使ったガイドがあるが、
Spring JDBC JdbcTemplate で SQL 発行
この中で、JdbcTemplate を使っているが、これは、 MySQL がディフォルトだが、ここを
SQLite3 に変更することができるみたいじゃ。
google 様にお問い合わせしたら、
"JdbcTemplate を sqlite3 で使うには"
で、できるとお告げがあった。
なので、先に、java から SQLite3 でのアクセスを試す。
開発環境
Ubuntu Mate 24.04
今回は、下記ページを参考にさせて頂いた。ありがとう。
1) 【JDBC ①】JavaからSQLite3のデータベースにアクセスしてみた
2) SQLite JDBC Driver
Spring Boot で、簡単にJavascript 非同期通信ができる!
Spring Boot で、Javascript 非同期通信 のサンプルがあったので試してみた!!
一応動いたが、少し修正しないと動かなかったので、掲載してみた。
オリジナルは、
Java(Spring)で作るはじめてのAPI
ありがとう!
開発環境:
Ubuntu Mate 24.04
VSCode
openjdk-21-jdk-headless
openjdk-21-jdk
openjdk-21-jre-headless
openjdk-21-jre
プロジェクト名: spring_api
Gradle project
java version:21
Spring Web, Spring Boot DevTools, Thymeleaf
1. HelloController.java を作る。
spring_api/src/main/java/com/example/spring_api/HelloController.java
Java の フレームワークに、 Spring boot と言うものがあるらしい。
おんちゃんも久しぶりに、Java を使ってみて、世の中のJavaの開発環境の変化にまるっきり驚いちょります。
浦島太郎が、地元に帰ってきた時の心境に近いものがあります。
本題の、Spring boot だが、公式サイトのドキュメントにわかりやすい説明があるぞね!!
spring ドキュメント
サンプルは、Eclipse を使っているようなので、
おんちゃんは、Ubuntu 24.04 に eclipse jee 版をインストールして試してみました。
Vscode でも、Extension Pack for Java と Spring Boot Extension pack を入れいれば同じ様に使えるぞね。
どちらを使うかは、好みで決めとうせ!!
Java Version は、Ubuntu 24.04 だと、21 なので、サンプルの 17 は、21 に置き換えること。
Perl cgi から、Java Jnlp を吐き出すサンプル プログラム を作ってみました。
一番最初に、
Content-type: application/x-java-jnlp-file;charset=utf-8\n\n
を吐き出せばOKです。
興味のある方らこちらからどうぞ。
Java http server の Keep-alive による Http Responsse の返し方に関して、
大雑把な説明ですが、参考になればと思い書いてみました。
重要な点は、3箇所だけです。
1. server socket のKeepAlive の設定
Socket sock = servsock.accept();
sock.setKeepAlive(true); // this is important No.1
2.http response ヘッダーの特に2か所の記述 Content-Length:xxx と 注1)Connection: Keep-Alive です。
注1) HTTP 1.1 では、必要ないみたい。
HTTP/1.1 200 OK\r\n or HTTP/1.0 200 OK\r\n
Date: xxxxx\r\n
Server: xxxxx\r\n
Content-Length: body-size\r\n // "body-size" is very important No.2
Keep-Alive: timeout=5, max=20\r\n // timeout -> sec ,here is a little important
Connection: Keep-Alive\r\n // here is important No.3 , but if HTTP 1.1 no need
Content-type: text/html\r\n\r\n
body-size は、実際の長さに必ず合わせます。(これが、今回、一番重要です!)
htmlや画像ファイルなどは、ファイルサイズが最初から分かるから問題ないのですが、
perl CGI の出力を受ける場合は、大変です。
CGIの出力データを一度バッファに取り込んで、最終の長さを計算するか、チャンクに分割してその都度送信するかだと思います。
apache のHTTPレスポンスを見ると、チャンクでは無いように見えますが!
同一ネットワーク上の、PCのブラウザーから、このRaspberry pi のJava Http サーバーにアクセスして、サーバー上のJava プログラム(Java CGI プログラム。java class と java main programの2種類の実行方法があります)を直接実行して、その結果を、PCのブラウザーで確認できます。
通常のHTMLや画像ファイルも表示できますし、
Raspi のGPIOにつなげたLEDのLEDチカチカテスト、や 1-wire温度センサー(DS18B20) の値の読み取りを、サーバー(Raspberry Pi)上の Java プログラムで、実行して、その結果を、表示できます。
又、リーモートPCのブラウザーから、Raspberry piをシャットダウンできる、Java cgiもサンプル追加しました(H26.1.14)。
perl cgi の実行機能も追加しました。(H26.1.26)
java class のプリロード機能も追加しました。(H26.1.30)
java class の都度ロードより少しは早いみたいです。
興味のある方は、こちらからダウンロードしてください。
@tosa-no-onchan/raspi-java-http