JSPで書かれたアプリからPOSTされたデータを、Wicketで書かれたアプリで取り出してみる

はじめに

 今回はちょいネタです。
 先日「JSPで書かれたアプリからPOSTされたデータ、簡単にWicketで書かれたアプリで取れそうだけど実際どうだろう」ということが話題に上がりました。

 というわけで実験してみたので、メモを記録。
 結論から言いますと、大抵の人が想像する方法で取れます。

環境

アプリの配置

 下記のようにしました。要はJSP部分と、Wicket部分を今回は別アプリにしました。
 分けたのは必然性があったわけではなく、「なんとなくそうした」という程度の理由です。
 

フォルダ名 説明
startJsp JSPで書いたアプリ
jsptowicket Wicketで書いたアプリ
他のフォルダ 今回関係ありません。

実験用ソースの概要

 JSPで書かれたアプリから、「user」と「pass」という名前のFormの要素をサブミットし、Wicketで書かれたアプリで取り出します。
 要素名に意味はありません。

JSP側のソース

 何というか、「まあ、そんなものだよね」という程度の記述です。
 XHTMLになっていることに理由はありません。
 form要素のaction属性に設定しているURLは、Wicketで書いたアプリの「ホームページ」です。

<?xml version="1.0" encoding="windows-31j" ?>
<%@ page language="java" contentType="text/html; charset=windows-31j"
    pageEncoding="windows-31j"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-31j" />
<title>Insert title here</title>
</head>
<body>

<form action="http://localhost:8080/jsptowicket/" method="post">
    user:<input type="text" name="user"/><br/>
    pass:<input type="text"  name="pass"/><br/>
    <input type="submit"/><br/>
</form>

</body>
</html>

Wicket側のソース

 getParameterメソッドを使用して、値を取り出しています。
 そして、取り出した値をラベルにセットしています。
 HTMLの実装は割愛します。

package jspToWicket.page;

import org.apache.wicket.PageParameters;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.protocol.http.WebRequestCycle;


public class HomePage extends WebPage {

    private static final long serialVersionUID = 1L;

    public HomePage(final PageParameters parameters) {
    	WebRequestCycle cycle = getWebRequestCycle();
    	String userSt = cycle.getRequest().getParameter("user");
    	if(userSt == null){
    		userSt ="";
    	}
    	String passSt = cycle.getRequest().getParameter("pass");
    	if(passSt == null){
    		passSt = "";
    	}
        add(new Label("user", userSt));
        add(new Label("pass", passSt));
    }
}

おわりに

 JSPから値を受け取るページを、ブックマーク可能なページなページにしておけば、今回のように簡単にできそうです。
 JSPWicketを一つのアプリ内で混在させて、なおかつブックマーク不可能なページで値を受け取りたい、とかだと面倒な予感。