リライト
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を使っている場合、Apacheのhttpd.confから呼び出す必要がある
リライトができたら、URL操作がとても楽になる!どんなURLも自在にあやつれる!
よって、ハッピーになれる!
x-codeでの開発スピードをあげるために
まず、マウスによる操作をなくしたいし、なるべくキーボードから指を指定位置から移動したくないので、下のURLからショートカットやキー操作を覚える
http://www.slideshare.net/cocopon/xcode-12535772
なんと、デフォでEmacs風の操作が入っている
コードを書く際に大切なこと+α
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で、呼び出す形にする。マジックナンバーの使用は、将来仕様が変わったときに、変更箇所を増やすことになるので、保守上とてもよくない。
アンダースコアのついた変数はフィールド変数を表す記号
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で対応してくれるということになりまふ(・∀・)
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キャピ
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)でも可
てして解決。
いきなり意味不明なエラーが出るとびっくりするよね