kyuuuuuuuuuuriのブログ

うぇぶエンジニアになりたくてなりたくて震えるもろきゅうの日記です

リライト

URLを自在に操れるわざ
基本的な書き方

RewriteRule ^/hoge/piyopiyo/([^/]+)/?$ /HogehogePiyopiyo/$1 [QSA,PT,L]


前者がサイトからたたくURLで、後者がサーバ側がアクセスするURL
上記の例だと、
http://localhost/hoge/piyopiyo/aaa/
とアクセスした場合、HogehogePiyopiyoアクションのaaaメソッドにアクセスします。
*ただしSAStrutsを使う前提で話をすすめてます

URLの後の値は、
QSA:リライトしてもパラメータを保持する
PT:?よくわかってない
L:ひっかかったら、ここで処理をやめますよ
詳しいことは以下のURLに!
http://tm.root-n.com/server:apache:module:rewrite

あとは正規表現
*[]の中の^は、否定をあらわす 例:[^A]は、A以外
*?は、前の文字があっても、なくてもいいをあらわす 例:[ab?]だったら、aでもabでもひっかかる

ちなみに、この設定はApacheを使っている場合、Apachehttpd.confから呼び出す必要がある

リライトができたら、URL操作がとても楽になる!どんなURLも自在にあやつれる!
よって、ハッピーになれる!

コードを書く際に大切なこと+α

インジェクションとは

SAStrutsで、
@Resourceをつけて、自動的にインスタンス生成してくれる機能のこと。

StringBuilderで、Stringの値を結合しよう!

String aaa = "a";
String bbb = "b"
String ccc = aaa + bbb;

はNGである。
なぜなら、この書き方は、メモリを使うから。
参照:http://www.javadrive.jp/start/stringbuilder/index1.html

こう書く

StringBuilder sb = new StringBuilder();
sb.append("abc");
sb.append("def");
sb.append("ghi");

Strint str = new String(sb);  // "abcdefghi"

コードの整形 in Eclipse

Ctrl + shift + f コード形式の整形
Ctrl + shift + o 使用していないimport文の削除
これによって、SVNの変化を少なくすることができる。

jspで、マジックナンバーは極力使わない。

というか使わない。javaの方で、定義して、jspで、呼び出す形にする。マジックナンバーの使用は、将来仕様が変わったときに、変更箇所を増やすことになるので、保守上とてもよくない。

jspのpartsの切り分け

jspをpartsごとに切り分けて、ページに埋め込む。jspのページが見にくくなることを防ぐ

アンダースコアのついた変数はフィールド変数を表す記号

String _hogehoge;
は、フィールド変数を表す記号で、昔の人が習慣的に使っていたらしい。
しかし、シーザーと相性が悪いので、SAStrutsを使うときはあまり使わないかも!

try-catch

tryで例外が発生したときに、catchを実行する
そのとき、e.printStackTrace();は、catalina.outに例外が出力されるので、使わないようにする。

ロガーの使い方

プレースホルダーを使って、変数を結合して出力する
LOGGER.debug("staffName={}", staffList.get(0).getStaffName());
ここでも、+ は使わない。
このプレースホルダーは、すべての変数に対応しているので、型を気にしなくても大丈夫!便利!
なお、プレースホルダーが使えるのは、slf4jだけなので、javaではこの書き方はできない。残念!

javascriptの定義

<script type="text/javascript" src="/js/shopDetail.js"></script>
<script type="text/javascript" src="/js/shopDetail.js?d=@FILE_TIMESTAMP@"></script>

javascriptを定義するときは、後者の方を書きましょう。
後者と前者で違うのは、d=@FILE_TIMESTAMP@の部分ですね( ´∀`)
これはなんのためにあるのかというと
将来、本番で動かしたとして、ユーザのブラウザはそのページを読み込むことになります。ブラウザにはキャッシュという機能があって、一度読み込んだjavascriptファイルをキャッシュしてしまいます。そして、2度目にそのjavascriptファイルを読む必要があるときは、このキャッシュが、読み込んだjavascriptをそのまま適用してくれます。
これは、動作がはやくなるということで、とても便利ですが、ひとつ厄介なのが
htmlでインポートしているjavascriptのファイル名と同じファイル名がキャッシュされていたら、キャッシュの方を使うということです。
これ、どこがだめなのかというと、開発側で、javascriptに変更を加えたとき、ユーザの方に反映されなくなっちゃいます!
そこで、@FILE_TIMESTAMP@←こいつが、プロジェクトをbuildする瞬間に、日付時間に応じて変わってくれます。これによって、インポートするファイル名が違ってくるので、変更を加えたjavascriptで対応してくれるということになりまふ(・∀・)

guavaを使用する

googleが提供しているjavaライブラリ
public List < Hoge > hogeList = new ArrayList < Hoge >();

public List < Hoge > hogeList = Lists.newArrayList();
できたりしちゃう(・∀・)
利点としては、保守がしやすい。書きやすい。
ほかにもいろいろ便利!らしい!

とりあえずこれだけでふ

Webの脆弱性・SQLインジェクション

Web開発をしている際に、問題になるのはWebに対する攻撃

中でも、多くを占めるのが

クロスサイトスクリプティング(悪意あるスクリプトの埋め込み)

SQLインジェクション
http://www.atmarkit.co.jp/fsecurity/column/ueno/42.html

SQLインジェクション、パラメータに悪意のある値を埋め込んで、不正にDB操作をする行為である
これをやられたらやばい!だからちゃんと対策をしなきゃ!むずかしそう!

でもでもでも最近ではO/Rマッパーがそこらへんの処理をやってくれるので(多分)
O/Rマッパーをちゃんと使おう!
ということですー

S2jdbcとかでは、
simpleWhereをちゃんと使おう!とか、Nameクラスを使おう!とか、です。

でもちゃんと理解もしないとね☆(ゝω・)vキャピ

html,jspのコメントアウト

ちょとはまったのでメモ

html
<!-- -->

jsp
<%-- --%>

これだけのことですがw

前者は、Webのソースコードには出て
後者は、javaそのものの処理をとめるので、ソースコードにはでないんです。
基本的なことですね…

eclipseでデバッグ

えと、Web開発でですが

ソースコードの、横のラインをダブルクリック
ブレークポイントが出現する
*Server起動
*ページにアクセスする
ブレークポイントでページが落ちる
Eclipseに戻り、F6(次のコード、一行を実行)F5(前の行に戻る)F8(次のブレークポイントへ)

で、デバッグが幸せになれる

xcodeをアップデートしたらソースコードがビルドできなくなった

先日、xcodeのアップデートがあったので、
嬉々としてアップデートしたら
今まで普通にビルドできていたはずのプロジェクトが以下のエラーをはいて
ビルドできなくなっていた

error: PCH file built from a different branch (clang-425.0.24) than the compiler (clang-425.0.27)

>プリコンパイル済みヘッダーが違う

という意味らしく、
要するに、コンパイルをはやくするために作ったヘッダファイルが
アップデートによってうにゃらうにゃらしていたわけなんです。


そこで
product -> clean
(command + shift + K)でも可

てして解決。
いきなり意味不明なエラーが出るとびっくりするよね