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

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

Javaの画面表示-その3:JSPで表示、サーブレットで処理(リダイレクト編)

2006-12-12 16:20:05 | JavaとWeb

 シリーズJavaの画面表示のつづきです。

 今、JSPで表示画面を作成し、サーブレットで処理部分を書くということをやっていて、前回までで、フォワードを使って、つなぐことをやっていました。今回は、もうひとつのやり方、リダイレクトを使ってやってみたいと思います。




■リダイレクトとフォワードの違い

 リダイレクトとフォワードの違いは、
ここ
http://www.atmarkit.co.jp/fjava/javatips/062jspservlet029.html
 
にあるように、

 フォワードは、サーバー内での処理(そのため、サーバーのクラス内のJSP,サーブレットにジャンプできる)のに対し、

 リダイレクトは、いったんクライアントにもどして、クライアントのブラウザが、表示先にジャンプします

 そのため、リダイレクトの場合には、まったく違ったサーバーにも、移動できます。
 ただし、違ったサーバーに移動する場合は、セッションは使えません(セッションは、そのサーバー内でしか、値は参照できない)。そのため、GET型、URLに引数の値を設定して、移転先に渡す形になります。

 今回は、サーバーを変えないので、セッションでもいいのですが、サンプルということで、URLの引数に結果をセットする形でやってみたいと思います。




■変更内容の仕様と概要

<仕様>
以下の2点が変わります
(1)入力結果、エラーメッセージ、正解率の受け渡しが、
   セッションから、URLの引数にかわります。

(2)フォワードからリダイレクトに変わります

<仕様変更対象ファイル>
以下のファイルが変更対象になります
・index.jsp
・kekka.jsp
・shori.java

<変更の概要>
(1)セッションからURLの引数へ
JSPで、
String msg = (String)session.getAttribute("msg");
のようにセッションから取得していたところが、
String msg = request.getParameter("msg");
のように、パラメータを取得するように変わります。

なお、Javaのほうも変わりますが、それについては(2)
でやっています。

(2)フォワードからリダイレクトに変わります

shori.javaで、いままで、

getServletContext().getRequestDispatcher("/jsp/index.jsp").forward(request,response);

のようにやっていたところを

response.sendRedirect("http://127.0.0.1:8080/test/jsp/index.jsp?msg=NoData");

のように変えます。




■JSPソース

 では、JSP側のソースindex.jspとkekka.jspを以下に載せます。

●ソース index.jsp
<html>
<head>
<%
//==============================================//
//	画面用の部分			  //
//==============================================//

//	変数を受け取る
	String msg = request.getParameter("msg");
	if ( msg	==	null )
	{
		msg	=	"";
	}


//==============================================//
//	以下、画面表示			  //
//==============================================//
%>
<title>早打ちの練習</title>
</head>
<body>
<h1><font color=red><%=msg%></font></h1>
<H1>早うちの練習</H1>
以下の文を打とう!<BR>
<B>This is a pen</B><BR>
<form method=get action="http://127.0.0.1:8080/test/servlet/shori">
<input type=text name=nyuryoku size=20><P>
<input type=submit name=do value=打ち終わった!><P>
</form>
</html>

(上記< > ¥ は本当は半角です。赤字は、今回変わったところ)

●ソース kekka.jsp
<html>
<head>
<%
//==============================================//
//	画面用の部分			  //
//==============================================//

//	変数を受け取る
	String ritu = request.getParameter("ritu");

//==============================================//
//	以下、画面表示			  //
//==============================================//
%>
<title>早打ちの練習</title>
</head>
<body>
<H1>結果</H1>
正解率 = <%=ritu%><BR>
</html>

(上記< > ¥ は本当は半角です。赤字は、今回変わったところ)



■ Javaのソース
●ソースshori.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class shori extends HttpServlet {
	public void service(HttpServletRequest request, 
                      HttpServletResponse response) 
                          throws ServletException, IOException {
		//セッション開始
	 	HttpSession session = request.getSession(true);
 
		//==============================//
		//	データの取得	  //
		//==============================//
		//Fromの引数取得
		String nyuryoku = request.getParameter("nyuryoku");
		if ( nyuryoku	==	null )
		{
		  response.sendRedirect("http://127.0.0.1:8080/test/jsp/index.jsp?msg=NoData");
		}
		else if ( nyuryoku.length()	==	0 )
		{
		  response.sendRedirect("http://127.0.0.1:8080/test/jsp/index.jsp?msg=NoData");
		}

		// 処理
		int	i,atari;
		atari = 0;
		String chk = "This is a pen";
		for(i = 0 ; i < nyuryoku.length() ; i ++ )
		{
			if ( i >= chk.length() )
			{
				break;
			}
			else if ( chk.charAt(i) ==  nyuryoku.charAt(i) )
			{
				atari++;
			}
		}
		//==============================//
		//	ビューにフォワード	  //
		//==============================//
		//	結果の設定
		String sendPara = "";
		sendPara = sendPara + "?msg=%20";
		sendPara = sendPara + "&ritu=" + Integer.toString(atari*100/chk.length());

		//	結果
		response.sendRedirect("http://127.0.0.1:8080/test/jsp/kekka.jsp"+sendPara);
	} 
}

(上記< > ¥ は本当は半角です。赤字は、今回変わったところ)




ということで、今回はここまで。


この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Tomcat6.0が4.Xとちがう点操... | トップ | COBOL時代の分析手法で、JA... »
最新の画像もっと見る

JavaとWeb」カテゴリの最新記事