strutsブロッキングajax非同期呼び出し異常問題(二)
前編で述べたフロントjsでstrutsブロッキングajax非同期呼び出し異常問題を解決できるほか、バックグラウンドでも同様に解決できる.
原理:ブロック時、オブジェクトの戻り値がStringかvoidかを判断します.voidであれば一般的に非同期呼び出し操作です.前編のように非同期呼び出しであるか否かを判断することも可能である.
まず、グローバルの戻り値を定義します.
struts.xml構成
illegalメソッドの定義
原理:ブロック時、オブジェクトの戻り値がStringかvoidかを判断します.voidであれば一般的に非同期呼び出し操作です.前編のように非同期呼び出しであるか否かを判断することも可能である.
まず、グローバルの戻り値を定義します.
struts.xml構成
<global-results>
<result name="exception">/WEB-INF/vm/error.vm</result>
<result name="error">/WEB-INF/vm/error.vm</result>
<result name="login" type="redirect">http://test/login.action</result>
<result name="illegal" type="redirect">http://test/illegal.action</result>
</global-results>
illegal action定義を追加するには、次の手順に従います. <action name="illegal" method="illegal" class="com.action.login.LoginAction">
</action>
バックグラウンドJAVA:illegalメソッドの定義
public void illegal(){
response.setCharacterEncoding("UTF-8");
try {
response.setContentType("text/plain;charset=" + response.getCharacterEncoding());
Writer writer = response.getWriter();
writer.write(" ");
writer.flush();
writer.close();
} catch (Exception e) {
logger.error("error:", e);
}
}
ブロッキング:
if(illegal){
if (isAjaxRequest(reuqeset)) {// ,
return "login";
} else {// , json
return "illegal";
}
}
private boolean isAjaxRequest(HttpServletRequest request) {
String header = request.getHeader("X-Requested-With");
if (header != null && "XMLHttpRequest".equals(header))
return true;
else
return false;
}