-
src/main/webapp/WEB-INF/web.xml
Springの共通Bean設定ファイルの定義
アプリケーションの共通設定を行う。
root-context.xmlではファンクション層(F層:Service)、データ層(D層:Dao)の定義を行う。<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/root-context.xml</param-value> </context-param>
SpringMVCのBean設定ファイルの定義
リクエストとサーブレットクラスのマッピングを行う。
servlet-context.xmlではプレゼンテーション層(P層:Controller)の定義を行う。<servlet> <servlet-name>appServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>appServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>Spring MVCではリクエストはすべて「DispatcherServlet.java」が受け取り、
どのコントローラーを利用するかは「HandlerMapping.java」に委譲している。
マッピングする際に設定値として、「servlet-context.xml」が指定されている。
【SpringMVC】プロジェクト作成
-
Spring MVCプロジェクト作成
「ファイル」-「新規」-「Spring」-「Springプロジェクト」を選択します。
テンプレートは「Spring MVC Project」を選択します。
ここで最初はテンプレートが見つからなかったので、インストールした覚えがあります。
(後で別マシンで検証)インストール場所は自動で下記に配置されました。
「C:\Users\ユーザ名\.m2」パッケージ名は最低3階層まで作成しないとエラーになります。
例:「jp.co.sample」作成後のパッケージ構成は下記の通り。
src/main/java:コントローラーJava配置用 src/main/resources:Spring用設定ファイル配置用(log4.xmlあり) src/test/java:JUnit実施用 src/test/resources:JUnit実施用 src/main/webapp/WEB-INF/views:JSP配置用 src/main/webapp/WEB-INF/classes:プロパティファイル配置用
-
JREシステムライブラリー変更
Eclipseの設定によってはJREシステムライブラリーが1.6になっているので、
プロジェクトを右クリックして「Javaのビルド・パス」で
JREシステムライブラリー1.6を除去して、
JREシステムライブラリー1.7を追加します。
【SpringMVC】導入
-
Spring MVC導入
普段は軽さ重視で「Eclipse 3.7 Indigo」を利用しているのですが、
プラグインの追加で「Eclipse 3.7 Indigo」用の
「Spring Tool Suite」を選択しても
プロジェクト・エクスプローラーの表示がバグったりしたので、
「Eclipse 4.3 Kepler」を利用することにしました。「Eclipse 4.3 Kepler」を立ち上げたら
「ヘルプ」-「Eclipse マーケットプレース」を選択。
「検索」タブで「STS」を入力し、
「Eclipse 4.3 Kepler」用の「Spring Tool Suite」を選択してインストールします。「Spring UAA Integration」はチェックを外してインストールしました。
規約に同意してEclipseを再起動すれば導入完了です。
【Oracle】指定日から連続した日付を取得
SQLで指定日から連続した日付を取得します。
集計画面で日ごとの合計を表示したい場合の親テーブルとして利用できます。
-
例1(ALL_CATALOGを利用)
SELECT TO_DATE('20150101', 'YYYYMMDD') + ROWNUM -1 AS DCOL FROM ALL_CATALOG WHERE TO_DATE('20150101', 'YYYYMMDD') + ROWNUM -1 <= TO_DATE('20150131', 'YYYYMMDD')ORDER BY 1;FROM句には指定日から連続した日付の範囲分の行を持っている必要があります。
今回の例では「ALL_CATALOG」を利用していますが、
そもそも参照権限がない場合もあるので、1~31までのNoだけを持つ空テーブルを利用します。
-
例2(ALL_CATALOGの代わりに1~31までのNoだけを持つ空テーブルを利用)
SELECT TO_DATE('20150101', 'YYYYMMDD') + ROWNUM -1 AS DCOL FROM (SELECT LEVEL id FROM DUAL CONNECT BY LEBEL <= 31) WHERE TO_DATE('20150101', 'YYYYMMDD') + ROWNUM -1 <= TO_DATE('20150131', 'YYYYMMDD')ORDER BY 1;
-
例3(1~31までのNoだけを持つ空テーブルだけを利用)
SELECT SYSDATE + LEVEL AS HIZEKE FROM DUAL CONNECT BY LEBEL <= 31;
【Oracle】順位付け
SQLで点数の高い順位を採番します。
その際、同点の場合、1, 1, 3のように採番します。
SELECT RANK() OVER(ORDER BY 項目 DESC) FROM テーブル名
【Oracle】SQLで表記揺れ
住所の登録システムを作っているときにたまに要件で出てくる表記揺れ。
ひらがなは全て半角カタカナに変換したり、
括弧も全て()に変換したりします。
Oracle10gからの機能であるUTL_I18NパッケージのTRANSLITERATEファンクションを利用します。
下記に例を示しておきます。
テキトーな仕様 全角英数字:全て半角英数字に変換 全角ひらがな、カタカナ:全て半角カタカナに変換 前後の中間の空白:全角、半角問わず削除 全角半角の括弧{}、「」、<>、():全て()に変換 全角記号:半角記号に変換 全角半角のハイフン:全て-に変換
CREATE OR REPLACE FUNCTION CONVERSION_TEST(
IN_CHAR VARCHAR
) RETURN VARCHAR
IS
BEGIN
RETURN
UTL_I18N.TRANSLITERATE(
TRANSLATE(
UPPER(TO_SINGLE_BYTE(REPLACE(REPLACE(IN_CHAR,' '),' ')))
,'{}「」<>()ー-!#$%'
,'()()()()--!#$%'
)
,'kana_hwkatakana')
;
END CONVERSION_TEST;
記号、括弧、ハイフンは全部書くとキリないので、省略しています。
「kana_hwkatakana」の部分は他にも色々あるようです。
【ファイルサーバ】Samba導入
タブレットを買ったこともあり、
会社作業を2つのPCで行うことが増えたので、
NUCにSambaを構築します。
-
Samba導入
yum -y install samba
-
Samba設定
mkdir /home/share chmod 777 /home/share vi /etc/samba/smb.conf
下記内容を[global]の下に追加 # Linux側文字コード unix charset = UTF-8 # Windows側文字コード dos charset = CP932 # ローカルLAN内からのみのアクセスを許可 hosts allow = 192.168.XXX. 下記内容を変更 # Windowsのマイコンピュータの「プロパティ」-「ワークグループ」を指定 workgroup = MYGROUP ↓ workgroup = WORKGROUP # 認証を行なわない(ローカルLAN内からのアクセスのみ許可しているため) security = user ↓ security = share # プリンタの共有 load printers yes ↓ load printers no [printers]の部分を全てコメントアウト 下記内容を最終行に追加 # テキトーに好きな名前指定 [Share] # 共有フォルダを指定 path = /home/share # 書き込み許可 writable = yes # ゲストユーザ許可 guest ok = yes # 全てゲストユーザとして扱う guest only = yes # フルアクセスでファイル作成 create mode = 0777 # フルアクセスでディレクトリ作成 directory mode = 0777 # 複数人が同時アクセス許可 share modes = yes
-
Samba用のファイアウォール設定
ファイアウォールの設定を行う。
外部からは接続できないようにするため、ルーターのポートは開けません。iptables -I INPUT 12 -p tcp --dport 445 -j ACCEPT iptables -I INPUT 12 -p tcp --dport 139 -j ACCEPT iptables -I INPUT 12 -p udp --dport 138 -j ACCEPT iptables -I INPUT 12 -p udp --dport 137 -j ACCEPT service iptables save
-
Samba起動
/etc/rc.d/init.d/smb start /etc/rc.d/init.d/nmb start chkconfig smb on chkconfig nmb on
smb:ファイル転送の機能を提供する。
nmb:ネットワークでマシンをブラウジングする機能を提供する。Windowsからエクスプローラーで「\\192.168.XXX.XXX\」とうって
shareディレクトリが確認でき、複数PCでファイルやり取りができれば問題なし。
【メールサーバ】Postfix設定その5(再送)
-
Postfix設定(再送)
Postfixの設定内容を追加します。
再送リトライはデフォルトだと5日となっていますが、
再送出来ない場合、1回で諦めるように設定変更します。vi /etc/postfix/main.cf
下記内容を追加 # 再送リトライは1回 maximal_queue_lifetime = 0 bounce_queue_lifetime = 0
設定内容を反映します。
/etc/rc.d/init.d/postfix restart
【メールサーバ】root宛メール
-
root宛メール削除
「/var/mail/root」と「/var/spool/mail/root」のファイルサイズが増えていたので、
mailコマンドで確認してみたところsudo -u root mail
No mail for root
メールがないと記載されたが、ファイルサイズがあって気持ち悪いので、
内容を待避し、削除することにしました。cat /var/mail/root > /home/ユーザ名/mail.txt cat /dev/null > /var/mail/root
これで「/var/mail/root」と「/var/spool/mail/root」のファイルサイズが0になりました。
-
root宛メール転送
root宛のメールをPostfixを利用して
プロバイダのメールアドレスに転送します。Postfixのエイリアスの設定場所を確認し、設定値を追加します。
view /etc/postfix/main.cf
下記内容が設定されていることを確認する。 alias_maps = hash:/etc/aliases
vi /etc/aliases
下記内容を最終行に追加 root: プロバイダのメールアドレス
設定内容を反映します。
postalias /etc/aliases /etc/rc.d/init.d/postfix restart
-
root宛メール転送確認
echo test | mail root
「/var/mail/root」と「/var/spool/mail/root」のファイルサイズが0KBのままで
プロバイダのメールアドレスにテストメールが届きます。
【Java】セッションとクッキーについて
セッションとクッキーについてメモ。
-
クッキーについて
-
保存場所
C:\Users\ユーザ名\AppData\Local\Microsoft\Windows\Temporary Internet Files
-
ファイル名
Cookie:ユーザ名@サイト名/
-
ブラウザメモリに保存されているクッキーの値が最優先
ファイルに保存されたクッキーの値を変更しても
ブラウザを閉じない限り、異なるIEで繋いでもブラウザで取得済の
ブラウザメモリのクッキーの値を使用する。
ブラウザを閉じて繋ぎなおすと、ファイルに保存されたクッキーの値を使用する。ただしクッキーの値の変更はツールを使用しないと有効にならない。
手書きで変更しても読み取れずに2番目の動作時にクッキーの値がNULLとなる。
-
保存場所
-
セッションについて
-
保存場所
ブラウザメモリまたはクッキーのファイルに保存。
キー名はJSESSIONIDであり、クッキーの値が優先される。 -
セッションハイジャック
セッションIDはサーバーとやり取りしている中でブラウザが自動でサーバーへ送信しているが、
下記の記述で明示的に直接指定することも可能。変更前
セッションIDはブラウザメモリまたはクッキーの値を自動でサーバーへ送信http://z-area.net/コンテキスト名?request1=test1&request2=test2
変更後
セッションIDはURLの値をサーバーへ送信http://z-area.net/コンテキスト名;jsessionid=12345?request1=test1&request2=test2
12345のセッションIDが正規のユーザのものである場合、
変更後のリクエストは正常に処理される。ログイン画面を表示した時点でセッションIDが採番されるので、
セッションハイジャックを防ぐにはログイン成功後にセッションIDを採番し直す。
-
保存場所
-
ツール
クッキー書き換え:IECookiesView(日本語化可能)
HTTP情報参照:ieHTTPHeaders