Beans の作成は避けられない

  標準化を強制



JSP の展開結果を見ても解りますが、JSP だけでは外部コードを作成できません。どうしても Beans の力を借りる必要があります。

Java を知らない者にとっては面食らいます。通常スクリプト言語では、「関数」を外部ファイルに作成して インクルードするだけなのですが、しっかりコンパイルしなければならないし、作る場所も好き勝手にできない事に気が付きます。

しかし、逆に言えば大勢の開発員が居ても、あるべきところにあるというのは良い事でもあります。



  パッケージ



パッケージは、Beans の本体です。ドキュメントルート -> WEB-INF -> classes に、パッケージ名を持つディレクトリを作成する所から始まります。

そのディレクトリの中にソースコードを置いてコンパイルするわけですが、最初は1ファイル1クラス1メソッドとするのが解りやすいでしょう。以下に二つのサンプルを示します。

  
// *********************************************************
// c_toshiftjis.java
// *********************************************************
package light;

import java.io.*;

public class c_toshiftjis {

	public String toShiftjis( String strData ) {

		String ret = "";

		if ( strData != null ) {
			try {
				ret = new String( 
					strData.getBytes( "ISO_8859_1" ),
					 "Shift_JIS"
				);
			}
			catch( UnsupportedEncodingException e ) {
				ret = "UnsupportedEncoding";
			}
		}

		return ret;

	}

}

  

  
// *********************************************************
// c_atoi.java
// *********************************************************
package light;

public class c_atoi {

	public int atoi( String strData ) {

		int ret;

		try {
			ret = Integer.parseInt(strData);
		}
		catch (NumberFormatException e) {
			ret = 0;
		}

		return ret;

	}

}

  

以下でコンパイルしています

javac c_toshiftjis.java
javac c_atoi.java



  タグによるインスタンス化と使用

Beans の定義では、本当はいろいろ条件を書籍で知る事ができます。

が、とにかくこのように書いて Tomcat で使えますから、気にしないで下さい。

  
<%@ page
	language="java"
	contentType="text/html;charset=Shift_JIS"
%>
<jsp:useBean id="MyBean1" scope="session" class="light.c_toshiftjis" />
<jsp:useBean id="MyBean2" scope="session" class="light.c_atoi" />

<HTML>
<BODY>
<CENTER>
<H1>Beans テスト</H1>
<FORM method="post">
	文字列&nbsp;&nbsp;<INPUT type="text" name="String">
	<INPUT type="submit" name="send" value="送信">
</FORM>
</CENTER>
<%
out.print("Shift_JIS 変換=");
out.println( MyBean1.toShiftjis( request.getParameter("String") ) + "<br>" );
out.print("数値 変換=");
out.println( MyBean2.atoi( request.getParameter("String") ) + "<br>" );
%>
</BODY>
</HTML>

  

以下のようにしても同じ結果になります

  
<%@ page
	language="java"
	import="light.*"
	contentType="text/html;charset=Shift_JIS"
%>

<HTML>
<BODY>
<CENTER>
<H1>Beans テスト</H1>
<FORM method="post">
	文字列&nbsp;&nbsp;<INPUT type="text" name="String">
	<INPUT type="submit" name="send" value="送信">
</FORM>
</CENTER>
<%
c_toshiftjis MyBean1 = new c_toshiftjis();
c_atoi MyBean2 = new c_atoi();

out.print("Shift_JIS 変換=");
out.println( MyBean1.toShiftjis( request.getParameter("String") ) + "<br>" );
out.print("数値 変換=");
out.println( MyBean2.atoi( request.getParameter("String") ) + "<br>" );
%>
</BODY>
</HTML>

  



  同じようで違う セッションスコープ

一見結果だけを見ただけでは同じですが、c_toshiftjis.java を以下のように変更して違いを確かめてみます

  
// *********************************************************
// c_toshiftjis.java
// *********************************************************
package light;

import java.io.*;

public class c_toshiftjis {

	public String ret = "";

	public String toShiftjis( String strData ) {

		if ( strData != null ) {
			try {
				ret = new String( 
					strData.getBytes( "ISO_8859_1" ),
					 "Shift_JIS"
				);
			}
			catch( UnsupportedEncodingException e ) {
				ret = "UnsupportedEncoding";
			}
		}

		return ret;

	}

}

  

そして、以下のようなページを作成して最初のページで変換後、このページへ移動してみて下さい

  
<%@ page
	language="java"
	contentType="text/html;charset=Shift_JIS"
%>
<jsp:useBean id="MyBean1" scope="session" class="light.c_toshiftjis" />
<jsp:useBean id="MyBean2" scope="session" class="light.c_atoi" />

<HTML>
<BODY>
<CENTER>
<H1>Beans スコープテスト</H1>
<%
out.print("前のShift_JIS 変換=");
out.println( MyBean1.ret + "<br>" );
%>
</CENTER>
</BODY>
</HTML>

  

最初のページで変換した内容が次のページで表示されます。これは、インスタンスがセッション間で保持されている事を示します。もちろん、インスタンス名が同じだからこそ同じものを指すわけですが、

c_toshiftjis MyBean1 = new c_toshiftjis();

だとこうは行きません。java への変換結果を見てもインスタンスの作成方法は全く違います

(注) テストの為に変えてしまいましたが、このままでは toShiftjis の引数が null の場合、以前の内容が返されてしまいます。ご注意を










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ