Web開発者泣かせでお馴染みのIEにはIEの過去バージョンモードで表示出来る互換表示機能があります。
しかし互換表示することで表示が崩れてしまう場合、デフォルトでは互換表示させたくないケースが多々あります。
そういう場合にはmetaタグで「X-UA-Compatible」を指定する事で互換モードではなく、使用しているIEの各バージョンの標準モードでレンダリングさせる事が可能となります。
使用しているIEの各バージョン毎でレンダリング
IEのバージョン固定でレンダリング
Web開発では必ずアプリケーションサーバ(APサーバ)とかWebサーバなどという言葉が出てきます。
ここでは「アプリケーションサーバ」とは何者なのか、またこの「アプリケーションサーバー」として使用されている「JBoss」と「Tomcat」の機能や違いについて整理しておきます。
その前に「アプリケーションサーバ」って何?という方もいると思いますので、簡単にまとめておきます。
アプリケーションサーバとは
- Webシステム開発する上で構成される「プレゼンテーション層」「アプリケーション層」、「データ層」の3階層モデルにおいて、「アプリケーション層」のプログラムを実行するサーバーのこと。
- アプリケーションサーバで提供するのは基本的に以下の3つとなります。
- Javaなどのプログラム実行環境やデータベースへの接続機能の提供。
- 複数の処理(スレッド)を連結するトランザクション管理機能。
- 業務処理の流れを制御するビジネスロジックの実装。
Jbossとは
- EJB(Enterprise JavaBeans)のオープンソース実装であるJavaによるオープンソースソフトウェア開発コミュニティのこと。
- JBossはEJB(J2EE対応アプリケーション)を動作させるためのサーバソフトウェアとして利用されています。本来JSPやサーブレットは動作しませんが、これらを動作させるためにWebコンテナとしてTomcatを採用しています。
- Jbossで提供される機能は「JTAトランザクションマネージャ」、「EJB」、「MDB」、「JPA」、「JMS」、「JCA」、「JAX-WS」、「JMX」、「log4jを用いたログ基盤」、「分散キャッシュなどの各種クラスタリングサービス」などがあります。
Tomcatとは
- Apache Tomcat Project内で開発されているオープンソースのソフトウェア。
- JavaサーブレットやJSPを処理するアプリケーションサーバ(APサーバ)/サーブレットコンテナの一つ。
- 単独でWebサーバとして動作することも可能。
- 実際にはプラグインとしての利用が主流となっています。
- Tomcatで提供される機能は基本的にServlet, JSP, JDBC接続プールのみ。
とつらつら書いてみましたが、要はJbossもTomcatも「JavaをWeb(ブラウザ)上で動かすためのプログラム」という感じで理解しておけば最初の内はいいのかなあと思います。ただTomcatでは使用出来る機能が限られる為、Tomcatの機能も包含しているJBossを使用しているケースが最近は多いようです。
Webシステムは基本的に複数人で同時利用されるのが前提のため、マルチスレッドアクセスを考慮した設計・実装を行う必要があります。業務でJavaの各変数とスレッドセーフについて考える機会があったので、「インスタンス変数とローカル変数の違いとスレッドセーフとの関係」について今回は整理してみようと思います。
Javaでの変数毎のメモリ管理イメージ

上記は変数毎のメモリ管理イメージとなります。Javaではクラス変数やインスタンス変数はヒープ領域と呼ばれる共有メモリ領域へ保存されます。複数のスレッドで共有され別のスレッドに書き換えられる可能性があり,スレッドセーフではありません。対してローカル変数はJavaスタックと呼ばれるスレッド固有メモリ領域へ保存されます。スレッド固有領域なので別のスレッドに書き換えられる可能性はないのでスレッドセーフとなります。
インスタンス変数とは
- サンプルコード
|
public class ClassSample{ /** インスタンス変数 */ private String hoge; } |
- メソッドの外に記述します。staticは付けません(staticが付くとクラス変数になります)。
- ヒープ領域と呼ばれる共有メモリ領域へ保存される為、宣言しただけではスレッドセーフにはなりません。
- スレッドセーフを保つ為には初期化する必要があります。
- コンスラクタで初期化
- インスタンス宣言時に初期化
- 最初のget時に初期化
- 他のスレッドからの更新を防ぐ為、修飾子はprivateにする必要があります。
- 当該クラス内の任意のメソッドから参照可能となります。
ローカル変数とは
- サンプルコード
|
public class ClassSample{ public static void methodSample(){ // ローカル変数 int num = 1; } } |
- メソッド内に記述します。
- そのメソッドが実行中の間だけ有効となります。
- Javaスタックと呼ばれるスレッド固有メモリ領域へ保存される為、スレッドセーフとなります。
様々な業務でシステム開発をしているとDTOやVOというクラスが出てきて違いが曖昧になってくる事があるので両者の違いについて整理しておきます。
DTO(Data Transfer Object)
- 基本的には値をまとめて受け渡す事のみを目的とするクラス。
- DTO(Data Transfer Object)はデザインパターンの一つ。
- 過去、J2EEではVO(Value Objects)と呼ばれていた。
- VOとは違い、値は変更可能なのでsetterメソッドを持つ。
VO(Value Objects)
- VO(Value Objects)もデザインパターンの一つ。
- インスタンスコンストラクタでプロパティを初期化してプロパティの変更(set)は外から出来ないようにするクラス。
- VOは不変である事が前提のため、MVC間で使用する場合にはDTOを用いた方が相性が良い。
- VOクラス例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
/** * <p>[概 要] SampleVO。</p> * <p>[詳 細] </p> * <p>[備 考] </p> * <p>[環 境] </p> */ public class SampleVO implements Serializable{ /** * 番号 */ private Integer no; /** * データ */ private String data; /** * <p>[概 要] コンストラクタ。</p> * <p>[詳 細] </p> * <p>[備 考] </p> * @param no * @param data */ public SampleVO(Integer no, String data) { this.no = no; this.data = data; } /** * <p>[概 要] 番号を取得する。</p> * <p>[詳 細] </p> * <p>[備 考] </p> * @return 番号 */ public Integer getNo() { return no; } /** * <p>[概 要] データを取得する。</p> * <p>[詳 細] </p> * <p>[備 考] </p> * @return データ */ public String getData() { return data; } } |
HTMLを作成する時に悩む、<b>太字タグと<strong>論理強調タグの違いについてメモしておきます。
この二つは表面上はよく似ていて、どちらも太字になります。
ですが<b>タグは単に太く見えるだけで単なる一般的な太字ですが、<strong>タグは検索エンジンなどにおいて、特別な意味を持ったタグとなります。
検索エンジンなどで注視させたい場合などは<strong>タグを用いると良いでしょう。
逆に<b>タグは単なる太く見えるだけのタグなので、文章の中で読者に対して注視させたい場合に用います。
私の場合は以前よくSEOの観点から<strong>タグを活用していました。
メタタグなどよりは多少の効果はあるようで、特定の検索ワードで上位になることも多かったです。
今は時間的に余裕がなく面倒なので、あまり文章内の特別な編集は殆どしていませんが、多少の効果があるという事は確かなようです。
他にもメタタグなど色々なタグがHTMLにはありますが、<b>タグや<strong>タグは初心者でも簡単に用いる事が出来ると思うので、うまく活用すると良いかもしれません。
javaでプログラミングしていると必ずと言っていいほど「オーバーロード」や「オーバーライド」という言葉が出てきます。復習も兼ねて今回は両者の違いについて整理してみます。
オーバーロードとは
- 同一クラス内の同一メソッド名で、「引数の型」、「引数の数」、「引数の並び順」のいずれかが異なるメソッドを複数定義すること。
- 同一クラス内の同一メソッド名でも「戻り型」、「アクセスレベル」、「引数名」、「throws節」が不一致している場合はオーバーロードとは見做されないのでコンパイルエラーになります。
Javaでのオーバーロード実装例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
public class OverLoadSample{ /** * <p>[概 要] オーバーロードサンプルメソッド1</p> * <p>[詳 細] </p> * <p>[備 考] </p> * @param lang プログラミング言語 */ public static void dispMessage(String lang){ System.out.println("得意なプログラミング言語は「" + lang + "」です。"); } /** * <p>[概 要] オーバーロードサンプルメソッド2</p> * <p>[詳 細] </p> * <p>[備 考] </p> * @param country 国名 * @param lang プログラミング言語 */ public static void dispMessage(String country, String lang){ System.out.println("私の母国は「" + country + "」です。"); System.out.println("得意なプログラミング言語は「" + lang + "」です。"); } } |
JUnit
|
import org.junit.Test; public class OverLoadSampleTest { @Test public void dispMessageTest() { // 「オーバーロードサンプルメソッド1」の実行 OverLoadSample.dispMessage("JavaScript"); // 「オーバーロードサンプルメソッド2」の実行 OverLoadSample.dispMessage("日本", "JavaScript"); } } |
実行結果(コンソール)
得意なプログラミング言語は「JavaScript」です。
私の母国は「日本」です。
得意なプログラミング言語は「JavaScript」です。
オーバーライドとは
- 親クラス(スーパークラス)で定義されているインスタンスメソッドを、子クラス(サブクラス)で再定義すること。
- 親クラス(スーパークラス)のメソッドを変更することは出来ませんが、子クラス(サブクラス)に特化した機能を付与する事は可能です。
- アクセス修飾子が「private」以外でオーバーライドは適用対象となります。(例:「public」・「protected」)
- オーバーライドする側はオーバーライドされる側と「戻り型」、「メソッド名」、「引数型」、「引数の数」が全て一致する必要があります。どれか一つでも異なる場合はオーバーライドとは見做されません。
Javaでのオーバーライド実装例
スーパークラス(親クラス)
|
public class OverRideParent{ /** * <p>[概 要] オーバーライドサンプル スーパークラス用メソッド</p> * <p>[詳 細] </p> * <p>[備 考] </p> * @param lang プログラミング言語 */ public static void dispMessage(){ System.out.println("得意なプログラミング言語はCです。"); } } |
サブクラス(子クラス)
|
public class OverRideChild1 extends OverRideParent{ /** * <p>[概 要] オーバーライドサンプル サブクラス用メソッド1</p> * <p>[詳 細] </p> * <p>[備 考] </p> * @param lang プログラミング言語 */ public static void dispMessage(){ System.out.println("得意なプログラミング言語はJavaです。"); } } |
|
public class OverRideChild2 extends OverRideParent{ } |
JUnit
|
import org.junit.Test; public class OverRideSampleTest { @Test public void dispMessageTest() { // 「オーバーロードライドサブクラス用メソッド1」の実行 OverRideChild1.dispMessage(); // 「オーバーロードライドサブクラス用メソッド2」の実行 OverRideChild2.dispMessage(); } } |
実行結果(コンソール)
得意なプログラミング言語はJavaです。
得意なプログラミング言語はCです。
CSSでスタイルを設定していると「margin」と「padding」の基礎知識が曖昧だと使用する際に混乱しがちなので今回は両者の違いをまとめてみます。
marginとpaddingの関係図

marginの特徴
- borderの外側にスペース(余白)が設けられる
- スペース(余白)に背景色は適用不可
- marginに負数(-5pxなど)が使用可能
- 隣接した要素と相殺される(されないケースもあります)
paddingの特徴
- borderの内側にスペース(余白)が設けられる
- スペース(余白)に背景色を適用可能
- paddingに負数(-5pxなど)は使用不可
- 隣接した要素と相殺されない
ホームページのアドレス部分「http://www.~」を指す場合、「URL」と言ったり「URI」と言ったりしてるのを聞いた事がないでしょうか?一体どちらを使用するのが正しいのか疑問に思う方もいらっしゃると思うので整理しておこうかと思います。
URLとは
- URLは「Uniform Resource Locator」の略称。
- URLはURIの部分集合。
URIとは
- URIは「Uniform Resource Identifier」の略称。
- RFC3986で規定されている。
- URIはURLとリソース名を示すURN「Uniform Resource Name」を含む言葉。
正式名称を見てみると「URI」、「URL」、「URN」どれもリソースを表していますが、リソースを識別する意味で使用するのなら「URI」を使用すべきです。
ふとエスケープとエンコードの違いって何だろうと思ったので整理してみました。
どちらも「一定の規則に従い別の記号や文字列に置換する」という点では同義語に見えますが、根本的にその性質は全く異なるものです。
エスケープ
- HTMLでは「< 」を「&gt;」へ変換することをエスケープ処理と呼称します。この場合、画面上はエスケープしても「
エンコード
- 情報を暗号や通信に適した形式(コード)に変換すること。動画などの場合、この「形式」のことをコーデックと呼びます。
例えばURLコードへエンコードすると「半角スペース」は「%20」へ置換されます。そしてURLを見てみるとエンコード後の文字列がそのまま表示されています。
「駑馬十駕」を信念に IT系情報を中心に調べた事をコツコツ綴っています。