Javaの勉強 仮想通貨アプリの構想
プログラミングの勉強でよく言われること。アプリをつくれ。作りたいものがあってそれを調べながら作るのが良い、ってよく言われてると思う。興味持てるからだね。
私は会社で、受託だと思ってたけどSESみたいに個人の資格を提示して仕事をもらってるみたいだったので、Javaの資格をとったほうがいいなという状況で、まずはJava Bronzeに挑戦しようと思ってるところ。
だけどいつもながら勉強ってやる気がでない。作ってて楽しいと調べるのも苦にならず取り組めるから、王道のそれ、、「アプリつくる」をやろうかなと。
構想
仮想通貨は株と違って雑所得として税金を支払わないといけないので、いついくらで買って、いついくらで売ったかを記録に残す必要がある。
あと、それによって現在の平均取得単価も算出できるので、売り買いの参考にできる。
記録だけは取引所からDLできるけど、1つの通貨をbitbankでもOKコインでも買ってるとかもある。bitbankのほうが手数料が安いけど、OKコインだとステーキングできる通貨種類が多く、期間も選択できるので、OKコインで買うメリットもある。国内でGMOコインでしか扱ってなかったSOLANAがOKコインで扱われるようになって途中からそっちで買うようになったり。でも税金は1つの通貨の単位で計算する必要があるので、取引所を飛び越えて計算する必要がある。
これを、データベースに入れて、いついくら買ったかも、表形式でまとめて入れられるようにする。買うときって下がってるときで、下がってるときってだいたいの通貨が下がってて、あれもこれも同じタイミングで約定するもんだから。
指値注文も、今Excelにメモしてるけど、表示できたら便利かなあ?いくらになったらいくら利益でるとかも。
現在価格を見てるサイトはAPIもあったから情報とってこれるかも。それがあれば現在の評価額、現在の損益もリアルタイムでわかる。
チャートまでは無理かな?資産の折れ線グラフくらいはできるか?
この私がやりたいことはすでにサービスが存在する。有名なのはクリプタクト。500取引までで年間8000円。私は少額でこまめに売り買いするからもっと上のプランになりそう。こっちでできてることは、できるんだろう。通貨ごとの棒グラフもできるでしょう。
構想はざっくりとこんなかんじ。
Gitを使えない私たちのチーム作業・warファイルでマージ
使えない
って、知識的にね。いろいろいっぱいいっぱいの中でGitまでできない~!
っていう状態で。各自で作業して、.warファイルにエクスポートして、それを誰かがマージする。というのをしている。Eclipseには比較して差分を表示するような機能があるようだけど、マージするの大変らしい。ちなみに読みはウォーファイル。ワーかウォーか忘れがち。
最近のクラウドストレージのサービスだと、あとから上書きされたファイルの内容で置き換わっちゃうんじゃなくて、複数人のファイルの差分をマージしてくれたりしなかったっけ。。?.warファイルでなくふつうにファイル単位でアップしたら楽なのでは。。?と思ったりするけど、そこを検証してる時間がもったいない。
ところでその前提が.warファイルにエクスポートすることなんだけど、やってみて初めてしったことがあったのでメモ。
プロジェクト上で右クリック→エクスポート→WARファイル
で出てくるこの画面。

ここで、「ソースファイルのエクスポート」にチェック入れとかないといけません!
デフォルトだとチェックついてない!
たぶん1度チェックつけたら次回から毎回つくから、最初の1回だけが問題なんだけど。だからこそ気づかず忘れがちだと思う。気をつけよ。
ちなみにインポート
インポートは、プロジェクト・エクスプローラーの何もないところで右クリック→インポート→WARファイル→「参照」でダウンロードフォルダ内などにある対象の.WARファイルを選択して、完了。
これをするとコピーが作られるので、ダウンロードフォルダから.WARファイルを削除してもworkspace上には残るし、逆に、プロジェクト・エクスプローラーからディスクじょうからの削除をしてもダウンロードフォルダ内の.WARファイルが消えることはないです。
.WARファイル以外だとEclipseのインポートは元データがリンクになってるのがデフォルトで、インポート→編集・削除で泣く思いすることあるから、これは良い点。
学校で、先生の指示どおりにインポートしたらリンクになってて、削除したら元データが消えて先生にめちゃ怒られて意気消沈してたかわいそうな子がいました。先生に媚売るタイプの子だったから余計にダメージ大きかったぽい。これは完全に先生が悪い。そのときは天才くんが、そんなこともあろうかと元データのコピーをとってて、上げ直してくれたんだよね。先生よりえらい。さすがっす。
完了画面ってなんて名づける?
なんでもいいんだろうけどどうしよかなと、xxx-complete.jspってファイル名にしようとしたんだけど、completeって文字数多いし、もっといいのないの!?
前はどうしてたっけ、、でもフォーム送信までしなきゃ確認できない画面だから前職のサイトにアクセスできない、と躊躇して。
でググって初めて思い出したけど、完了画面はxxx-thanks.xxxだわよね!
その画面へのアクセス数で、コンバージョンをはかったりするから、完了画面ってthanksなのよね。
そんなことも忘れていた。何度もつくったのに。
fixもfinishもピンとこないし、社内システムでthanksはおかしいと思うからcompleteでいくかなあ。。でも迷うー
せっかく考えてたけど、サーブレット名がURLになるのね。調べるのに少し時間使っちゃったものの、迷いすぎなくてよかった。
EclipseでServlet/JSP 試行錯誤
EclipseでServlet/JSPで作ってるんだけど、エラーで進まん~
でもこういうのを乗り越えていくのって勉強になるのよね。せっかく何の機密もない勉強用のプロジェクトなんだし、とりあえずメモしていく。
【解決済】JSPのincludeで日本語のparam渡したら化ける
jspファイルのヘッダーとフッターを別ファイルに分けてインクルードしたい。できてる。ただ、ヘッダーはタイトルとh1がページごとに変わるので、各ページからパラメータを渡すようにつくっている。その渡したパラメータが????で表示されてしまう

アルファベットだと化けないんだけど日本語だとこうなる。検索しても、私が既にやってる対処法(子ファイル側にrequest.setCharacterEncoding("UTF-8");を書く)しか見当たらない。
子ページのほうに入れてた<% request.setCharacterEncoding("UTF-8"); %>を、親ページのほうにも入れたら解決しました!
各ページ
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<% request.setCharacterEncoding("UTF-8"); %>
<jsp:include page="top.jsp">
<jsp:param name="title" value="たいとるにする文字列" />
</jsp:include>
top.jspファイル
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
String title = request.getParameter("title");
%>
<!DOCTYPE html>
<html lang="ja" class="h-100">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>XX社システム ー<%=title%></title>
<!-- CSS only -->
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/style.css">
<link rel="icon" href="favicon.ico">
<meta name="theme-color" content="#FFA7B9">
</head>
<body class="d-flex flex-column h-100">
<header class="container-fluid sticky-top mb-2 shadow-sm">
<div
class="d-flex flex-wrap justify-content-start align-items-center py-1 gap-2">
<a href="#"><img src=" favicon.ico" alt="ロゴマーク"></a>
<h1 class="h5"><%=title%></h1>
</div>
</header>
結局解決してくれたサイトはこちら↓
jsp:include タグ使用時に起こる文字化けについて – foot mark
jsp include param で 文字化け - 開発めも2
2008年の記事でした。。!
【一応解決?】servlet実行時にExlipseがいちいちエラーだす
「ワークスペースに有効なブレークポイントがあります。デバッグ・モードで起動しますか?」
というエラー?がでる。「はい」を選ぶと動作はしてるのかな。とりあえずdoGetで指定したファイルは開く。でもdoPostのほうに書いた超シンプルな遷移が、できていない。このエラー?のせいなのか、関係ないのかの切り分けがまず難しい!
チームメンバがつくった.warファイルにつくっていってるので、その人のEclipseのバージョンと合わないせいかと思ったけど(彼はおそらく学校のバージョンと合わせてて、私は最新バージョン。学校のを移そうと思ったらファイルサイズが大きすぎて私のUSBメモリに入らなかったので)、自分のEclipseで一から作ったプロジェクトでも同じ問題が発生した。
知恵袋みて、「この緑のマークかな?」とクリックしてみた。それでまたservletを起動しようとしたら今までと違うダイアログがでた。サーバを再起動でとりあえず動いてるからいいか。。


【未解決】保存(=コンパイル)するたびに問題が発生する

どういう問題なんだ。。でも動いてるから「OK」でこのダイアログを消して無視してる。。
【解決済】1ページに複数の<form>
複数のフォームはOKらしい。
HTMLでページに複数の<FORM>を定義できますか?| OKWAVE
同一ページで複数のformを扱う場合 -同一のページ内にhiddenでID- | OKWAVE
それぞれのフォームのsubmitの前に
<input type="hidden" name="page_num" value="0">
というのを入れて、このvalueの値をservletで取得して、
その値をもとにswitchで遷移先を分ける。
ということをしたいのだけど、1ページに3つフォームを入れたうちの3つ目しか正常に動作してないのよね。
switch (request.getParameter("page_num")) {
case "0":
jspname = "search-xxx.jsp";
break;
case "1":
jspname = "search-yyy.jsp";
break;
case "2":
jspname = "search-zzz.jsp";
break;
default:
break;
}
何故なの~!困る~!!この最低限ができてないと、メソッドの中身に取り掛かれないんだけど~!
あ、このjspnameていうのはページ遷移を長々書かなくてよくしたものです。switch文の下にforwardJSP(jspname, request, response);と書いて実行させてて、
別途、HttpServletの下にforwardJSP()メソッドを書いてる。
private void forwardJSP(String url, HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
RequestDispatcher rd = request.getRequestDispatcher(url);
rd.forward(request, response);
}
まさかの、、formが入れ子になっていたー!それで最後のしか適用されんかったんや!
でもまだ真ん中のだけ遷移しない。遷移先ファイルで余計な文字が入っててJSPのエラーが起きてたので直したんだけど、それでも遷移してくれない。そのページ単体で起動しない。結局これは、ページインクルードの閉じタグ</jsp:include>が抜けてたのが原因でした。とりあえず全部遷移してくれてうれしい!
【解決済】CSSどこに置いたらいいの問題 ついでにfaviconとhtmlファイルも
授業でやったときはstylesheet1ファイルで、jspファイルと同じ場所(src/main/webapp/WEB-INF)に入れててちゃんと適用されてたと思うんだけど。
今度は1ファイル増えただけだけど、jspファイル数が多いからぐちゃぐちゃになるのいやで、フォルダに分けたとたん、適用されなくなった。。でも分けたい。。
・faviconはjspと同じ直下のまま。画像ファイルとしても機能している。
・htmlファイルは、結局、headerとfooterを共通化するのに、jspのほうが都合がいいからやめる。htmlファイルなし。でも今後のためにどこに置くべきか知っておきたい。(今後、はないかもしれないけど)
・cssは以下のように記載して、適用されてない状態。/cssから始めても同じだった
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/style.css">
ひとつ上の階層(私だとwebapp)にcssフォルダ作ったら適用された
これは以下の記事で解決!webapp配下にcssフォルダ作成して、jspに書くlink relはcss/style.cssのままで適用されました。
JSPファイルでCSSを読み込む方法【Java】【eclipse】 | エンジニアにさちあれ
でもこのWEB-INFは外から見れないという話は、じゃあなんで画像ファイル見てれるのかとか、フォルダに分けずにファイルを入れたときは適用されてたこととかが説明つかない気がするんだけど、、外から見れないんじゃなくて「直接呼び出せない」ってとこがポイントなんかね?
あとjsp側のlink relにプロジェクト名も書かないかんらしいけど、書いてなくていけてるのよね。。謎。。
Eclipseのエラー

プロジェクト配下に新規ファイルつくろうとしたり、つくったファイルを移動させたりするたびにいちいちエラーが出るから心理的につらい!!
たぶん、作った人と私のEclipseのバージョン違いのせいとおもわれる。。と想像がついてるから、調べる気になんない。とりあえずファイル作成できてるし移動もできてるしプログラムは動作してるから。
でも原因気になる。わかったらメモしておきたい!

これも↑
Servletを起動しようとすると出るエラー
なんなのー!
ちょっと話ちがうけど、またあるかもしれないエラー。メモしておく。
SQL文をファイルで読み込んだら文字化けして、実行後のテーブルもやっぱり文字化け。
Eclipseの表示上で直せたものの、読み込みなおすとやっぱり化けちゃってて意味なかった。
「ウィンドウ」「設定」「DBViewer」で文字コードをUTF-8に変更したらSQL文は文字化けなく読み込めたものの、もとのテーブルを削除する必要がある。
ところがテーブルは、外部キー等の連携があって削除できず。データベースごと削除した。それで気づいたけど、教科書はデータベースをつくることはするけど、データベースごと削除する方法は載ってない。やったらやばいから載せなかったんやろうね。。
ネットでググってDBごと削除して、作り直して、テーブルも入れなおした。やっぱりクリエイトと同じで削除のときもsql shellからの作業でした。
META-INF/context.xml Eclipseでテンプレートをつくる
どうせ他の動的Webプロジェクトでも同じ内容のxmlファイルつくるんなら、テンプレート登録して呼び出してみよう。と思ってやってみた。意外と検索してもやり方書いてなかったし自分のためにメモ。
手順
- EclipseのDBツリービューをひらいて、DBの上で右クリック→編集→次へ で出てくるデータベース定義を画面&スケッチなどでいったん出しておくと便利です。
- プロジェクト内の/src/main/webapp/META-INFを選択したうえで、
ファイル→新規→その他→XML→XMLファイルを選択して、 - ファイル名:context.xml →
- 「'新規XML'テンプレートをここで構成します」の「ここ」のリンクをクリック
- 名前と説明をかき、「コンテキスト」は「新規XML」を選ぶ

パターンの中はこうです。
<?xml version="1.0" encoding="${encoding}"?>
<Context reloadable="true" />
<Resource
name="jdbc/xxxnanndemoii(ここはなんでもいい)"
auth="Container"
type="javax.sql.DataSource"
driverClassName="org.postgresql.Driver(JDBC Driverの値を入れる)"
url="jdbc:postgresql://localhost:5432/shop(接続文字列の値を入れる)"
username="xxx(接続ユーザの値を入れる)"
password="yyy(接続パスワードの値を入れる)"
/>
</Context>
書けたら、→
で元の画面に戻ります。。

先ほど新規テンプレートを登録したとき私は「daoあり」という名前をつけたので、それを選びます。テンプレートを登録するときにコンテキストで「新規XML」を選択してないと、このとき選択肢としてでてきません!
→
できあがり
これでしかるべきところにcontext.xmlファイルができています。
いちばん上の行は$[encoding]のところに値が入って
となります。(どこから拾った値が入ってるのか私は知りませんが、環境によってはUTF-8以外の値が入る方もいらっしゃるかもしれません)
実は<Resourceの行にエラー表示が出てるので、、、あとで正解がわかったら記事直しておきます。