今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

Java

現場至上主義 Spring Boot2 徹底活用

献本いただきました。ありがとうございます。現場至上主義 Spring Boot2 徹底活用ソシム売上ランキング: 5302generated by affi-linker.com at 2018.12.05専門学校での教科書に使えるのではないかと思いましたが、やはり「現場至上主義」な本は、教科書とし…

Spring Boot で接続してきたクライアントのIPアドレスを取得する方法

コントローラで HttpServletRequest を参照できるようにするために、@Autowiredでインスタンス変数requestを追加する。 request.getRemoteAddr() でIPアドレスを取得できる。HogeController.java @Autowired private HttpServletRequest request; public Str…

Spring BootでPOSTしたときに403エラーとなる問題の解決方法

Spring Bootでフォームを作成してPOSTすると、403エラーとなる場合がある。 <form method="post" action="/hoge/" th:object="${formModel}"> <label for="title">名前</label>: <input type="text" name="name" th:value="*{name}" /> <br/> <label for="description">説明</label>: <input type="text" name="description" th:text="*{description}"> </br/></form>

GAE/Javaでローカルデータストアのデータが消えてしまう問題

過去に作ったGAEアプリを触ってたら appengine-web.xml ファイルで警告が表示されるようになってる。appengine-web.xml ファイルのほぼ先頭に以下のような記述の部分。 <application>project-name</application> 現在は次の警告が表示される。 Project ID should be specified at deploy…

Spring Boot でJDBCを使ってユーザー登録・ユーザー認証する方法

まずは公式に従う。≫ https://spring.io/guides/gs/securing-web/pom.xmlにjpaとsecurityを追加。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security<…</artifactid></dependency>

Spring Boot で javax.persistence パッケージでコンパイルエラーになる

専門学校で教えてて、数人が同じエラーを出していたのでメモ。import javax.persistence.XXX; のところで「見つかりません」のエラーが発生。ぐぐってみたら、ここがヒット。≫ java - Spring Boot - javax Import statements not working correctly - Stack …

XMLRPCでカテゴリとタグ付きでブログ記事を投稿する方法

ブログに記事を投稿するのに、カテゴリとタグを指定して投稿しようとしたんだけど、なかなかうまくいかなくて試行錯誤して、やっとうまくいったのでまとめとく。カテゴリとタグをString配列にしてMapに格納するのがポイントだったらしい。 XmlRpcClientConfi…

Bad configurationエラーでGAEにデプロイできなかった原因と対策

GAEにデプロイしようとしたら、こんなエラー。 Bad configuration: Received SAXException parsing the input stream. Caused by: 途中でファイルの末尾に達しました。 ログを見ろって書いてあるので確認したら、WEB-INF/appengine-generated/datastore-inde…

slim3のsortInMemory()の挙動が変?

データストアからエンティティを取得して、sortInMemory()でcreateDate.descでソートしたら、なぜか最新のいくつかのエンティティが結果に出てこない。 なぜ?自作 Comparatorでソートしたらちゃんと最新のエンティティもでてくるんだけど。 なぜ? List<Hoge> lis</hoge>…

Google Cloud Storageに保存した画像をリサイズして応答する方法

最近はスマートフォンで撮影できる画像の解像度が巨大化してるので、そのままを表示すると遅くなってしまう。 そこで、リクエストパラメータにwidthを追加して、任意のサイズで表示できるようにした。ここではblobKeyを元にBlobInfoを求めてるけど、ファイル…

enctype="multipart/form-data"にするとreqeust.getParameter()がnullを返す問題の対策

というか、slim3だとgetParameter()は取れるけど、getParameterValues()がnullになって困った。JSPはこんなん。 <form id="form" action="/hoge" enctype="multipart/form-data" method="post" > <input type="text" name="name" /> <input type="file" name="image" accept="image/*" /> <c:forEach var="o" items="${checks}"> <span></span></c:foreach></form>

Amazon の Cloud9 にGAE開発環境を作る手順

AWSアカウントでログインして「Cloud9」で検索すると出てくるので、そこクリック。 Cloud9のダッシュボードが開くので、オレンジ色の「Create environment」をクリック。 適当に名前をつけて、「Next step」→「Next step」→「Create environment」で環境が作…

ウェブサイトURLの正規表現

ぐぐってみると、英数字オンリーばかりなんだけど、最近は日本語ドメインもあるし、パスの中に日本語を含んだりする場合もあるので、日本語も許可したほうがいいと思う。というわけで、"\S"を追加。 String regex = "^https?(://[-_.!~*\\'()a-zA-Z0-9\\S;\\…

電話番号の正規表現

電話番号の正規表現って、ぐぐったらいくつもあるけどいまいちピンとこない。そのなか、にぽたんは別格。 でも、こんな長いのソースコードに埋め込みたくない。。。≫ 二度目の公開!電話番号の正規表現 - にぽたん研究所電話番号の規則は総務省のサイトに。≫…

ローカルで複数のGAEプロジェクトを同時に実行する方法

複数のGAEプロジェクトをローカルのパソコンで同時に実行したい場合、普通に[実行]-[Webアプリケーション]を選択すると、デフォルトのポート番号8888で起動しようとして起動に失敗する。同時に複数のサーバーを起動するには、Jettyが使用するポート番号を変…

Datastoreに保存したオブジェクトのKeyの文字列化

文字列化するとパッと見では謎の文字列だしJSONでやり取りするにもひとつの文字列だけでオブジェクトを特定できるので便利。 相互変換するのも1行だけでOK。文字列化するときは以下のコード。 String s = KeyFactory.keyToString(key); Keyに変換するときは…

MD5でパスワードをハッシュ化する

java.securityパッケージのMessageDigestでハッシュ化する。 public String hash(String s) { String hash = ""; try { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(s.getBytes()); byte[] digest = md.digest(); hash = DatatypeConve…

RestTemplateのgetForObject()でエラー

RestTemplateのgetForObject()を使って、JSONをMapに読み込ませようとしたら、エラーが発生してしまった。 Could not extract response: no suitable HttpMessageConverter found for response type 要するに、JSONをMapに変換するのに適した方法が見つかり…

再びGAEへのデプロイでエラーが発生する

EclipseからGAEにデプロイしようとすると、こんなエラーが発生してデプロイできない。 "Deploying hogehoge to Google" 中に内部エラーが発生しました。 com.google.apphosting.utils.config.AppEngineWebXml.getPagespeed()Lcom/google/apphosting/utils/co…

EclipseでGAE+Slim3による開発

EclipseをNeonにアップデートしたら、Slim3のプラグインが入手不能で簡単に開発に着手できなかった。動かすまでにちょっと手間取ったので、手順をまとめておく。 準備 まずはこれの前に書いた手順でGoogle Cloud APIを使えるようにする。≫ Eclipse Neon で G…

Eclipse Neon で Google Cloud API を使えるようにするまで

Eclipse Neon をインストールしてGAEアプリを作ろうとしたらいろいろと怒られた。 ツールバーのGoogle Cloud PlatformアイコンをクリックしてMaven-based Google App Engine Standard Java Project を選んだら、「Cloud sdk too old」と怒られた。コマンドラ…

GAEからメールを送信する方法

Javamailを使うと簡単に送信できる。 コードはあちこちにころがってるからいまさら書くまでもないけど。 package jp.hoge; import java.util.Properties; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; imp…

GAEのプロジェクトでコンパイルエラー

ふと気付くと、GAEのプロジェクトでコンパイルエラーが発生してた。以前はなんともなかったのに。 エラーメッセージはこれ。 The import com.google.appengine.api.datanucleus cannot be resolved. エラーが発生しているクラスはHogeEndPointというやつで、…

MediaRecorderで録画ができない問題を解決

Androidで、MediaRecoderを使って録画するアプリを作ってたんだけど、録画を開始しようとするとエラーが発生して録画ができなかった。LogCatを見ると、start failed: -19 ってメッセージが出てるんだけど、原因がわからん。 10-07 13:16:34.053: D/Hogehoge(…

「タグ・ライブラリー記述子が見つかりません」の謎

専門学校で教えてる時に遭遇した謎のエラーをメモっとく。 EclipseにSTSをインストールして Spring Project の Simple Spring Web Maven のプロジェクトを生成直後の状態。 教室内のひとりを除いて全員がうまくいってるんだけど、一人だけがタイトルのエラー…

SpringMVCのリクエストパラメータに含まれた日付を受けとる方法

ログを日付でフィルタリングをする実装をしてて、サーバ側のControllerの引数にDate型を書いたら、素直には動いてくれなかった。クライアント側のコードがこちら。 var params = 'fromTime=' + $('input[name=fromTime]').val() + '&toTime=' + $('input[nam…

GAEのローカルサーバが起動しないのはJDKのバグが原因

AndroidとGAEを連携させるアプリを作りはじめようとして、Eclipseで「App Engine Connected Android Project」を生成した。 そうすると、プロジェクトを作るときにGAEでのAPI KeyとProject Numberを求められる。なので、GAEで新規にプロジェクトを作成して、…

XMLのxsi:schemaLocationを変更したときにWhite spaces are required between publicId and systemIdエラーが発生する

SpringMVCでのログ出力にAspectを使いたくてぐぐってみた。このあたりを参考にしつつプログラムを修正。≫open technica: Spring MVCでアスペクト(インターセプター)を実装する ≫テックノート – Aspectjの@Before、@Afterを使ってメソッド前後にログ出力を入…

JSTLで改行でのsplit()ができない問題

JSPの中でオブジェクト内の文字列を取得して、改行コードでsplit()してやろうと思ったら、JSPがコンパイルエラーになって動かない。 <%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> <%@taglib prefix="c" uri="http://java.sun.com…

springでJSON配列を受け取る方法

springのControllerでJSON配列を受け取る時は、メソッドのパラメータを配列にするだけで受け取れるようになる。もっとめんどくさいのかと思ったけど、あっさり動作した。 @RequestMapping(value = "/json/hoges", method + RequestMethod.POST, consumes = M…