kuniku’s diary

はてなダイアリーから移行(旧 d.hatena.ne.jp/kuniku/)、表示がおかしな箇所はコメントをお願いします。記載されている内容は日付およびバージョンに注意してください。直近1年以上前は古い情報の可能性が高くなります。

LastaFluteというforkしたようなプロダクトがあるって

LastaFlute http://dbflute.seasar.org/ja/lastaflute/

SAFluteを、2014年末に調査しているころには見かけなかったような・・・。
でも
SAStrutsというか、Struts使わないことが多くなってるんだよな。
JavaScriptのMVMM(MVC)が増えて、jsonXMLばかりになってしまったんだよな(SAStrutsjsonが使えないというわけではない)。
ただ、jspは比較的処理が速いよ。

サーバ側は、MVCで SpringMVCやJavaEEでのJAX-RSが多い。


・タイプセーフ
・非同期
・認証
Cookieを使った自動認証
・CsrfToken
おぉ、っと思った。
SpringMVC+SpringSecurityやStrutsのtokenにも相当しているか?
また、JavaEEの非同期(@Asynchronous)相当もあるのかな?

        • スライドの 23/36 にある


Form(フォーム&クエリパラメータ)はあまり使わず、JSONかURLパラメータを使っています
JSONのほうが階層や配列などを表しやすいためです
json主流だよね、階層や配列は、連想配列のようにkey-Valueのペアであったりわかりやすいね。
ネストしているのもわかりやすい。表の中に表とか。

<servlet>
	<servlet-name>Jersey</servlet-name>
	<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
	<init-param>
		<param-name>com.sun.jersey.config.property.packages</param-name>
		<param-value>jp.co.sitename.rest</param-value>
	</init-param>
	<init-param>
		<param-name>javaEncoding</param-name>
		<param-value>utf-8</param-value>
	</init-param>
	<init-param>
		<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
		<param-value>true</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
	<servlet-name>Jersey</servlet-name>
	<url-pattern>/api/*</url-pattern>
</servlet-mapping>
        • js
AjaxでのリクエストURL
 var baseURL= "/WebContextName/api";
 var url = baseURL + "/foo/go";
 var test = xhr(url);
 ・・・


function xhr(url,param){
	var response;
	$.ajax({
		type: 'post',
		url: url,
		async: false,
		contentType: "application/json",
		data: toJSON(param),
		success : function(data, dataType) {
			response = data;},
		error: function(XMLHttpRequest, status, errorThrown){
			errHandle(errorThrown);
		},
	});
	return response;
}


// JSONにKOオブジェクトを変換
function toJSON( data ) {
   jsのOSSライブラリで、jsonに変換
}

function errHandle(){

}
@Path("/foo")
@Stateless
public class FooResource {

	/** EJB */
	@EJB
	private Foo ejb;

	/**
	 */
	@POST
	@Path("/go")
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.APPLICATION_JSON)
	public FooBean init(final FooBean param ,
					@Context final HttpServletRequest request){
		return ejb.go();
	}
}

@Local
public interface Foo {
	FooBean show(FooBean param);
}

@Stateless
public class FooEjb implements Foo {

	@Override
	public FooBean show(FooBean paramn) {
	
		FooBean result = new FooBean();
		return result;
	}
}