我正在尝试 HttpSessionBindingListener 示例,但事件未触发。我在这里做错了什么。
这是我尝试设置的 Attribute 类的代码和 servlet 类的代码。
servlet 正在工作,但没有显示我期望的输出。
public class SimpleAttribute implements HttpSessionBindingListener {
PrintWriter writer;
public SimpleAttribute(PrintWriter writer) {
this.writer = writer;
}
public void valueBound(HttpSessionBindingEvent event) {
writer.write("Value bound called");
writer.write("<br/>");
}
public void valueUnbound(HttpSessionBindingEvent event) {
writer.write("value Unbound called");
writer.write("<br/>");
}
}
public class SessionBindingServlet extends HttpServlet {
private static final String SIMPLEATTR = "simpleattribute";
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
ServletContext servletContext = getServletContext();
PrintWriter out = response.getWriter();
response.setContentType("text/html");
try {
servletContext.removeAttribute(SIMPLEATTR);
out.write("removed previous attribute successfully");
out.write("<br/>");
} catch (Exception e) {
}
servletContext.setAttribute(SIMPLEATTR, new SimpleAttribute(out));
out.write("Added simple attribute successfully");
out.write("<br/>");
}
}
最佳答案
您实际上并未将对象绑定(bind)到 HttpSession
,而是将其绑定(bind)到 ServletContext
。
您应该使用
检索HttpSession
HttpSession session = request.getSession(true);
并添加属性
session.setAttribute(SIMPLEATTR, new SimpleAttribute(out));
这将触发一个HttpSessionBindingEvent
,它将通知您的HttpSessionBindingListener
实现类对象。
关于java - 未调用 HttpSessionBindingListner 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21274030/