ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

オブジェクト指向で開発の最初から最後までの手順例-その41:雛形(14)

2007-12-10 14:13:03 | 開発ネタ

オブジェクト指向でやる場合の最初から最後までの流れを、実際の例を挙げて書いていくシリーズ「オブジェクト指向で開発の最初から最後までの手順例」

 現在、「いままでのまとめ」にある、「(4)フレームワークにもとづき、クラスなどの開発手順、雛形の確定」をやっています。
 で、作らなきゃいけない雛形などのうち、現在、「コントローラー」についてやっていて、そのコントローラーのサンプルの、編集型と検索型を作り、前回は仕様書もつくったので、今回は、その仕様書をもとに、雛形ソースをつくります。




■雛形ソースの概要

 雛形ソースも、サンプル同様、編集型と検索型の2種類あります。
 で、これらどちらも、サンプルでは、引数に関しては、ビューから受け取ったもの全部をモデルに渡し、モデルから受け取ったもの全部を、ビューに返して(XMLに書き出して)います。なので、仕様書の引数のところは関係ないものとします。

 そうすると、編集型と検索型のどちらも、変更箇所は、以下のとおり

・public class $#$CELL D3$#$ extends HttpServletと、クラス名を変更
・「主処理:処理を実行する」ところ
		$#$CELL D5$#$	obj = new $#$CELL D5$#$();
		int kekka = obj.$#$CELL H5$#$(map);

と変更(検索型の場合、intではなく、返り値はVector)




■雛形ソース(編集型)

 そーすると雛形ソースの編集型(返り値は、エラーコードまたは正常終了のときの0のみでいいもの)は、以下のようになります。

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class $#$CELL D3$#$ extends HttpServlet {

	/*
	 * サーブレットが入ってくるところ<BR>
	 */
	public void service(HttpServletRequest request, 
                      HttpServletResponse response) 
                          throws ServletException, IOException {

		//============================================//
		//前処理:データをハッシュマップに全部入れる	//
		//============================================//
		HashMap	map	=	new HashMap();

		//セッション開始
	 	HttpSession session = request.getSession(true);

		//	セッションのデータを全部ハッシュマップに移す
		Enumeration namelist = session.getAttributeNames();
		if ( namelist	!=	null )
		{
			while(namelist.hasMoreElements() == true )
			{
				String key = (String)namelist.nextElement();
				key	=	new String(key);
				map.put(key,session.getAttribute(key));
			}
		}
		
		//  画面からのrequestデータを全部ハッシュマップに入れる
		request.setCharacterEncoding("utf-8");
		Enumeration namelist2 = request.getParameterNames();
		if ( namelist2	!=	null )
		{
			while(namelist2.hasMoreElements() == true )
			{
				String key = (String)namelist2.nextElement();
				key	=	new String(key);
				map.put(key,request.getParameter(key));
			}
		}

		//==============================//
		// 主処理:処理を実行する	    //
		//==============================//
		$#$CELL D5$#$	obj = new $#$CELL D5$#$();
		int kekka = obj.$#$CELL H5$#$(map);

		//==============================//
		// 後処理:結果をセットする	//
		//==============================//
		
		//	(1)セッションセット
		if ( kekka	==	0 )
		{
			String[] mapKeyList = (String [])map.keySet().toArray();
			for(int i = 0 ; i < mapKeyList.length ; i ++ )
			{
				if ( mapKeyList[i].indexOf("*session")>= 0 )
				{
					session.setAttribute
                                                (mapKeyList[i],map.get(mapKeyList[i]));
				}
			}
		}
		
		//	(2)結果をXMLで返す

	         // (2)-1 ContentTypeを設定
	         response.setContentType("text/xml; charset=utf-8");
		response.addHeader("Cache-Control", "no-cache");
                  response.addHeader("Pragma", "no-cache");

	         // (2)-2 出力用PrintWriterを取得
    	         PrintWriter out = response.getWriter();

	         // (2)-3 出力
		out.println("<?xml version='1.0' encoding='UTF-8' ?>"); 
		out.println("<kekka xml:lang='ja'>");
		out.println("<retcode>"+kekka + "</retcode)");
		out.println("</kekka>");

	}
}

(上記< > =は、本当は半角)




■雛形ソース(検索型)

 一方、雛形ソースの検索型(返り値は、検索結果複数アイテム)は、以下のようになります。

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class $#$CELL D3$#$ extends HttpServlet {

	/*
	 * サーブレットが入ってくるところ<BR>
	 */
	public void service(HttpServletRequest request, 
                      HttpServletResponse response) 
                          throws ServletException, IOException {

		//==============================================//
		// 前処理:データをハッシュマップに全部入れる  //
		//==============================================//
		HashMap	map	=	new HashMap();

		//セッション開始
	 	HttpSession session = request.getSession(true);

		//	セッションのデータを全部ハッシュマップに移す
		Enumeration	namelist = session.getAttributeNames();
		if ( namelist	!=	null )
		{
			while(namelist.hasMoreElements() == true )
			{
				String key = (String)namelist.nextElement();
				key	=	new String(key);
				map.put(key,session.getAttribute(key));
			}
		}
		
		//	画面からのrequestデータを全部ハッシュマップに入れる
		request.setCharacterEncoding("utf-8");
		Enumeration	namelist2 = request.getParameterNames();
		if ( namelist2	!=	null )
		{
			while(namelist2.hasMoreElements() == true )
			{
				String key = (String)namelist2.nextElement();
				key	=	new String(key);
				map.put(key,request.getParameter(key));
			}
		}

		//==============================//
		//	主処理:処理を実行する //
		//==============================//
		$#$CELL D5$#$	obj = new $#$CELL D5$#$();
		Vector kekka = obj.$#$CELL H5$#$(map);

		//==============================//
		//   後処理:結果をセットする   //
		//==============================//
		
		//	(1)セッションセット
		String[] mapKeyList = (String [])map.keySet().toArray();
		for(int i = 0 ; i < mapKeyList.length ; i ++ )
		{
			if ( mapKeyList[i].indexOf("*session") >= 0 )
			{
				session.setAttribute
                                    (mapKeyList[i],map.get(mapKeyList[i]));
			}
		}


		//	(2)結果をXMLで返す

	    	// (2)-1 ContentTypeを設定
	    	response.setContentType("text/xml; charset=utf-8");
		response.addHeader("Cache-Control", "no-cache");
        	         response.addHeader("Pragma", "no-cache");

	    	// (2)-2 出力用PrintWriterを取得
    		PrintWriter out = response.getWriter();

	    	// (2)-3 出力
		out.println("<?xml version='1.0' encoding='UTF-8' ?>"); 
		out.println("<kekka xml:lang='ja'>");
		if ( kekka	==	null )
		{
			out.println("<retcode>-1</retcode)");
		}
		else
		{
			out.println("<retcode>0</retcode)");
			for(int i = 0 ; i < kekka.size() ; i ++ )
			{
				HashMap rec = (HashMap)kekka.elementAt(i);
				out.println("<item>");
				String[] key = (String[])rec.keySet().toArray(new String[0]);
				for(int j = 0 ; j < key.length ; j ++ )
				{
					out.println("<"+ key[i] + ">");
					out.println(rec.get(key[i]).toString());
					out.println("</"+ key[i] + ">");
				}
				out.println("</item>");
			}
		}
		
		out.println("</kekka>");

	}
}


(上記< > =は、本当は半角)



 今回、テストしてないので、何か間違ったところがあったらごめんなさい。

 あと、ここで示したような自動変換のExcelファイルを使えば、仕様書から上記雛形をもとに、サーブレットをじゃんじゃん?作成してくれる「はず」です。

 ということで、コントローラー(サーブレット)の部分の雛形は終わりです。
 次回からは、画面(View)の話です。


この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« IP枯渇問題って、IPV4を高く... | トップ | 自動車の前方/後方をカメラ... »
最新の画像もっと見る

開発ネタ」カテゴリの最新記事