0

ここに問題があります:

フィルター サーブレットを使用してセッション属性を設定した後、別の通常の HTTP サーブレットでセッション属性を取得しようとしましたが、getAttribute('system.userinfo') では何も取得できないようです。これの何が問題なのですか?ありがとう!

public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {
    HttpServletRequest httpReq = (HttpServletRequest) request;
    HttpServletResponse httpResp = (HttpServletResponse) response;
    HttpSession session = httpReq.getSession();

    httpReq.setCharacterEncoding("UTF-8");

    UserDTO dto = new UserDTO();
    session.setAttribute("system.userinfo", dto);

    chain.doFilter(request, response);

}


public class FileUpload extends HttpServlet {
    @SuppressWarnings("unchecked")
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html");
        response.setCharacterEncoding("UTF-8");

        // cannot get anything here
        UserDTO userinfo = (UserDTO)request.getSession(false).getAttribute("system.userinfo");


        }
}

両方のサーブレットは同じ Web アプリケーションにあります。

4

1 に答える 1

0

フィルターで作成されたと思われるサーブレットでセッションを取得していないようです。フィルターでは、常に新しいセッションを作成する req.getSession() を使用しています。request.getSession(false) を指定しているサーブレットでは、セッションが存在しない場合、または既存のセッションを返す場合、コンテナーは null を返すことになっています。どのサーブレット コンテナを使用していますか? IDE を使用している場合、デバッグ ポイントを挿入してセッション ID を比較し、それらが同じであることを確認できますか? また、あなたの UserDTO はシリアライズ可能ですか?

于 2012-05-11T05:06:06.057 に答える