JSP の forward を使用した画面移動

  簡単な転送元と転送先



request データはきちんと引き継がれています。

この操作で発生するリクエストと応答は1つだけであって、forward が発生したらそれまでの HTTP 出力を破棄して行き先のコードでやりなおす・・・みたいな感じです。ヘッダ情報ももちろん行き先のページで定義されているものが出力されます。しかし、リクエスト先として送ったアドレスは元のページのまま、といった具合です。作成してみると解りますが、これは非常に楽な機能です

forward_base.jsp
  
<%@ page
	language="java"
	import="java.io.*"
	import="java.text.*"
	import="java.util.*"
	contentType="text/html;charset=shift_jis" %>
<%
response.setHeader( "Expires", "Wed, 31 May 2000 14:59:58 GMT" );

// *****************************************************
// * 送信ボタン
// *****************************************************
String Submit = request.getParameter( "send" ) + "";

// 単純受け渡し( オブジェクトを渡す )
request.setAttribute( "baseSubmitValue", "単純受け渡し:" + Submit );

// *****************************************************
// * 送信ボタンを押した場合
// *****************************************************
if ( Submit.equals( "go" ) ) {
	%><jsp:forward page="forward_next.jsp" /><%
}

%>
<HTML>
<BODY>
<H2>forward をする前の画面</H2>
<FORM method="get">
	<INPUT type="text" name="inData">
	<INPUT type="submit" name="send" value="go">
	<INPUT type="hidden" name="testData" value="非表示">
</FORM>
</BODY>
</HTML>

  

forward_next.jsp
  
<%@ page
	language="java"
	import="java.io.*"
	import="java.text.*"
	import="java.util.*"
	contentType="text/html;charset=shift_jis" %>
<%
response.setHeader( "Expires", "Wed, 31 May 2000 14:59:58 GMT" );

out.println( "method = " + request.getMethod() + "<br>" );
out.println( "引き渡された値 = " + request.getAttribute( "baseSubmitValue" ) + "<br>" );

String strData = "";	// 表示埋め込み用
String strKey = "";		// 入力項目名用

// 入力データ用テーブル
HashMap hashData = new HashMap();

// 入力項目の名前の一覧
Enumeration e = request.getParameterNames();
while( e.hasMoreElements() ) {
	// 入力項目の名前を取得
	strKey = e.nextElement().toString();
	// データ追加( SHIFT_JIS に変換してセット )
	hashData.put( strKey, 
		new String(
			request.getParameter( strKey ).getBytes("ISO_8859_1" ),
			"Shift_JIS" )
	);
}
// 元の画面に戻る
if ( hashData.get( "send" ).equals( "戻る" ) ) {
	%><jsp:forward page="forward_base.jsp" /><%
}

// キーのセットビューを取得
Set myKeyset = hashData.keySet();

// 列挙用の Iterator を取得
Iterator myIterator = myKeyset.iterator();

// 列挙
while( myIterator.hasNext() ) {
	strKey = (String)myIterator.next();
	strData += strKey;
	strData += " => ";
	strData += hashData.get(strKey) + "<br>\n";
}

%>
<HTML>
<BODY>
<H2>移動後の画面</H2>
<%= strData %>

<FORM method="get">
	<INPUT type="submit" name="send" value="戻る">
</FORM>
</BODY>
</HTML>

  



  さて、Java 展開での forward とは



  
// *****************************************************
// * 送信ボタンを押した場合
// *****************************************************
if ( Submit.equals( "go" ) ) {
	
      if (true) {
        _jspx_page_context.forward("forward_next.jsp");
        return;
      }

}
  

タグが実行文に変わっていますが・・・タグで書く必要はなさそうです。
強いて言えば、return を書き忘れないで済みますね。










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





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

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ