Common Gateway Interface(CGI)やサーブレットなどのテクノロジーを使用してwebア あなたが2つの部分を分けることができる解決策を探しているなら、それ以上探す必要はありません。 JavaServer Pages(JSP)はこちらです。
JSPページを使用すると、フロントエンドプレゼンテーションをビジネスロジック(中間層とバックエンド層)から分離できます。 これは、Webアプリケーションへの迅速なアプリケーション開発(RAD)アプローチです。 この一連の記事では、今日と明日の市場向けに最新のWebアプリケーションを開発する方法を説明する実践的なチュートリアルを提供します。 この記事では、JSPテクノロジの概念と利点を説明し、このエキサイティングなテクノロジの活用方法と、フォームを処理するための再利用可能なコンポー
ダイナミックウェブ
ウェブは、静的な情報を提供するネットワークベースのハイパーメディア分散情報システムから、商品やサービスを売買するための市場へと進化してきた。 この市場を可能にする高度化されたアプリケーションには、動的な情報を提示するための技術が必要です。
第一世代のソリューションには、WEBサーバーを介して外部プログラムを実行する仕組みであるCGIが含まれていました。 CGIスクリプトの問題点はスケーラビリティです。リクエストごとに新しいプロセスが作成されます。
第二世代のソリューションには、サーバー用のプラグインとApiを提供するwebサーバーベンダーが含まれていました。 問題は、彼らの解決策が彼らのサーバー製品に固有のものであったことです。 たとえば、Microsoftは動的コンテンツの作成を容易にするActive Server Pages(ASP)を提供していました。 しかし、彼らの解決策はMicrosoft IISまたは個人用Webサーバーでのみ機能しました。 したがって、ASPを使用したい場合は、Microsoft製品に自分自身をコミットしなければならなかったし、あなたのお気に入りのwebサーバーとオペレーティングシステム
エンタープライズコンピューティングで非常に人気のあるもう一つの第二世代の技術はサーブレットです。 サーブレットを使用すると、Java技術を使用してサーバー側のアプリケーションを簡単に記述できます。 しかし、CGIまたはサーブレットのいずれかの問題は、書き込み、コンパイル、およびデプロイのライフサイクルに従う必要があることです。
JSPページは、いくつかの第二世代のソリューションと簡単に組み合わせることができる第三世代のソリューションであり、動的コンテンツを作成し、他の: webサーバー、webブラウザ、アプリケーションサーバーおよびその他の開発ツール。
JavaServer Pages(JSP)
JSPテクノロジーは、MicrosoftのACTIVE Server Pages(ASP)テクノロジーの代替としてサン・マイクロシステムズが開発したオープンで自由に利用できる仕様であり、Java2Enterprise Edition(J2EE)仕様の主要コンポーネントである。 市販のアプリケーション・サーバー(BEA WebLogic、IBM WebSphere、Live JRun、Orionなど)の多くは、すでにJSPテクノロジーをサポートしています。
JSPとASP
JSPとASPは同様の機能を提供します。 どちらもタグを使用して、HTMLページに埋め込まれたコード、セッション追跡、およびデータベース接続を許可します。 些細な違いのいくつかは次のとおりです:
- ASPページはVBScriptで記述され、JSPページはJavaプログラミング言語で記述されます。 したがって、JSPページはプラットフォームに依存せず、ASPページはそうではありません。
- JSPページはJavaBeansテクノロジをコンポーネントアーキテクチャとして使用し、ASPページはActiveXコンポーネントを使用します。
これらの些細な違い以外にも、組織の技術を選択するのに役立つ重要な違いがいくつかあります:
- 速度とスケーラビリティ:ASPページはキャッシュされますが、常に解釈されます。 対照的に、JSPページはJavaサーブレットにコンパイルされ、最初に呼び出されたときにメモリにロードされ、後続のすべての呼び出しで実行されます。 これは、ASPページよりもaspeedとスケーラビリティの利点をJSPページに与えます。
- 拡張タグ:JSPページには拡張タグと呼ばれる高度な機能があります。 このメカニズムにより、開発者はカスタムタグを作成できます。 つまり、拡張可能なタグを使用すると、JSPページのタグ構文を拡張できます。 ASPページではこれを行うことはできません。
- 選択の自由:あなたがチリをインストールしない限り!ソフトASP、ASPページは、Microsoft IISおよび個人用Webサーバーでのみ動作します。 ASPページを使用するには、Microsoft製品へのコミットメントが必要ですが、JSPページは特定のwebサーバーまたはオペレーティングシステムには結び付けません。 JSPページは広くサポートされている標準になっています。
JSPページとASPページの比較の詳細については、”JSPとASPの比較”を参照してください。
ソフトウェア環境
JSPページを実行するには、JSPおよびサーブレット仕様に準拠したwebコンテナを持つwebサーバーが必要です。 Webコンテナはwebサーバー上で実行され、そのwebサーバー上で実行されているすべてのJSPページとサーブレットの実行を管理します。 Tomcat3.2.1は、Java Servlet2.2およびJSP1.1仕様の完全なリファレンス実装です。 Tomcatのバイナリバージョンをダウンロードしてインストールします。Tomcatを設定するには
:
- 環境変数
JAVA_HOME
を、Java2Standard Edition(J2SE)インストールのルート-ディレクトリーを指すように設定します。 - Tomcatインストールのルートディレクトリを指すように
TOMCAT_HOME
環境変数を設定します。Tomcatを起動するには、windowsの場合はTOMCAT_HOME/bin/startup.bat
、UNIXの場合はstartup.sh
を使用します。
デフォルトでは、ポート8080でリッスンを開始します。 -
.jsp
ファイルをTOMCAT_HOME/webapps/examples/jsp
に保存し、JavaBeansクラスをTOMCAT_HOME/webapps/examples/web-inf/classes
に保存します。
注:Windowsで作業している場合、Tomcatを起動しようとすると、スペース外環境エラーが発生することがあります。 これを修正するには2つの方法があります:DOSウィンドウの初期メモリ設定を3200より大きい値に変更するか、設定を編集します。sysファイルに次の行を追加します:SHELL=c:\PATHTO\command.com /E:4096 /P
。
JSPページの仕組み
JSPページは基本的に伝統的なHTMLとJavaコードのビットを持つwebページです。 JSPページのファイル拡張子は”です。jsp”ではなく、”。html”または”。htm”、そしてそれはこのページがサーバー拡張またはプラグインによって達成される特別な処理を必要とすることをサーバーに伝えます。 簡単な例は次のとおりです。
サンプル1:日付。jsp
<HTML><HEAD><TITLE>JSP Example</TITLE></HEAD><BODY BGCOLOR="ffffcc"><CENTER><H2>Date and Time</H2><% java.util.Date today = new java.util.Date();out.println("Today's date is: "+today);%></CENTER> </BODY> </HTML>
この例には、従来のHTMLといくつかのJavaコードが含まれています。 タグ<%
はスクリプトレットの先頭を識別し、%>
タグはスクリプトレットの末尾を識別します。 Webブラウザからdate.jsp
を要求すると、図1のようなものが表示されます。
図1:要求日。jsp
舞台裏
このページ(date.jsp)
が呼び出されると、(JSPエンジンによって)javaサーブレットにコンパイルされます。 この時点で、サーブレットは他のサーブレットと同じようにサーブレット-エンジンによって処理されます。 次に、サーブレットエンジンはサーブレットクラスを(クラス-ローダーを使用して)ロードし、それを実行して、ブラウザーに送信される動的HTMLを作成します(図2 この例では、サーブレットはDate
オブジェクトを作成し、それを文字列としてout
オブジェクトに書き込みます。
図2:JSP
を呼び出すときの要求/応答フロー次回ページが要求されると、JSPページが変更されていない限り、JSPエンジンは既にロードされているサーブレットを実
スクリプト要素
date.jsp
の例では、パッケージ名を含む完全なDate
クラス名が使用されますが、これは面倒になる可能性があります。 完全なクラスパスを指定せずにDate today = new Date();
を使用してDate
のインスタンスを作成する場合は、page
ディレクティブを次のように使用します。
Sample2:date2。jsp
<%@page import="java.util.*" %><HTML> <HEAD> <TITLE>JSP Example</TITLE> </HEAD> <BODY BGCOLOR="ffffcc"><CENTER> <H2>Date and Time</H2> <% java.util.Date today = new java.util.Date();out.println("Today's date is: "+today);%></CENTER></BODY> </HTML>
しかし、<%=
タグを使用して同じことを行う別の方法は、
Sample3:date3と書くことです。jsp
<%@page import="java.util.*" %> <HTML> <HEAD> <TITLE>JSP Example</TITLE> </HEAD> <BODY BGCOLOR="#ffffcc"> <CENTER> <H2>Date and Time</H2> Today's date is: <%= new Date() %> </CENTER> </BODY> </HTML>
あなたが見ることができるように、同じことは、異なるタグや技術を使用して達成することができます。 いくつかのJSPスクリプト要素があります。 ここでは、JSPスクリプト要素を効果的に使用するのに役立つ従来のルールをいくつか示します:
-
<% ... %>
を使用して、宣言、式、またはその他のタイプの有効なコードスニペットを処理します。 上記のサンプル1は一例です。 - スクリプト言語を定義するには、
<%@page ... %>
と同様にpage
ディレクティブを使用します。 また、import
文を指定するために使用することもできます。 ここに例があります:<%@page language="java" import="java.util.*" %>
。 - 変数またはメソッドを宣言するには
<%! .... %>
を使用します。 たとえば、<%! int x = 10; double y = 2.0; %>
です。 - 式を定義し、結果を
String
としてキャストするには、<%= ... %>
を使用します。 たとえば、<%= a+b %>
または<%= new java.util.Date() %>
とします。 - 別のファイルの内容をメインJSPファイルに挿入するには、
<%@ include ... %>
と同様にinclude
ディレクティブを使用します。 たとえば、<%@include file="copyright.html" %>
です。
フォームの処理
eコマースアプリケーションの最も一般的な部分の一つは、ユーザーが名前や住所などの情報を入力するHTMLフォームです。 JSPを使用すると、フォームのデータ(ユーザーがフォームに入力した情報)は、ブラウザからJSPコンテナに送信されるrequest
オブジェクトに格納されます。 要求が処理され、結果がresponse
オブジェクトを介してブラウザに返されます。 これらの2つのオブジェクトは暗黙的に使用できます。
JSPを使用してHTMLフォームを処理する方法を示すために、ここでは名前と電子メールの二つのフィールドを持つフォームの例を示します。 ご覧のとおり、HTMLフォームはJSPソースファイルで定義されています。 request.getParameter
メソッドは、フォームからJSPタグを使用して作成された変数にデータを取得するために使用されています。
process.jsp
ページは、フォームのフィールドの値に応じて、フォームまたはユーザーによって提供された情報のいずれかを出力します。 フォームの値がnull
の場合はフォームが表示され、それ以外の場合はユーザーから提供された情報が表示されます。 フォームが作成され、同じJSPファイル内のコードによって処理されることに注意してください。
サンプル4:プロセス。jsp
<HTML> <HEAD> <TITLE>Form Example</TITLE> </HEAD> <BODY BGCOLOR="#ffffcc"> <% if (request.getParameter("name")==null && request.getParameter("email") == null) { %> <CENTER> <H2>User Info Request Form</H2> <FORM METHOD="GET" ACTION="/developer/technicalArticles/xml/WebAppDev/process.jsp"> <P> Your name: <input type="text" name="name" size=26> <P> Your email: <input type="text" name="email" size=26> <P> <input type="submit" value="Process"> </FORM> </CENTER> <% } else { %> <%! String name, email; %> <% name = request.getParameter("name"); email = request.getParameter("email"); %> <P> <B>You have provided the following info</B>: <P> <B>Name</B>: <%= name %><P> <B>Email</B>: <%= email %> <% } %> </BODY> </HTML>
webサーバーからprocess.jsp
が要求された場合は、図3のようなものが表示されます。
図3:プロセス.jsp loaded
名前と電子メールを入力し、Processをクリックしてフォームを送信して処理すると、図4のようなものが表示されます。
図4: フォームが処理されます
再利用可能なコンポーネント
上記の例のフォームは、多くのコードが関与していないという意味で単純です。 より多くのコードが関与している場合は、ビジネスロジックとフロントエンドのプレゼンテーションを同じファイルに混在させないことが重要です。 ビジネスロジックをプレゼンテーションから分離すると、他の側に影響を与えることなく、どちらかの側に変更が可能になります。 ただし、本番JSPコードはフロントエンドのプレゼンテーションに限定する必要があります。 では、ビジネスロジック部分をどのように実装しますか?
それがJavaBeansが遊びに来る場所です。 この技術は、開発者がコンポーネントを記述し、どこでも再利用できるようにする、移植可能でプラットフォームに依存しないコンポーネン JSPのコンテキストでは、JavaBeansにはJSPページ上のスクリプトにデータを返すビジネス・ロジックが含まれており、javabeanコンポーネントから返されたデータをブラウ JSPページでは、JavaBeanコンポーネントが提供するプロパティを設定および取得することによって、JavaBeanコンポーネントが使用されます。
利点は何ですか
JavaBeansを使用してJSPページを拡張するには、いくつかの利点があります:
- 再利用可能なコンポーネント: 異なるアプリケーションは、コンポーネントを再利用することができます。
- ビジネスロジックとプレゼンテーションロジックの分離:ビジネスロジックに影響を与えずにデータの表示方法を変更できます。
- ソースコードを安全に保つことにより、あなたの知的財産を保護します。
例:JSPでJavaBeansを使用する
ここで、上記のprocess.jsp
の例を変更してJavaBeansを使用する方法を見てみましょう。 上記の形式では、これらはname
とemail
の2つのフィールドです。 JavaBeansでは、これらはプロパティと呼ばれます。 したがって、最初に、setX
メソッドとgetX
メソッドを使用してJavaBeanコンポーネントを記述します。Xはプロパティ名です。 たとえば、getメソッドとsetメソッドsetName
とgetName
がある場合、name
というプロパティがあります。 サンプル5はFormBean
コンポーネントを示しています。
優れたコンポーネントは、異なるベンダーの他のコンポーネントと相互運用できる必要があります。 したがって、コンポーネントの再利用を実現するには、次の2つの重要なルール(JavaBeansアーキテクチャによって課されます)があります:
- beanクラスは、
Beans.instantiate
を使用して作成できるように、引数のないコンストラクタを提供する必要があります。Beanクラスは、インターフェイスSerializable
またはExternalizable
を実装して永続性をサポートする必要があります。
サンプル5:FormBean.java
package userinfo; import java.io.*; public class FormBean implements Serializable { private String name; private String email; public FormBean() { name = null; email = null; } public void setName(String name) { this.name = name; } public String getName() { return name; } public void setEmail(String email) { this.email = email; } public String getEmail() { return email; } }
JSPファイルでFormBean
コンポーネントを使用するには、beanコンポーネントをインスタンス化する必要があります。 これは<jsp:useBean>
タグを使用して行われます。 次の行<jsp:setProperty>
は、beanがインスタンス化されたときに実行され、beanのプロパティを初期化するために使用されます。 この場合、両方のプロパティ(name
とemail
)は単一のステートメントを使用して設定されます。 または、プロパティを一度に1つずつ設定することもできますが、最初にフォームの日付を取得する必要があります。 ここでは、name
プロパティを設定する方法の例を示します:
<%! String yourname, youremail; %> <% yourname = request.getParameter("name"); %> <jsp:setProperty name="formbean" property="name" value="<%=yourname%>"/>
フォームから取得されたデータでプロパティが初期化されると、サンプル6に示すように、else
部分の<jsp:getProperty>
を使用してプロパティ値が取得され、表示されます。
サンプル6:プロセス2.jsp
<jsp:useBean class="userinfo.FormBean"/><jsp:setProperty name="formbean" property="*"/> <HTML> <HEAD><TITLE>Form Example</TITLE></HEAD><BODY BGCOLOR="#ffffcc"><% if (request.getParameter("name")==null && request.getParameter("email") == null) { %><CENTER><H2>User Info Request Form </H2><form method="GET" action="/developer/technicalArticles/xml/WebAppDev/process2.jsp"><P>Your name: <input type="text" name="name" size=27><p> Your email: <input type="text" name="email" size=27> <P> <input type="submit" value="Process"></FORM></CENTER><% } else { %><P><B>You have provided the following info</B>: <P> <B>Name</B>: <jsp:getProperty name="formbean"property="name"/> <P> <B>Email</B>: <jsp:getPropertyname="formbean" property="email"/> <% } %> </BODY> </HTML>
結論
高品質の本番webアプリケーションの開発に関心のある開発者は、今日の市場だけでなく、明日のJSPやXMLにも適用可能な技術に精通する必要があ 次の記事では、XMLでの作業に最適なJSPテクノロジが提供する機能について説明し、XMLでJSPを効果的に使用する方法を示します。 JSPページには、JSPカスタムタグライブラリの形式でXMLサポートが組み込まれているため、JSPとXMLは、情報を共有するwebアプリケーションに最適な組み合わせ このシリーズの次の記事では、これについての詳細をお楽しみにしてください。