我有一个问题:
在我使用过滤器servlet设置会话属性后,我尝试在另一个普通的http servlet中检索会话属性,但看起来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");
}
}
两个servlet都在同一个Web应用程序中。
答案 0 :(得分:0)
好像你没有在你认为在Filter中创建的servlet中获取会话。在过滤器中,您使用req.getSession(),它始终创建一个新会话。在您提供request.getSession(false)的servlet中,如果没有会话存在,则容器应返回null或返回现有会话。你在使用哪个servlet容器?如果您使用的是IDE,是否可以放置调试点并比较会话ID以确认它们是否相同?另外,您的UserDTO是否可序列化?