読者です 読者をやめる 読者になる 読者になる

日々精進

新しく学んだことを書き留めていきます

java

web.xmlの要素には仕様で順序が決まっているものがある

そもそもXMLに順序は関係ないと思っていたが、関係ある場合もあるらしい。 XML Schemaを使うとweb.xmlなど特定の用途に使うXMLの仕様を記述できる。 web.xmlのXML Schemaは http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd で、さらにこれは↓を参照して…

MacでJDKのバージョンを切り替える

インストールされているJDKのバージョン一覧を出す /usr/libexec/java_home -V 現在有効なJDKのバージョンを出す /usr/libexec/java_home JDKのバージョンを切り替える export JAVA_HOME=`/usr/libexec/java_home -v 1.7.0_45` 参考:

JavaEEサーバでHTTP通信を禁止し、HTTPSを強制する設定

多分JavaEEサーバであれば何でもこれでいける。以下のようにweb.xmlに書くとHTTPで通信できなくなる。 <security-constraint> <web-resource-collection> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint> 参考:

jspの拡張子を変更する

web.xmlに以下を追加すればいい。この例だと拡張子がxyzになる。 <servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.xyz</url-pattern> </servlet-mapping> 拡張子なしにしようと思ってurl-patternを*にしたらうまくいかなかった。 参考:

Javaのfor eachは順序が保障されている

for eachでiterateする場合、取り出されるオブジェクトの順序が保障されていない処理系もあるが、 Javaの場合はListをiterateするとindexが0のオブジェクトから順に取り出されることが保障されている。 参考:

Java7でBase64エンコーディング

Java8だとBase64.getEncoder().encodeToString(message);のようにすればいいが、 Java7だとDatatypeConverter.printBase64Binary(message);になる。 参考:

IntelliJとgradleを使っている時にgradleではビルドできるがIntelliJではビルドエラーになる

原因はIntelliJのビルド設定にライブラリへの依存関係が設定されていなかったため。 Project Structure > Modules でアプリモジュールを選択して、Dependencies > +ボタン > Library...からgradleでインストールしたライブラリを選択してOKをクリックすると…

カンマ区切りの数字の文字列をParseしてIntにする

NumberFormatを使用する。コード例は以下。 NumberFormat.getNumberInstance(Locale.US).parse("2,000").intValue() 参考: How to parse number string containing commas into an integer in java?

BigDecimalの小数桁の末尾の0を削除する

BigDecimal#stripTrailingZerosで削除できる。scaleも合わせて変更してくれる。 decimal = decimal.stripTrailingZeros(); 参考: Check if BigDecimal is integer value

JavaでListのリテラルを簡潔に書く

Arrays.asListを使う。 List<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3,5,8,13,21)); {{}}を使ってもできるらしい。こんなの初めて見た。 仕組みとしては、ArrayListを継承した匿名クラスを定義してその中でaddメソッドを呼んでいるようだ。 List<String> list = ne</string></integer></integer>…

javaプログラムを実行すると「Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/io/FilenameUtils」

これはcommons-io libraryにクラスパスが通ってないことが原因。 以下からcommons-io libraryをダウンロードし、パスを通せばいい。 Commons IO - Commons IO Overview 参考:What can cause java.lang.NoClassDefFoundError? - Stack Overflow