2016-05-27 10 views
1

コントローラクラスの下には@RequestMappingがあり、どちらもHttpSession httpSessionです。コントローラクラスでHttpSessionをグローバルに宣言しますか?

HttpSession httpSessionをグローバルに宣言できますか?HttpSessionを複数宣言でき、複数の関数で使用できますか?

@Controller 
public class ControllerClass{ 

    @RequestMapping(value="/sectionsAjax", method=RequestMethod.POST) 
    public @ResponseBody String sectionsAjax(HttpSession httpSession){ 
     // Code 
    } 

    @RequestMapping(value="loadAjax", method=RequestMethod.POST) 
    public @ResponseBody String sectionsAjax(HttpSession httpSession){ 
     // Code 
    } 
} 

答えて

1

は、要求のコンテキストで実行されていない、あなたは利用可能なHttpSessionを有していなくてもよいです。リクエストのコンテキストであっても、(まだ)セッションが作成されていない可能性があります。

あなたのケースに合っているかもしれませんが(あなたの現在のアプローチよりも優れていますが)、春のRequestContextHolderを使用しています。

public static HttpSession getHttpSession() { 
    ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); 
    return attr.getRequest().getSession(true); 
} 

よう

何かが常に(がない場合は、セッションを作成する)サーブレットコンテナに(getRequestAttributesnullを返さないためのチェックを追加した後に)動作します。

HttpSessionをコントローラに注入(または「グローバルに宣言」)する方法について質問したところで、少し拡張してください。 Springのコントローラ(基底のJavaオブジェクト)は、「シングルトンスコープ」と呼ばれる、非常に長寿命のシングルトンオブジェクトです。セッションは「セッションスコープ」のオブジェクトであるため、コントローラに直接注入することはできません(依存関係は同じくらい長くなければなりません)。プロキシ(この場合はシングルトンスコープを有する)を使用して、例えばセッションスコープ。それはあなたの場合には面倒なことではありません。詳細は、Bean scopesの章をご覧ください。

0

私はあなたがコントローラでのHttpSessionをautowireすることができると思う:

@Autowired 
private HttpSession session; 
+0

ya私はブラウザで –

+0

404のHTTPステータス404を与えてみましたか?任意のスタックトレース? – codependent

+0

org.springframework.beans.factory.BeanCreationException:名前 'ajaxFunctions'を持つBeanの作成中にエラーが発生しました:autowired依存関係の注入が失敗しました。 –

関連する問題