サーブレットRequestAware ActionContextの使用上の注意点



@SuppressWarnings("serial")
public class TestRequestAction extends ActionSupport implements ServletRequestAware{
    private HttpServletRequest request ;
	@Override
	public void setServletRequest(HttpServletRequest request) {
		this.request = request;
	}
	String retString = request.getParameter("retString");
	public String showRet(){
		
		System.out.println(retString);
		return this.SUCCESS;
	}
	
}

---------------------------------------------------------------------------------

@SuppressWarnings("serial")
public class TestRequestAction extends ActionSupport implements ServletRequestAware{
    private HttpServletRequest request ;
	@Override
	public void setServletRequest(HttpServletRequest request) {
		this.request = request;
	}
	
	public String showRet(){
		String retString = request.getParameter("retString");
		System.out.println(retString);
		return this.SUCCESS;
	}
	
}

第1セグメントコードと第2世代コードの違いを見ましたか?違いはrequestを使用する場所の違いであり、最初のコードを使用すると報告される可能性があります.
「Unable to instantiate Action,....action.CartAction,defined for'...'in namespace'/...'null」のエラー.
実行順序:
1.requestリクエストによるactionのネーミングスペースの取得
2.servlet要求のPathに基づいて、その要求を呼び出すActionの名前を解析する(actionName)
3、Actionコンテキストの作成(extraContext)
4、前に獲得したnamespace、actionName、extraContextに基づいて、ActonProxyを作成する
5、proxyのexecute()メソッドを実行し、Actionが実行した戻り値に基づいて対応するResult(戻り結果処理)を実行するメソッドを呼び出す.
HttpServiceletRequestインスタンスを持つには、Actionオブジェクトインスタンスを構築します.
同様のActionContextオブジェクトインスタンスがActionContextオブジェクトインスタンスよりも前に作成する、このようにしてActionContextコンテナオブジェクトがnullを返す可能性がある.
したがって、サブ問題を解決する方法は簡単である、メンバー変数や構築方法で直接注入オブジェクトを使用したり、ActionContextを呼び出すのではなく、他の方法に置くべきである.